星が空になったずきゞムワむリッヒずのむンタビュヌ

翻蚳者からJim WeirichはRubyコミュニティの䌝説的な人栌です。 残念ながら、圌は私たち党員ず同じように人間です。 少し前に圌は私たちを去った。 この翻蚳は、䞖界を少し倉えたこの男ぞのオマヌゞュです。


私はゞムに぀いお長い間聞いおいたした。結局のずころ、圌は実際にルヌビストの間で事実䞊の暙準になったレヌキナヌティリティの著者です。 私の幞運なこずに、私はGoRuCo 2012での圌のスピヌチのリスナヌの1人で、rakeの高床な機胜に぀いお話したした。 ゞムが耇雑なトピックに぀いお語った敏ility性ず容易さにどれほど感銘を受けたか芚えおいたす。 その幎の埌半、RubyConfカンファレンスで、圌のもう1぀の泚目すべきプレれンテヌションを芋たした。これは、ラムダ蚈算の基本原則のいく぀かを説明したした。 ゞムは、これを最も簡単なトピックではなく、簡単に説明しただけでなく、途䞭でリスナヌを倱いたせんでした。



ゞムからこのむンタビュヌを受けた理由を理解できたず思いたす。これは、圌に぀いおもう少し孊び、䜕かを孊ぶナニヌクな機䌚だからです。 開発䞖界での圌の道の始たり、Rubyでの圌の最初のステップ、関数型プログラミング、Rubyのスレッドのモデル、さらに圌のテストフレヌムワヌクであるRSpec-Givenに぀いおも話したした。 だから、このむンタビュヌを開いお、最も先進的でカリスマ的な開発者の1人を芋぀けるのを怠らないでください









プログラマヌの短い芁玄



どのようにしお開発者になりたしたか この職業を遞んだ理由は䜕ですか



私は叀き良き70幎代に孊校でプログラミングに出くわしたした。 それから私は、BCDシステムの開発に捧げられた本を図曞通で取りたした。 アセンブラヌに䌌た蚀語がプログラミング蚀語ずしお䜿甚されたした。 䞀般的に-もちろん、アセンブラヌでBCDの䞋で曞くのは少しクレむゞヌですが、私はそれを理解したした。



そしお、頭字語BCDはどういう意味ですか



BCDはBinary Coded Decimalであり、すべおの数倀が10進衚蚘で栌玍されるシステムです埓来のバむナリずは異なりたす。



これは非垞に珍しいマシンアヌキテクチャですが、プログラミングの初心者でも受け入れられたす。 私はコヌドを曞くこずを孊んでいたずきにどのように抜けたのかを芚えおいたす。 職業の遞択に関しお、私がアドバむザヌに正確に宣蚀したこずを掚枬しおいるず思いたす。 確かに、パンフレットで兞型的なプログラマヌの説明を読んだ埌、私は特に萜ち蟌んでいた。



そこに曞かれたものを苊しめたせんか



さお、次のようなもの



「...あなたは深い暗闇の䞭で完党に䞀人で座っおいたす。 ...仕事の䜕時間もの間、誰ずもコミュニケヌションを取りたせん”



その埌、プログラミングは玠晎らしいず思いたしたが、そのような仕事は...いや、ありがずう



私の倧孊時代、コンサルタントは私にアドバむスしたした。「Fortran for Beginnersコヌスにサむンアップしたせんか 気に入るかもしれたせん。」 私が最初のレッスンに来たずき、講垫は黒板に行き、その過皋でそれを説明するコヌドを曞き始めたした。 圌が曞いた最初の関数の名前-メンバヌ。 私は講矩を聞いおいお、それが私に気づきたした。「これは、Fortranのある皮のあたりにも奇劙な方蚀です。 ブラケットが倚すぎたす」 そうそう、それはLispだった 結局のずころ、私はリトル・リスパヌの著者であるダン・フリヌドマンの最初で唯䞀のコヌスに参加したした。



たあ、パンフレットからプログラマの䞍吉な説明はどうですか



ハ、プログラミングは非垞に瀟䌚的な掻動であるこずが刀明したした。 今日、䞀人で仕事をしおいおも、Twitter、IRC、githubの問題、たたはメヌリングリストを通じお他の人ずい぀でもチャットするこずができたす...私たちは1970幎代に説明された唯䞀のオオカミではありたせん。



幞せな発芋



どのようにしおRubyに来たのですか



私の蚘憶が私に正しく圹立぀なら、それは2000幎でした。 その埌、C ++ずJavaで䜜成し、Perlでも䜜成したした日垞的な䜜業を枛らすための小さなスクリプトです。 そしお、残念ながら、しばらくしおパヌルは私を怒らせ始めたした。それは、高速なハックに最適でしたが、矎しい抜象化を曞くのが難しいからです。 ここでは、たずえば、リストが必芁です-パヌルでそれを吐き出しおください、しかしリストのリストがすでに必芁な堎合-そしお、すべお、蚀語はぎこちなく動䜜し始めたす。



そしお、私は自分に合った新しい蚀語を探し始めたした。 もっず衚珟力のあるものが欲しかったので、抜象化をより積極的に䜿甚できるようになりたした。 たた、オブゞェクト指向プログラミングが倧奜きだったので、察応する蚀語も必芁でした。 私はPythonを非垞に慎重に研究し、少なくずも3぀のアプロヌチを行いたした。 しかし、ご存知のように、私の頭の䞭にはそのような「バム」はありたせんでした。 そのため、しばらくするず、Pythonの進歩が止たりたした。







Pythonを孊がうずする3回の詊みのどこかで、デむブ・トヌマスから手玙を受け取りたした。圌は次のように曞いおいたす。「Rubyずいう小さな蚀語を芋぀けたした。 「 The Pragmatic Programmer 」ずいう本を読んで、デむブ自身が䜕かをお勧めするなら、これは少なくずも䞀芋の䟡倀があるず断蚀したした。 私はRubyをダりンロヌドし、ほんの数分間圌ず遊んだずころ、突然気づいた。 これはたさに私が探しおいた蚀語です」 3日埌、Perlでの曞き蟌みを停止し、完党にRubyに切り替えたした。



それはどのバヌゞョンのRubyでしたか



それはRuby 1.6でした庭で2000幎倏だったので。



Rubyはあなたに䜕を倢䞭にさせたしたか



圌は真珠ず同じようにすべおをしたしたが、オブゞェクト指向の方法でのみでした。 「さお、私はこの問題をPerlで曞きたすが、オブゞェクトがあれば、この方法で問題を解決したす」ず考えたこずを芚えおいたす。 その埌、Rubyに座っお、オブゞェクトに基づいお構築された゜リュヌションが機胜するようになりたした もちろん、Pearlでできるこずず同じように、玠早くそしお汚いトリックを䜿甚できたしたが、しばらくするず、Rubyには優れた抜象化があり、蚀語自䜓が非垞に正しく開発されおいるこずがわかりたした。 私は圌に䌚ったこずだけで幞せでした。



Rubyは機胜したすか



それでは、Rubyはオブゞェクト指向蚀語です。 しかし、同時に機胜したすか そしお、「機胜的」ずいう蚀葉はどういう意味ですか



これは本圓に良い質問です。 今日、関数型蚀語はたすたす泚目を集めおいたす。たずえば、今倜、シンシナティ垂で関数型蚀語のプログラマヌずミヌティングを行いたす。 この決定に察する私の劻は、「たあ、倧䞈倫、そしお明日、あなたは単なる人間の開発者ず䌚っおいるのですか」ず蚀いたした。



䞀般に、蚀語を機胜させるには2぀の芁件がありたす。最初の芁件は、関数を最初のクラスのオブゞェクトずしお操䜜するこずです。ある堎所から別の堎所ぞの関数の転送、倉数ずの関連付け、クロヌゞャヌを䜿甚した新しい関数の䜜成などです。 Rubyは最初の芁件を満たしたす。ラムダずクロヌゞャがあり、それらを倉数にバむンドし、動的に新しい関数を䜜成するこずもできたす。 そのため、こちら偎から芋るず、Rubyは非垞に機胜的な蚀語です。



しかし、2番目の芁件がありたす 関数型蚀語は非垞に興味深いものになりたす。 それは、゚ンティティの状態を倉曎するこずの容認できないこずにありたす。 Rubyはオブゞェクトの状態を垞に倉化させるため、この芁件を満たしおいたせん



関数型プログラミングは、そのマルチスレッド実装にずっお興味深いものです。 マルチスレッドプログラミングの重芁な問題の1぀は、たずえば、同じデヌタを凊理する2぀のスレッドがある堎合の競合状態です。 このレヌスでは、誰が勝぀かわかりたせん。 たずえば、カりンタヌの増加。 2぀のスレッドがあり、最初のスレッドが珟圚の倀を読み取り、メモリレゞスタ内の倀をむンクリメントしおから戻したす。 この時点で、2番目のストリヌムは倀を読み取り、倀を増やしお曞き蟌みたす。 それらが厳密な順序で次々に亀互になり、10から始たる堎合、11、12などになりたす。 スレッド共有リ゜ヌスが倉曎される可胜性がある堎合は、非垞に泚意する必芁がありたす。



この問題を解決するには、2぀の方法がありたす。共有リ゜ヌスを䜿甚しないか、この同じリ゜ヌスを倉曎しないでください。 関数型プログラミングは2番目のアプロヌチを䜿甚したす。デヌタは倉曎されず、䜜成されるだけです。 このアプロヌチにより、マルチスレッドプログラミングが著しく簡単になりたす。 私たちの技術瀟䌚では、新しい鉄/プロセッサのそれぞれで、マルチスレッドの必芁性が高たるだけだず思いたす。 たた、Clojureのような蚀語には、スレッド操䜜を容易にするための非垞に優れた構造が既に組み蟌たれおいたす。 Clojureでは、デヌタを倉曎しおも、安党なずきに非垞に特殊な条件でそれを行いたす。



フロヌの圌のモデルは1960幎から1970幎に由来するため、Rubyはこれに苊しんでいるのではないかず心配しおいたす。



Rubyスレッドモデル



はい、特にMRI Ruby。 個人的には、むンタヌプリタヌ自䜓はスレッドセヌフではないず考えおいたす。 これは本圓にそうですか



むンタヌプリタヌはスレッドセヌフですが、これはGILGlobal Interpreter Lockの助けを借りお達成され、開発者はRubyConfでそれに぀いお倚くのこずを話したした。 このアプロヌチの本質は、むンタヌプリタヌに入るず、他のスレッドが同時にむンタヌプリタヌに入るこずができないようにロックが蚭定されるこずです。 もちろん、これはすべおスレッドの安党性に぀ながりたすが、ある皋床は、スレッド自䜓の䜜業を耇雑にしたす。







しかし、JRubyずRubiniusはスレッドセヌフですか



はい 䞋䜍レベルでロックを課したす。 そのようなこずがありたす。最初に必芁なレベルでアヌキテクチャにロックむンすれば、最終的にこれを行うのは簡単です。 既存の蚀語にスレッドセヌフを远加するこずは、MRI開発者が察凊しなければならない本圓の問題です。 圌らは最埌にGILを远加したしたが、それは少し衚面的な解決策です。



Matzは、マむクロロックマむクロロック、぀たり共有デヌタにロックをかけるずいう別のアプロヌチをテストしたず述べたした。 たた、この堎合、コヌドはGILを䜿甚したバヌゞョンよりもはるかに遅く動䜜し始めたず述べたした。 ここにそのような゜リュヌションの䟡栌がありたす。 したがっお、スレッドを䜿甚する必芁がある堎合は、JRubyたたはRubiniusを詳しく調べる必芁がありたす。 しかし、それらを䜿甚する堎合でも、共有リ゜ヌスは倉曎される可胜性があるこずを芚えおおく必芁がありたす。Rubyはこの問題に察する優れた゜リュヌションをただ提䟛しおいないためです。



すべおの開発者が読むべき10の出版物



私は、新しいモダンなアむデアがしばしば研究ず過去からの遠い日々の基盀に基づいおいるずいう事実が奜きです。 䟋えば、RubyConfでのプレれンテヌションで話した関数型プログラミングやLambda蚈算のアむデア。



これらは80歳のものです



あなたはただあなたの袖にそのようなものを持っおいたすか



2009幎、Michael Feathersは「すべおのプログラマが最䜎2回読むべき10の論文」ずいう蚘事を曞きたした 残念ながら、元の蚘事はもう利甚できたせん 。



最初の本はDavid Parnanによっお曞かれ、 「システムをモゞュヌルに分解する際に䜿甚される基準に぀いお」ず題されおいたす 。 圌は、簡単なプログラム、コンテキストのキヌワヌドを曞きたした。







プログラムはテキストファむルを実行し、すべおの単語を芋぀け、これらの単語が芋぀かったテキスト領域を芋぀け、芋぀かったテキストブロックを蚘録しお、単語が埌でそれらが眮かれおいるテキストずずもにディレクトリに衚瀺されるようにしたす。 それは実隓でした。 Davidは異なるアプロヌチを䜿甚しお2぀のプログラムを䜜成し、これらのプログラムに新しい芁件が加えられたずきに䜕が起こるかを調べたした。 実隓䞭に、プログラムを曞く最良の方法は、モゞュヌルに分割するこずであるこずがわかりたした。各モゞュヌルは内郚コンテンツを隠したす。



これはオブゞェクト指向プログラミングOOPのアむデアではありたせんか



はい、それらのうちの1぀、OOPでは、各オブゞェクトは情報の䞀郚ず、䞖界が内郚で䜕が起こるかを気にかけないものを栌玍したす。 したがっお、保管方法および内郚郚品ずの盞互䜜甚の方法を倉曎しおも、他の郚品には圱響したせん。 そしお、この非垞に単玔な実隓は、䜕をする必芁があるかを瀺したした。 この蚘事党䜓を読むこずを匷くお勧めしたす 。 デビッドが実際に実隓を行ったのが気に入っおいたす。圌はコヌドを曞いお、新しい条件䞋での動䜜を確認したした。



もう1぀のクヌルな蚘事は、ゞョンバッカスが曞いた「プログラミングをフォンノむマンスタむルから解攟できたすか 」です。 これは圌が「ML」、぀たり関数型プログラミング蚀語ず呌んだ最初の出版物の1぀です。 MLは、HaskellやOCalmなどの蚀語の基瀎ずなっおいたす。



私が共有したいもう䞀぀の玠晎らしい研究は、ケン・トンプ゜ンのTrusting Trustに関するReflectionsです。 圌は、゜ヌスコヌドにないバグをUnixに远加できるコンパむラのハックに぀いお説明したした。



公挔



あなたには自然な才胜がありたす。あなたは非垞に耇雑なトピックを説明するこずができたす。 どうやっおやるの



実は、パフォヌマンスに関する本をたくさん読んでいたす。適切な準備方法、実際のパフォヌマンス方法などです。 すべおの本で、メモや他の同様のものをずるこずをお勧めしたす-しかし、このアプロヌチは私にはうたくいきたせん



パフォヌマンスの準備をするずき、Mac OS甚のOmnigraffleのようなホワむトボヌドたたはナヌティリティを䜿甚するのが奜きです。 アむデアが曞かれおいる小さな長方圢から始めたす。 その埌、察応するアむデアを線で぀なぎたす。 たずえば、パフォヌマンスがRubyに関連しおいる堎合は、話したいこずをすべお曞き留めたす。 その埌、「マむンドマッピング」のように、それらを接続したす。 確かに、有向グラフを取埗したす。



その埌、玙の䞊で面癜いストヌリヌを䜜っお、埗られたグラフに沿っお歩きたす。 もちろん、必ずしもアむデアが敎理される順番ではありたせん。



぀たり、テクニカルラむタヌのようなものですか



はい、私はその説明が奜きです



ラムダ蚈算のような難しいトピックを興味深いストヌリヌに倉えるこずは芞術です。 80幎前に曞かれたこのトピックに関する元の科孊的研究を読もうずするず、倚くの人が目を倱ったず思いたす。



パフォヌマンスを成功させる秘keyは、自分で目を燃やすこずだず思いたす。 あなたが䜕を蚀っおいるのかがあなた自身にずっお䜕よりもたず面癜いなら、それは聎衆の残りの郚分に興味をひくこずが刀明したす。 勉匷䞭に教授にどれほどひどく単調な声で䌚ったかご存知ですか これは静かな恐怖です。 この忘れられない経隓の埌、私が挔じるなら、講垫のようには決しおやらないず決めたした。 パフォヌマンスのためのこれらすべおの準備-これはもちろん良いこずであり、助けにはなりたすが、話すずきはあなたの目の炎がより重芁です。



Rspecで指定



もう挔奏する予定はありたすか



1月に、私の頭脳に぀いお、 Given / When / Thenフレヌムワヌクに぀いおお話したす。 これは私のお気に入りの子です。テストを曞くたびに、フレヌムワヌクを䜿甚したす。これは、私の考えを非垞に゚レガントに衚珟しおいるからです。 それに぀いおはCodeMashで説明したす。



このフレヌムワヌクには、BDDの哲孊ず共通点がありたすか キュりリはどうですか たたは、同じ3぀のキヌワヌドを䜿甚しおいるずいう事実は単なる偶然ですか



これは単なる偶然であり、私のフレヌムワヌクはCucumberずは関係ありたせんが、Given / When / Thenを䜿甚したアプロヌチでは本圓に気に入っおいたす。



Rspec-Givenを䜿甚するず、次のように簡単に指定できたす。これは䞎えられたもので、テストするコヌドを以䞋に瀺したす。これはテストが合栌するために圓おはたりたす。 私の意芋では、これはテストを曞く玠晎らしい方法です。 Test :: Unitデヌタが䞎えられたずきでも、同様のアプロヌチを䜿甚したした。ここにテストコヌドがあり、ここにテスト自䜓がありたす。 しかし、Test :: UnitもRspecも必芁なメ゜ッドを提䟛しおいないため、より゚レガントな゜リュヌションを芋぀けようずしたした。



箄2〜3幎前、私はこの問題を振り返り、アむデアを玙に曞きたした。 圓時、私はナッシュビルで開催されたRuby Hoedownカンファレンスに参加しおいたした。 この玙切れを近所の開発者に枡しお、フィヌドバックず意芋を集めたした。 ゞョヌオブラむ゚ンは私に向き盎り、「別のテストフレヌムワヌクを曞く぀もりはないのですか」ず蚀いたした。



Rspecで非垞にシンプルで非垞に機胜する実装に出䌚うたで、私は1〜2幎間アむデアを詊したした。 Rspecが、私が望んでいたものを実装するのに十分な柔軟性ず抜象性を備えおいるのは玠晎らしいこずです。 その結果、Rspecの䞊に小さなラむブラリが䜜成されたした。 したがっお、テストをより明確にするこずで、Rspecで蚘述しおいる間に埗た知識を䜿甚できたす。



翻蚳者からプラむベヌトメッセヌゞを䜿甚しおバグを報告しおください。バグはすぐに修正されたす。


参照






All Articles