/note/tech

なぜGoogleはメインの開発言語をHaskellではなくGoに替えようとしているのでしょうか?Goには大した利点...

Goは、原始的な静的型付けの言語ですが、シンプルで徹底的に実用性を重視した言語です。

乗り換え

C系列の言語なので、C++/Java/PythonからのGoへの切り替えは長くてもせいぜい数週間です。Heskellへの乗り換えには比較的長い時間がかかります。

自社による管理と社内テスト

GoogleはGoを所有しているので、言語を思い通りに変更できます。

互換性

GoはJavaをシンプルにして並列性を高めたものです。静的型付けによりパフォーマンスが向上し、Pythonよりもリファクタリングがしやすいです。Goのほうが開発者人口が多いです。gofmtはコーディングスタイルのつまらない議論に浪費する時間を減らし、高速なコンパイル時間は巨大なソースコードの開発サイクルを早めます。

GoogleがHaskellを使うと何がよいのでしょうか?

ジェネリクスですか? Googleは社内で広くプロトコルバッファを使用しており、恐らくごく一部のオブジェクトのインターフェイスだけがブルートフォースできるでしょう。

正確さですか? Googleは、厳しい人材採用基準、テスト、コードレビュー、インフラ計測など、他の様々な方法で正確さを確保しています。

一方で、Haskellにはスペースリーク、出来の悪いツール(相対的に見て)、遅延評価の問題、無駄なコーディングスタイル論争の機会、開発者の学習カーブの高さなどの問題があります。

Googleは社内で広く使う言語を変えることに関しては非常に保守的です(たくさんのドメイン固有言語DSLを作っていますが)。スティーブ・エッゲはGoogleでRubyを使おうとして それを痛感しました。

要するに、開発に使用する言語の数を絞るというGoogleの決定は、実はとても賢い選択です。最初の数週間はストレスがたまるかもしれません(お勧めしませんが、(現在他社で働いている)私に履歴書を送ってみませんか?)、そして私のような不器用な人間には納得するまでに時間がかかるかもしれません。しかしプログラミング言語には誰もが知っているコアとなる基本機能があり、そして不明瞭なセマンティクスをその後に学んでいくことになり、だんだんと理解が難しくなっていきます。Perl、Python、Rubyなどの類の、オブジェクトの定義が事前に定まらない動的言語は特に難しいです。Googleは言語数を慎重に絞ることで、選んだ言語の専門家集団を社内に作り上げることができます。

また言語の異なるコンポーネントの互換性を確保するために必要な組み合わせの爆発を抑える必要もあります。私がこれまでに在籍していた会社はこれが大きな負担になっていましたが、Googleではこれをほぼ最小限に抑えることができています。

Googleは開発者がグループやオフィスを非常に簡単に移動できる環境を整えています。もちろん大人の対応が求められ、ピンチだからといってチームを見捨てて別のチームにさっさと逃げたりしないようにしないといけません。しかしそんな子供っぽいことをしないのであれば、いつでも好きな時にチームを変えることができ、それで業務が止まってしまうようなことはありません。私がこれまでに在籍した別の会社にはこのようなポリシーがありませんでした。

Google社内にHaskellファンがいないということはありませんが[0]、単にHaskellではGoogleの問題に対処できないのです。