Loading...

平均を打ち負かす

Original

April 2001, rev. April 2003

(この記事は、2001年のFranz Developer Symposiumで行われた講演に基づいています。)

1995年の夏、私の友人であるロバート・モリスと私は、Viawebというスタートアップを立ち上げました。 私たちの計画は、エンドユーザーがオンラインストアを構築できるようにするソフトウェアを書くことでした。 当時、このソフトウェアの斬新な点は、通常のWebページをインターフェースとして使用して、私たちのサーバー上で実行されたことです。

もちろん、多くの人が同時にこのアイデアを持っていた可能性がありますが、私の知る限り、Viawebは最初のWebベースのアプリケーションでした。 私たちは、このソフトウェアが非常に斬新なアイデアだと思ったため、その名前を会社名にしました。 Viawebは、私たちのソフトウェアがデスクトップコンピューターではなく、Webを介して動作したからです。

このソフトウェアのもう1つの珍しい点は、Lispと呼ばれるプログラミング言語で主に書かれたことです。 これは、それまで主に大学や研究室で使用されていたLispで書かれた最初の大きなエンドユーザーアプリケーションの1つでした。[1]

秘密兵器

エリック・レイモンドは、「ハッカーになる方法」というエッセイを書いており、その中で、彼は将来のハッカーに学ぶべき言語について語っています。 彼は、PythonとJavaから始めることを提案しています。なぜなら、それらは学びやすいからです。 真剣なハッカーは、UnixをハックするためにCを学ぶ必要があり、システム管理とcgiスクリプトのためにPerlを学ぶ必要もあります。 最後に、真に真剣なハッカーは、Lispを学ぶことを検討する必要があります。

Lispを学ぶ価値は、あなたがそれを理解したときに得られる深い啓蒙体験にあります。 その体験は、あなたが実際にLisp自体を頻繁に使用しなくても、残りの人生でより良いプログラマーになるようにします。

これは、ラテン語を学ぶために聞く傾向があるのと同じ議論です。 それはあなたに仕事を与えてくれません。古典の教授になる場合を除いてですが、それはあなたの心を向上させ、あなたが使用したい言語(英語など)でより良いライターになります。

しかし、ちょっと待って。このメタファーはそこまで伸びません。 ラテン語があなたに仕事を与えてくれない理由は、誰もそれを話さないからです。 あなたがラテン語で書けば、誰もあなたを理解できません。 しかし、Lispはコンピューター言語であり、コンピューターはプログラマーであるあなたが指示する言語を話します。

では、Lispがあなたをより良いプログラマーにするなら、なぜあなたはそれを使いたくないのでしょうか? もし、画家が彼をより良い画家にするブラシを提供されたら、彼は自分のすべての絵にそれを使いたいと思うでしょう。 私はここでエリック・レイモンドをからかおうとしているわけではありません。 全体的に、彼のアドバイスは良いです。 彼がLispについて言っていることは、ほぼ常識です。 しかし、常識には矛盾があります。Lispはあなたをより良いプログラマーにするでしょうが、あなたはそれを使いません。

なぜですか?結局のところ、プログラミング言語は単なるツールです。 もし、Lispが本当により良いプログラムを生み出すなら、あなたはそれを使い続けるべきです。 そして、そうでなければ、誰がそれを必要とするでしょうか?

これは単なる理論的な問題ではありません。 ソフトウェアは非常に競争の激しいビジネスであり、自然な独占にさらされています。 ソフトウェアをより速く、より良く書ける会社は、他のすべての条件が同じであれば、競合他社を事業から追い出すでしょう。 そして、スタートアップを立ち上げるとき、あなたはこれを非常に強く感じます。 スタートアップは、すべてか無かの命題になりがちです。 あなたは金持ちになるか、何も得られません。 スタートアップでは、間違ったテクノロジーに賭けると、競合他社に打ち負かされます。

ロバートと私はどちらもLispをよく知っており、私たちの直感を信じてLispを使用しない理由が見当たりませんでした。 私たちは、他の誰もがC++またはPerlでソフトウェアを書いていることを知っていました。 しかし、私たちはそれが何も意味しないことも知っていました。 あなたがそのようにテクノロジーを選択した場合、あなたはWindowsを実行することになります。 テクノロジーを選択するときは、他の人が何をしているかを無視し、最もうまくいくものだけを考慮する必要があります。

これは、特にスタートアップでは当てはまります。 大企業では、他のすべての大企業が行っていることを行うことができます。 しかし、スタートアップは他のすべてのスタートアップが行っていることを行うことはできません。 私は、スタートアップでも、多くの人がこれを認識していないと思います。

平均的な大企業は、年間約10%成長します。 そのため、あなたが大企業を経営していて、平均的な大企業と同じようにすべてを行っている場合、あなたは平均的な大企業と同じようにうまくいくことを期待できます。つまり、年間約10%成長します。

もちろん、あなたがスタートアップを経営している場合も同じことが起こります。 あなたが平均的なスタートアップと同じようにすべてを行っている場合、あなたは平均的なパフォーマンスを期待する必要があります。 ここでの問題は、平均的なパフォーマンスは、あなたが事業から撤退することを意味するということです。 スタートアップの生存率は50%をはるかに下回っています。 そのため、あなたがスタートアップを経営している場合、あなたは何か奇妙なことをする必要があります。 そうでなければ、あなたはトラブルに巻き込まれます。

1995年にさかのぼって、私たちは競合他社が理解していないことを知っていました。そして、今でもほとんどの人が理解していません。 自分のサーバーでのみ実行する必要があるソフトウェアを書いている場合、好きな言語を使用できます。 デスクトップソフトウェアを書いている場合、オペレーティングシステムと同じ言語でアプリケーションを書くという強いバイアスがあります。 10年前、アプリケーションを書くことは、Cでアプリケーションを書くことを意味していました。 しかし、Webベースのソフトウェアでは、特に言語とオペレーティングシステムの両方のソースコードを持っている場合、好きな言語を使用できます。

ただし、この新しい自由は諸刃の剣です。 好きな言語を使用できるようになったため、どの言語を使用するかについて考える必要があります。 何も変わっていないと見せかけることを試みる企業は、競合他社がそうではないことに気づくリスクがあります。

好きな言語を使用できる場合、どの言語を使用しますか?私たちはLispを選びました。 まず、この市場では急速な開発が重要であることは明らかでした。 私たちは皆、ゼロからスタートしたので、競合他社よりも早く新機能を完成させることができる会社は、大きなアドバンテージを持つことになります。 私たちは、Lispはソフトウェアをすばやく書くための非常に優れた言語であることを知っていました。サーバーベースのアプリケーションは、ソフトウェアを完成した瞬間にリリースできるため、急速な開発の効果を増幅します。

他の企業がLispを使用したくなければ、それは私たちにとってより良いことです。 それは私たちに技術的な優位性を与えるかもしれません。そして、私たちは可能な限りのすべての助けを必要としていました。 Viawebを始めたとき、私たちはビジネス経験がありませんでした。 私たちはマーケティング、採用、資金調達、顧客獲得について何も知りませんでした。 私たち2人とも、いわゆる本当の仕事をしたことがありませんでした。 私たちが得意だったのはソフトウェアを書くことだけでした。 私たちはそれが私たちを救うことを願っていました。 ソフトウェア部門で得られるあらゆるアドバンテージは、私たちが受け入れるでしょう。

そのため、Lispを使用することは実験だったと言えるでしょう。 私たちの仮説は、もし私たちがLispでソフトウェアを書けば、競合他社よりも早く機能を完成させることができ、また、彼らができないことをソフトウェアで行うことができるということです。 そして、Lispは非常に高レベルだったので、私たちは大きな開発チームを必要としませんでした。そのため、私たちの費用は低くなりました。 もしこれが本当なら、私たちはより良い製品をより安い価格で提供することができ、それでも利益を得ることができます。 私たちは最終的にすべてのユーザーを獲得し、競合他社は誰も獲得せず、最終的に事業から撤退することになります。 それは、私たちが期待していたことです。

この実験の結果はどうだったでしょうか?驚くべきことに、それはうまくいきました。 最終的に、私たちは20〜30社ほどの多くの競合他社を持つようになりましたが、彼らのソフトウェアのどれも私たちのソフトウェアに匹敵しませんでした。 私たちは、サーバー上で実行されながらも、デスクトップアプリケーションのように感じるwysiwygオンラインストアビルダーを持っていました。 私たちの競合他社はcgiスクリプトを持っていました。そして、私たちは常に機能面で彼らをはるかに凌駕していました。 時には、競合他社は、私たちが持っていない機能を導入しようと、必死になっていました。 しかし、Lispのおかげで、私たちの開発サイクルは非常に速かったので、競合他社がプレスリリースで発表してから1〜2日以内に、新しい機能を複製することができました。 ジャーナリストがプレスリリースを報道するために私たちに電話をかけてくる頃には、私たちも新しい機能を持っていました。

私たちの競合他社は、私たちが何らかの秘密兵器を持っているように思えたに違いありません。 私たちは彼らのエニグマトラフィックを解読しているか、何かをしているかのようです。 実際、私たちは秘密兵器を持っていましたが、彼らが認識しているよりも単純でした。 誰も私たちに彼らの機能のニュースを漏らしていませんでした。 私たちは単に、誰もが不可能だと考えていたよりも速くソフトウェアを開発することができました。

私が9歳の頃、たまたまフレデリック・フォースィスの「ジャッカルの日」という本を手に入れました。 主人公は、フランス大統領暗殺を依頼された暗殺者です。 暗殺者は、大統領のルートを見下ろすアパートまで行くために、警察をすり抜ける必要があります。 彼は、松葉杖をついた老人になりきって、警察のそばを通り過ぎます。そして、彼らは彼を疑いません。

私たちの秘密兵器は似ていました。 私たちは、奇妙な構文でいっぱいの奇妙なAI言語でソフトウェアを書きました。 長年、私はLispがそのように説明されるのを聞いて、腹が立っていました。 しかし、今はそれが私たちの有利に働きました。 ビジネスでは、競合他社が理解していない技術的な優位性ほど価値のあるものはありません。 ビジネスでは、戦争と同様に、奇襲は力と同じくらい価値があります。

そして、少し恥ずかしいのですが、Viawebで作業している間は、Lispについて公に何も言いませんでした。 私たちはプレスにそれを言及したことはなく、私たちのWebサイトでLispを検索しても、私の経歴にある2冊の本のタイトルしか見つかりませんでした。 これは偶然ではありませんでした。 スタートアップは、競合他社に可能な限り少ない情報を提供する必要があります。 もし、彼らが私たちのソフトウェアがどの言語で書かれているのかを知っていなかったり、気にかけなかったりした場合、私はそれをそのように保ちたかったのです。[2]

私たちのテクノロジーを最もよく理解していたのは、顧客でした。 彼らは、Viawebがどの言語で書かれているのかを気にしていませんでしたが、それが本当にうまく機能していることに気づきました。 それは、彼らが文字通り数分で素晴らしいオンラインストアを構築することを可能にしました。 そして、口コミで、私たちはますます多くのユーザーを獲得しました。 1996年末までに、私たちは約70のオンラインストアを持っていました。 1997年末までに、私たちは500のオンラインストアを持っていました。 6か月後、Yahooが私たちを買収したとき、私たちは1070人のユーザーを持っていました。 今日、Yahoo Storeとして、このソフトウェアは引き続きその市場を支配しています。 それはYahooの最も収益性の高いものの1つであり、それを使って構築されたストアはYahoo Shoppingの基盤です。 私は1999年にYahooを退社したので、現在彼らが何人のユーザーを持っているのかは正確にはわかりませんが、最後に聞いたところによると、約20,000人でした。

Blubのパラドックス

Lispの何がそんなに素晴らしいのでしょうか?そして、Lispがそんなに素晴らしいなら、なぜ誰もそれを使いませんか? これらは修辞的な質問のように聞こえますが、実際には簡単な答えがあります。 Lispは、熱心な信者だけにしか見えない魔法の品質があるからではなく、単に利用可能な最も強力な言語だから、非常に素晴らしいのです。 そして、誰もそれを使いません。なぜなら、プログラミング言語は単なるテクノロジーではなく、思考の習慣でもあるからです。そして、何もこれほどゆっくりと変化しません。 もちろん、これらの両方の答えは説明が必要です。

衝撃的なほど物議を醸す声明から始めましょう。プログラミング言語は、その力において異なります。

少なくとも、高レベル言語は機械語よりも強力であることに異議を唱える人はほとんどいません。 今日のほとんどのプログラマーは、通常、機械語でプログラミングしたくないことに同意するでしょう。 代わりに、あなたは高レベル言語でプログラミングし、コンパイラにそれを機械語に変換させるべきです。 このアイデアは、今ではハードウェアに組み込まれています。1980年代以降、命令セットは、人間のプログラマーではなく、コンパイラのために設計されています。

誰もが、機械語でプログラム全体を手書きすることは間違いであることを知っています。 あまり理解されていないのは、ここにもっと一般的な原則があるということです。 複数の言語を選択できる場合、他のすべての条件が同じであれば、最も強力な言語以外の言語でプログラミングすることは間違いです。[3]

このルールには多くの例外があります。 特定の言語で書かれたプログラムと非常に密接に連携する必要があるプログラムを書いている場合、新しいプログラムを同じ言語で書くのが良いかもしれません。 数値計算やビット操作など、非常に単純なことを行う必要があるプログラムを書いている場合、特に少し速くなる可能性があるため、それほど抽象的な言語を使用しても構いません。 そして、短くて使い捨てのプログラムを書いている場合、そのタスクに最適なライブラリ関数を持つ言語を使用するのが最善かもしれません。 しかし、一般的に、アプリケーションソフトウェアの場合、あなたは可能な限り最も強力な(合理的に効率的な)言語を使用したいと思うでしょう。 そして、他の言語を使用することは、機械語でプログラミングするのと同じ種類の、ただしおそらく程度が低い、間違いです。

機械語は非常に低レベルであることがわかります。 しかし、一種の社会的慣習として、高レベル言語はしばしばすべて同等に扱われます。 そうではありません。技術的には、「高レベル言語」という用語は、非常に明確な意味を持ちません。 一方に機械語があり、もう一方にすべてが高レベル言語があるという明確な境界線はありません。 言語は、最も強力なものから機械語まで、抽象性の連続体[4]に沿って位置付けられます。機械語自体も、その力において異なります。

Cobolを考えてみましょう。 Cobolは、機械語にコンパイルされるという意味で、高レベル言語です。 Cobolが、たとえばPythonと同等の力を持っていると真剣に主張する人はいるでしょうか? それはおそらくPythonよりも機械語に近いでしょう。

あるいは、Perl 4はどうでしょうか? Perl 4とPerl 5の間で、レキシカルクロージャが言語に追加されました。 ほとんどのPerlハッカーは、Perl 5はPerl 4よりも強力であることに同意するでしょう。 しかし、一度それを認めたら、あなたは1つの高レベル言語が別の高レベル言語よりも強力になり得ることを認めました。 そして、特別な場合を除いて、あなたは可能な限り最も強力な言語を使用する必要があるということが必然的に続きます。

ただし、このアイデアはめったに結論までたどり着きません。 ある年齢を超えると、プログラマーはめったに自発的に言語を切り替えません。 人々がたまたま慣れている言語は、彼らは十分に良いと考える傾向があります。

プログラマーは、自分の好きな言語に非常に執着しており、私は誰かの気持ちを傷つけたくありません。 そのため、この点を説明するために、Blubという仮説上の言語を使用します。 Blubは、抽象性の連続体のちょうど真ん中に位置しています。 それは最も強力な言語ではありませんが、Cobolや機械語よりも強力です。

実際、私たちの仮説上のBlubプログラマーは、それらのいずれも使用しません。 もちろん、彼は機械語でプログラミングしません。 それがコンパイラの役割です。 そして、Cobolに関しては、彼は誰もそれを使ってどのように何かを成し遂げることができるのか理解できません。 それはx(あなたの選択したBlub機能)さえ持っていません。

私たちの仮説上のBlubプログラマーが力の連続体を下向きに見ている限り、彼は自分が下向きに見ていることを知っています。 Blubよりも強力でない言語は、明らかに強力ではありません。なぜなら、それらは彼が慣れている機能をいくつか欠いているからです。 しかし、私たちの仮説上のBlubプログラマーが反対方向、つまり力の連続体を上向きに見ているとき、彼は自分が上向きに見ていることに気づきません。 彼が見ているのは、単に奇妙な言語です。 彼は、それらをBlubと同等の力を持っていると考えている可能性がありますが、この他の毛深いものがすべて追加されています。 Blubは彼にとって十分に良いものです。なぜなら、彼はBlubで考えているからです。

しかし、力の連続体の上位にある言語のいずれかを使用しているプログラマーの視点に切り替えると、彼は今度はBlubを見下ろしていることに気づきます。 Blubでどのように何かを成し遂げることができるのでしょうか?それはyさえ持っていません。

帰納的に、さまざまな言語間の力のすべての違いを見ることができるプログラマーは、最も強力な言語を理解している人だけです。 (これはおそらく、エリック・レイモンドがLispがあなたをより良いプログラマーにすると言っていたことの意味です。) あなたは、他の人々の意見を信頼できません。なぜなら、Blubのパラドックスがあるからです。 彼らは、たまたま使用している言語に満足しています。なぜなら、それは彼らがプログラムについて考える方法を決定するからです。

私は、Basicでプログラムを書いている高校生の頃、自分の経験からこれを知っています。 その言語は、再帰をサポートしていませんでした。 再帰を使用せずにプログラムを書くことは想像しがたいですが、当時私はそれを欠いていませんでした。 私はBasicで考えていました。そして、私はその達人でした。 私が調査したすべてのもののマスターでした。

エリック・レイモンドがハッカーに推奨する5つの言語は、力の連続体上のさまざまな点に位置しています。 それらが互いにどのように位置付けられているかは、デリケートな話題です。 私が言えることは、Lispがトップにあると思います。 そして、この主張を裏付けるために、他の4つの言語を見たときに欠けているものについてお話します。 それらでどのように何かを成し遂げることができるのでしょうか?私は、マクロなしでは不可能だと思います。[5]

多くの言語は、マクロと呼ばれるものを持っています。 しかし、Lispのマクロはユニークです。 そして、信じられないかもしれませんが、それらが行うことは、括弧に関連しています。 Lispの設計者は、単に異なっているために、すべての括弧を言語に入れたわけではありません。 Blubプログラマーにとって、Lispコードは奇妙に見えます。 しかし、これらの括弧には理由があります。 それらは、Lispと他の言語の根本的な違いの外見上の証拠です。

Lispコードは、Lispデータオブジェクトから作られています。 そして、ソースファイルが文字を含み、文字列が言語でサポートされているデータ型の1つであるという自明な意味ではありません。 Lispコードは、パーサーによって読み取られた後、トラバースできるデータ構造から作られています。

コンパイラの仕組みを理解していれば、実際に行われていることは、Lispが奇妙な構文を持っているのではなく、Lispには構文がないということです。 あなたは、他の言語が解析されるときにコンパイラ内で生成される解析木でプログラムを書きます。 しかし、これらの解析木は、あなたのプログラムに完全にアクセスできます。 あなたは、それらを操作するプログラムを書くことができます。 Lispでは、これらのプログラムはマクロと呼ばれます。 それらは、プログラムを書くプログラムです。

プログラムを書くプログラム?いつそんなことをしたいと思うのでしょうか? Cobolで考えているなら、あまり頻繁ではありません。 Lispで考えているなら、常にです。 ここで、強力なマクロの例を示して、「ほら!」と言うことができれば便利でしょう。 しかし、もし私がそうしたら、それはLispを知らない人にとっては単なるナンセンスのように見えるでしょう。 それが何を意味するのか理解するために必要なすべてを説明するスペースはありません。 Ansi Common Lispでは、できるだけ早く物事を進めようとしましたが、それでも160ページまでマクロにはたどり着きませんでした。

しかし、私は、説得力があるかもしれない議論を提示できると思います。 Viawebエディターのソースコードはおそらく約20〜25%がマクロでした。 マクロは通常のLisp関数よりも書くのが難しく、必要ないときに使用するのは悪いスタイルと考えられています。 そのため、そのコード内のすべてマクロは、そこに存在する必要があるからです。 つまり、このプログラムのコードの少なくとも20〜25%は、他の言語では簡単にできないことを行っているということです。 Blubプログラマーは、Lispの神秘的な力の私の主張についてどれほど懐疑的であっても、これは彼を好奇心旺盛にするはずです。 私たちは、自分の楽しみのためにこのコードを書いたわけではありません。 私たちは、競合他社との間に技術的な障壁を築くために、可能な限り懸命にプログラミングしていた小さなスタートアップでした。

疑い深い人は、ここに何らかの相関関係があるのではないかと疑問に思うかもしれません。 私たちのコードの大きな部分は、他の言語では非常に難しいことを行っていました。 結果として得られたソフトウェアは、競合他社のソフトウェアができないことを行っていました。 もしかしたら、何らかのつながりがあるのかもしれません。 私はあなたに、その糸をたどることをお勧めします。 松葉杖をついた老人がゆっくりと歩いているのには、見た目以上のものがあるかもしれません。

スタートアップのための合気道

しかし、私は誰も25歳以上がLispを学びに行くと納得させられるとは思っていません。 この記事の目的は、誰かの考えを変えることではなく、すでにLispの使用に興味を持っている人々を安心させることです。 Lispが強力な言語であることを知っている人々ですが、それが広く使用されていないため心配しています。 競争的な状況では、それはアドバンテージです。 Lispの力は、競合他社がそれを理解していないという事実によって倍増します。

あなたがスタートアップでLispを使用することを考えている場合、それが広く理解されていないことを心配するべきではありません。 あなたはそれがそのようにとどまることを願うべきです。そして、それはあり得るでしょう。 ほとんどの人々が現在使用しているものに満足するようになるのは、プログラミング言語の性質です。 コンピューターハードウェアは、個人の習慣よりもはるかに速く変化するため、プログラミングの慣行は通常、プロセッサよりも10〜20年遅れています。 MITのような場所では、1960年代初頭に高レベル言語でプログラムを書いていましたが、多くの企業は1980年代まで機械語でコードを書き続けていました。 私は、多くの人が、バーテンダーのように、早く店を閉めて家に帰りたいと願うように、プロセッサがついにrisc命令セットに切り替えることで、彼らを追い出してまで、機械語を書き続けていたと思います。

通常、テクノロジーは急速に変化します。 しかし、プログラミング言語は異なります。プログラミング言語は、単なるテクノロジーではなく、プログラマーが考えるものです。 それらは、半分がテクノロジーで、半分が宗教です。[6] そのため、中央値の言語、つまり中央値のプログラマーが使用する言語は、氷山のようにゆっくりと移動します。 Lispによって1960年頃に導入されたガベージコレクションは、今では広く良いものと考えられています。 ランタイム型付けも同様で、人気が高まっています。 1970年代初頭にLispによって導入されたレキシカルクロージャは、今ではようやくレーダーに映り始めています。 1960年代半ばにLispによって導入されたマクロは、まだ未知の領域です。

明らかに、中央値の言語は、莫大な勢いを持っています。 私は、あなたがこの強力な力と戦うことができるという提案をしているわけではありません。 私が提案しているのは、まさにその逆です。 合気道の使い手のように、あなたはそれをあなたの対戦相手に対して使うことができます。

あなたが大企業で働いている場合、これは簡単ではないかもしれません。 あなたは、他の言語が、Adaが20年前のように、世界を席巻しようとしていると新聞で読んだばかりの、とがった髪のボスを説得して、Lispで物事を構築させるのは難しいでしょう。 しかし、まだとがった髪のボスがいないスタートアップで働いている場合、私たちのように、Blubのパラドックスをあなたの有利に転換させることができます。 あなたは、競合他社が、中央値の言語に固執して、決して一致させることができないテクノロジーを使用することができます。

もし、あなたがスタートアップで働くことになったら、競合他社を評価するための便利なヒントがあります。 彼らの求人情報を読んでください。 彼らのサイトの他のすべては、ストック写真か、それに相当する文章かもしれませんが、求人情報は、彼らが何を望んでいるのかを具体的に示す必要があります。そうでなければ、間違った候補者を得ることになります。

Viawebで作業していた間、私は多くの求人情報を読みました。 新しい競合他社は、毎月のように、どこからともなく現れたように思えました。 私が最初にやることは、彼らがライブのオンラインデモを持っているかどうかを確認した後、彼らの求人情報を見ることでした。 これを2、3年続けた後、私はどの会社を心配する必要があるのか、どの会社を心配する必要がないのかを判断できるようになりました。 求人情報がIT的なものほど、その会社は危険ではありませんでした。 最も安全な種類は、Oracleの経験を求めているものでした。 あなたは、それらを心配する必要はありませんでした。 C++またはJavaの開発者を求めている場合も、安全でした。 PerlまたはPythonのプログラマーを求めている場合、それは少し恐ろしいことです。 それは、少なくとも技術的な面が、本物のハッカーによって運営されている会社のように聞こえ始めています。 もし、私がLispのハッカーを求める求人情報を見たことがあれば、私は本当に心配していたでしょう。

注記

[1] Viawebは当初、2つの部分に分かれていました。Lispで書かれたエディターは、人々がサイトを構築するために使用し、Cで書かれた注文システムは、注文を処理しました。 最初のバージョンは、注文システムが小さかったため、ほとんどがLispでした。 その後、Cで書かれた画像ジェネレーターと、主にPerlで書かれたバックオフィスマネージャーという、さらに2つのモジュールを追加しました。

2003年1月、YahooはC++とPerlで書かれた新しいバージョンのエディターをリリースしました。 ただし、このプログラムがもはやLispで書かれていないかどうかは断言できません。なぜなら、このプログラムをC++に変換するために、彼らは文字通りLispインタプリタを書く必要があったからです。 すべてのページ生成テンプレートのソースファイルは、私の知る限り、Lispコードのままです。 (Greenspunの第10法則を参照してください。)

[2] ロバート・モリスは、私が秘密にする必要はなかったと言っています。なぜなら、たとえ競合他社が私たちがLispを使用していることを知っていたとしても、彼らはなぜそうなのか理解できなかったからです。 「もし、彼らがそんなに賢ければ、彼らはすでにLispでプログラミングしているでしょう。」

[3] すべての言語は、チューリング完全であるという意味で、同等の力を持っていますが、それはプログラマーが気にする言葉の意味ではありません。 (誰もチューリングマシンをプログラムしたくありません。) プログラマーが気にする力の種類は、正式に定義できないかもしれませんが、それを説明する1つの方法は、それは、より強力な言語のインタプリタをそれの中で書くことによってのみ、より強力でない言語で得られる機能を指すと言うことです。 言語Aが文字列からスペースを削除するための演算子を持ち、言語Bが持っていなければ、それはおそらくAをより強力にするものではありません。なぜなら、あなたはBでそれを実行するサブルーチンを書くことができるからです。 しかし、Aがたとえば再帰をサポートしていて、Bがサポートしていなければ、それはライブラリ関数を書くことによって修正できるものではない可能性が高いです。

[4] オタクへの注意:または、おそらく格子状で、上に向かって狭くなっています。 ここでは、形ではなく、少なくとも部分的な順序があるというアイデアが重要です。

[5] マクロを別個の機能として扱うのは、少し誤解を招く可能性があります。 実際には、それらの有用性は、レキシカルクロージャやrestパラメータなどの他のLisp機能によって大幅に強化されます。

[6] その結果、プログラミング言語の比較は、宗教戦争か、大学レベルの教科書かのどちらかになります。 教科書は、意図的に中立であるため、実際には人類学の著作です。 平和を大切にする人、または終身在職権を望む人は、この話題を避けます。 しかし、その質問は半分だけ宗教的なものです。 特に、新しい言語を設計したい場合、そこには研究する価値のあるものがあります。