ポヌル・グラハムオタクの埩ven、パヌト1

私たちは 、ポヌル・グラハムの「ハッカヌず芞術家」の゚ッセむず本を翻蚳し続けおいたす。

オリゞナル- オタクの埩ven

翻蚳に参加したい人-個人で曞いおください



Shchekotova Yanaを翻蚳しおいただきありがずうございたす。

2002幎5月



「C ++プログラマを远いたした。 私たちは圌らの束党䜓をLispに半ばドラッグするこずができたした。」

Guy Steele、Java仕様の共著者。




画像 ゜フトりェアビゞネスでは、知識を持っお歯に歊装しおいる科孊者ず、歊噚にたったく無知な他の恐るべき力のボス*、元のずがった髪のボス-スコット・アダムスのディルバヌト挫画本シリヌズのキャラクタヌは教育されおいたせんそしお、圌が管理する分野の基本的な知識が完党に欠けおいる。 結局のずころ、誰もがそれがどんな動物なのか知っおいたすか テクノロゞヌの䞖界では、ほずんどの人がこの挫画のキャラクタヌを認識するだけでなく、この画像のコピヌ元である䌚瀟の実圚の人物にも粟通しおいるず思いたす。



無知なボスは奇跡的に自分自身で非垞に䞀般的な2぀の資質を組み合わせおいたすが、䞀人で組み合わされるこずはめったにありたせんa技術に぀いおたったく䜕も知らない、そしおb圌は垞にそれらに関する質問に。



たずえば、䜕らかのプログラムを䜜成する必芁があるずしたす。 あなたの無知な䞊叞は、それがどのように機胜するかわからず、あるプログラミング蚀語を別のプログラミング蚀語ず区別するこずはできたせんが、圌はあなたがこのプログラムを曞くべき蚀語を知っおいたす。 ぀たり、圌はあなたがそれをJavaで曞くべきだず信じおいたす。



なぜ圌はそう思いたすか 頭の冒ずくの頭でこの時に䜕が起こっおいるのか芋おみたしょう。 圌が考えおいるのはこんな感じ。 Javaが暙準です。 私は垞にメディアでそれに぀いお読んでいるので、これがそうあるべきだず知っおいたす。 これは暙準であるため、その䜿甚のために問題は発生したせん。これは、垞に倚くのJavaプログラマヌがいるこずを意味したす。 したがっお、私のために働いおいるプログラマヌが蟞めた堎合、私のために働いおいるすべおのプログラマヌは垞に䜕らかの䞍思議な理由でこれを行うので、私はそれらを簡単に亀換できたす。



たあ、それは意味がありたせん。 しかし、これはすべお、1぀の暗黙の仮定に基づいおいたす。これは実際には間違っおいたす。 そのような䞊叞は、すべおのプログラミング蚀語が非垞に䌌おいるず考えおいたす。 もしそうなら、圌は頭に釘を打ったでしょう。 すべおの蚀語が亀換可胜である堎合、もちろん、他の人が䜿甚する任意の蚀語を䜿甚できたす。



しかし、すべおの蚀語は異なっおおり、それらの違いに぀いお䞍必芁な詳现なしであなたにそれを蚌明できるず信じおいたす。 1992幎にプログラムにどのプログラミング蚀語を曞くべきかを尋ねた堎合、圌は間違いなく今日のように答えるでしょう。 ゜フトりェアはC ++で䜜成する必芁がありたす。 しかし、すべおの蚀語が同等であれば、なぜ圓局の意芋はたったく倉わるべきなのでしょうか ぀たり、なぜJava開発者は新しい蚀語の䜜成を心配する必芁があるのでしょうか



どうやら、新しい蚀語を䜜成しおいる堎合、それは䜕らかの方法で、人々がすでに持っおいるものよりも優れおいるず思うからです。 実際、Goslingは最初の公匏Javaドキュメントで、そのJavaプログラミング蚀語がいく぀かのC ++問題を解決するために䜜成されたこずを明らかにしおいたす。 そしお、あなたはここにいたす。 すべおの蚀語が同等ずいうわけではありたせん。 私たちの䞊叞の頭の䞭のJavaぞの思考の流れをたどるず、Javaの歎史を通しおその起源たで、あなたはあなたが始めた仮定に反する予感を抱くでしょう。



だから誰が正しいの ゞェヌムズ・ゎスリング、それずも私たちの無知なボス ゎスリングが正しいのも䞍思議ではありたせん。 䞀郚の蚀語は、特定のタスクに関しお他の蚀語よりも優れおいたす。 そしお、あなたは知っおいる、これは倚くの興味深い質問を提起したす。 Javaは、C ++ず比范しお、さたざたなタスクに最適になるように蚭蚈されおいたす。 どんなタスク Javaを䜿甚したほうがよいのはい぀ですか。C++はい぀ですか。 他の蚀語がこれらよりも優れおいる状況はありたすか。



この問題に぀いお考え始めるずすぐに、混乱した状況に陥りたす。 ボスがタスクを包括的に考える必芁がある堎合、圌の脳は爆発したす。 圌がすべおのプログラミング蚀語を同等ず定矩するずすぐに、圌がする必芁があるのは、最も匷力な開発ペヌスを持぀蚀語を遞択するこずだけです。 そしお、なぜなら それはテクノロゞヌよりもファッションの問題であり、圌でさえ正しい答えを埗るこずができるでしょう。 しかし、蚀語が異なる堎合、圌は突然2぀の方皋匏系を解かなければなりたせん。圌が知らない2぀のこずの間で最適なバランスを芋぀けようずしたす。プログラマ、ラむブラリなど それらのそれぞれに察しお。 これがドアの埌ろにあるものであれば、無知な䞊叞がドアを開けたくないのは驚くこずではありたせん。



すべおのプログラミング蚀語が同等であるずいう確信の欠劂は、実際にはそうではないずいうこずです。 しかし、利点はそれがあなたの人生を倧幅に簡玠化するこずです。 そしお、これがこの信念が広たっおいる䞻な理由だず思いたす。 ずおも䟿利です。



Javaは、新しい最新のプログラミング蚀語であるため、Javaはかなり優れおいるはずです。 そうですか プログラミング蚀語の䞖界を芋䞋ろすず、Javaが最新の技術革新のように思えたす。 十分に長い距離から芋るず、芋えるのは倪陜によっお支払われた倧きな攟射ビルボヌドだけです。しかし、この䞖界をかなり近い距離から芋るず、この涌しさがある皋床あるこずがわかりたす。 ハッカヌのサブカルチャヌには、Perlず呌ばれる別の蚀語がありたす。PerlはJavaよりも栌段に優れおいるず考えられおいたす。 たずえば、SlashdotサむトはPerlで生成されたす。 これらの人たちがJava Server Pagesをどのように䜿甚しおいるかをあなたが芋るずは思わない。 しかし、Pythonず呌ばれる別の新しい蚀語があり、そのナヌザヌはPerlを軜んじようずしたすが、それだけではありたせん 。



これらの蚀語をJava、Perl、Pythonの順序で芋るず、興味深いスキヌムに気付くこずができたす。 Lispを䜿甚する堎合、少なくずもこのスキヌムは顕著です。 それぞれがたすたすLispに䌌おいたす。 Pythonは、倚くのLispプログラマが間違えた機胜もコピヌしたす。 行ごずに単玔なLispプログラムをPythonに倉換できたす。 2002幎であり、プログラミング蚀語は1958幎に開発された蚀語ずほが同等です。



数孊に぀いおいく



私が蚀いたいのは、1958幎にゞョン・マッカヌシヌによっお最初に発芋されたリップスであり、人気のあるプログラミング蚀語は、圌が圓時開発しおいたアむデアを取り䞊げおいるだけだずいうこずです。



それで、これはどうでしょうか コンピュヌタ技術は非垞に速く倉化したせんか 1958幎のコンピュヌタヌは、腕時蚈のようなプロセッサヌのパワヌを備えた冷蔵庫ほどの巚倧なコンピュヌタヌでした。 最新の開発を䞊回るこずは蚀うたでもなく、このような叀い技術はどのように関連性を保぀こずができたすか



方法を説明したす。 これは、実際には、少なくずも今日理解しおいるずいう意味ではなく、Lispがプログラミング蚀語ずしお開発されおいないためです。 プログラミング蚀語ずは、コンピュヌタヌに䜕をすべきかを䌝えるために䜿甚するものです。 最終的にマッカヌシヌは、この意味でプログラミング蚀語を開発するこずを蚈画しおいたしたが、私たちが到達したLispは、玔粋に理論的には圌自身のいく぀かの別個の䜜業に基づいおいたした-チュヌリングマシンのより䟿利な代替手段を定矩する詊みです。 マッカヌシヌが埌に蚀ったように



「Lispがチュヌリングマシンよりも正確であるこずを瀺すもう1぀の方法は、汎甚Lisp関数を蚘述し、ナニバヌサルチュヌリングマシンを蚘述するよりも短く、理解しやすいこずを瀺すこずです。 そのようなものは、Lisp匏の倀を蚈算するLisp関数eval ...でした。 評䟡の説明では、Lispの機胜をLispデヌタずしお衚す衚蚘法を䜜成する必芁があり、そのような衚蚘法は、実際にLispプログラムを衚珟するために䜿甚されるずは考えずに、研究自䜓のために開発されたした。




そしお、これが起こりたした。 しばらくしお、1958幎の終わりに、マッカヌシヌの倧孊院生の1人であるスティヌブラッセルは、evalの定矩を芋お、それを機械語に翻蚳するず、結果はLispのむンタヌプリタヌになるこずを認識したした。



圓時は倧きな驚きでした。 そしお、これに぀いおのマッカヌシヌのむンタビュヌでの話がありたす。



スティヌブラッセルは、「聞いお、なぜこの評䟡関数をプログラムしないのか」ず蚀いたした。そしお、私は圌に答えたした。「はい、あなたは理論ず実践を混同しおいたす。 この評䟡関数は、蚈算するのではなく読むこずを目的ずしおいたす。」しかし、圌は仕事を続け、それを実行したした。 したがっお、圌は私の䜜業からeval関数をIBM 704マシンコヌドにコンパむルし、゚ラヌを修正し、それを実際にLispのむンタヌプリタヌずしお提瀺したした。 したがっお、この芳点から、Lispは基本的に今日持っおいる圢を持っおいたす...




突然、マッカヌシヌは数週間埌に、この玔粋に理論的なむベントが実際のプログラミング蚀語に倉換され、予想以䞊に匷力であるこずを発芋したず思いたす。



したがっお、1950幎代のこの蚀語が時代遅れず芋なされない理由の簡単な説明は、その基瀎が技術ではなく数孊であったずいう事実です。 結局、数孊には有効期限がありたせん。 Lispを1950幎補の機噚ず比范するのではなく、たずえば、1960幎に発芋され、珟圚でも最速の汎甚゜ヌトアルゎリズムであるクむック゜ヌトアルゎリズムず比范する方が正しいでしょう。



1950幎代から存続しおいる別の蚀語であるFortranがあり、これは蚀語開発に察する反察のアプロヌチを衚しおいたす。 Lispは、突然プログラミング蚀語に倉わった理論でした。 Fortranはもずもずプログラミング蚀語ずしお開発されたしたが、今評䟡するように、䜎レベルの蚀語ずしお開発されたした。



1956幎に開発されたFortran Iには、珟圚のFortran蚀語ずはたったく異なるベリヌフィヌルドがありたした。 Fortran Iは、数孊を䜿甚したアセンブリ蚀語に近いものでした。 ある意味では、新しいアセンブリ蚀語よりも匱かったです。 たずえば、サブルヌチンがなく、ゞャンプ操䜜のみがありたした。 珟圚のFortranはおそらくFortran IよりもLispに近いでしょう。

画像



LispずFortranは、2぀の異なる進化ツリヌの枝でした。 1぀は数孊に由来し、2぀目は機械アヌキテクチャに由来したす。 その埌、これら2぀のツリヌは絡み合っおいたす。 Lispは匷力に発射し、今埌20幎間で加速したした。 いわゆる䞻流の蚀語はすぐに始たりたしたが、珟時点では、最も先進的な蚀語はLispに远い付くこずはほずんどありたせん。 圌らは圌の近くを去ったが、ただいく぀かのものが䞍足しおいる。



続く



ポヌル・グラハムによるHabréに関する80以䞊の蚘事。

翻蚳を手䌝いたい人-接続



远䌞

Y Combinatorに興味があり、Grahamのアむデアがあなたに近い堎合は、個人的な手玙に曞いおください。いく぀かのアむデアがありたす。



All Articles