11/03/2019

ロブ・パイクがGoの成功に貢献した5つのこ

changelog.comより

by Jerod Santo

ことわざにもある通り... 歴史は繰り返されませんが、しばしば韻を踏んでいます。

成功するプログラミング言語を作り出したい場合(あるいは、少なくとも自分のやり方を理解したい場合)、それを行った他の人から学ぶことは非常に貴重です。Go Time#100で、ロブ・パイクとロバート・グリーズマー(Goの2人の創作者)が腰を下ろし、言語の成功について議論しました。

ロブ・パイクが番組の中で言語の成功に起因したものを5つ紹介します。

1. フォーマルな仕様を書いた

プロジェクトの起源の話をしながら、ロブは次のように述べました。

しかし、それは仕様に取り掛かったときです。ええ、数週間。だから、私たちは実際に6か月ほどでブレーンストーミングとおおよそで形作りを開始しました。私たちが最初に行った重要なことの1つ— 多分最初に行った重要なこと — は、言語の正式な仕様を作成したことであり、それがプロジェクトの成功の重要な部分だと思います。

その中で最も重要なことの1つは、イアン・テイラーもGoogleにいて、その仕様を見て、そのためのコンパイラを書きたいと思ったことです。ある日、彼は私たちのオフィスに入ってきて、「ああ、ところであなたの言語のコンパイラを書いたよ」と言いました。それは私たちにとって素晴らしい瞬間でした。もちろん、彼はチームの一員となり、現在もGoに取り組んでいます。[ソース]

この仕様は、イアン・ランス・テイラーなどの仲間のエンジニアから最初の関心を集めたものです。

(偶然にも、イアンは最近、genericsに関する彼の仕事について話していました。)

2. キラーアプリを引き付けた

残念なことに、ロブは早い段階でDockerをどのように引き付けたかについては考慮していませんでした。言語を作ることによって… システムプログラマーにを引き付けたと、私は推測しますが?🤷‍♂️

はい、DockerはGoで書かれており、うまく機能し、現在クラウドコンピューティングと呼ばれるものの中心になっているため、Dockerは一種のキラーアプリでした。そして、重要な技術の1つがGoで記述されているという事実は、多くの人々にとってこの言語の目的を正当化しました。そして、実際、そのようなこと向けには、本当に良い言語だと思います。それはまさに私たちが言語を組み立てるときに考えていた類のものですが、私たちはそれを自分でしませんでしたが。

後にKubernetesも登場しました。今度はGoogleからです。しかし、あなたの言語で書かれた重要なソフトウェアを持つことは、言語で成功するために本当に重要な部分です。何も書かれていなくても、その言語がどれほど優れているかは関係ありません。[ソース]

3. オープンソースコミュニティを始めた

ロブは、オープンソースの世界をナビゲートする際に直面した課題について、率直に話してくれました。

私は、チームがオープンソースコミュニティとやり取りするための準備が本当にできていなかったと思います。イアンは、オープンソースの世界で多くの時間を過ごした私たちの唯一の一人であり、彼はコミュニティのものの彼の公正なシェア以上のものをしました。

オープンソースコミュニティの一員であることの意味を理解するのに長い時間を要しました。会社が実質的に費用を負担するプロジェクトを手に入れるには、多くのオープンソースの貢献者がいました。開発は非常に早い段階で行われました。Windowsへの移植は、完全に外部の貢献者によって行われましたが、それが素晴らしかったです... そして、コミュニティのインプットは重要でした。

Googleはコントロールし過ぎていると思う人もいると思いますが、それは彼らの意見ですが、私は同意しません。彼らは、チームがオープンソースコミュニティの言うことをどれだけ聞き、すべての問題を読み、それを非常にうまく処理しているのかを過小評価していると思います。

何千人もの人がいるとき、それは本当に挑戦的なことであり、今では世界中の何百万人ものGoプログラマーであると信じられています。彼らは皆、このことについて、そして聞く方法について意見を持っていますが、プロジェクトの精神を正しく保つようにしています — それに対する簡単な答えはないと思います。多くの人がそれは取るに足らないものだと思っていると思います。あなたはただみんなが望んでいるものを取り入れているだけなのに… しかし、あなたはGoを持っていなくて、あなたはまったく他のものを持っているでしょう。それは本当にトリッキーです、それは非常に難しいバランスをとる行為です。[ソース]

4. 言語を変えるのを難しくした

これは最初は少し直感に反します。通常、ソフトウェアでは、順応性は美徳であり、剛性は呪いです。ただし、ロブは、Goのようなプログラミング言語にとって、立場を変えることが非常に重要である理由を説明しています。

まあ、私たちは変更を難しくしました。Go 1では、何も変更しないことを約束することを意図的に書き留めました。そして、それは言語の成功にとって非常に重要でした。なぜなら、ビジネスは私たちがしていることや私たちに依存していることが自分たちのものを壊さないことを信頼できるからです。多くの人は、この契約をどれほど情熱的に信じているかを理解していないと思います。今では10年前のプロジェクトですが、人々のプログラムを壊していません。運ぶのは信じられないほどの負担ですが、今の場所に連れて行くことは非常に重要でした。[ソース]

5. 信じていた機能にこだわった

Jon Calhounがコミュニティのフィードバックについて尋ね、変更に対するチームの抵抗がどのようにそれに対して果たしたのかを尋ねたとき、ロブは言いました。

Goの成功には重要な機能がありますが、それは人々が好まないものでした。あなたが言及したもの、未使用の変数のコンパイルエラーはそれらの1つだと思います。面倒でした —— 未使用の変数を削除するのを忘れると、プログラムがコンパイルされます。しかし、私たちにとって、それは私たちが伝えようとしていたストーリーの一部でした。それは、たとえあなたが悪いコードを書くのを止められないとしても、可能な限りより良い品質のコードを保証する言語を作ることでした... しかし、私たちはそれを確認できます 物事が入り込まないと、ビルドが遅くなったり、コードの保守が難しくなったりします。

人々を本当に怒らせたのは、使用していないライブラリをインポートすることが許可されていなかったからだと思います。これは、私たちにとって非常に重要なことでした。なぜなら、大規模なバイナリを使用した遅いビルドに多くの時間を費やし、プログラムの依存関係がまさに必要なものであり、それ以上ではないことを確認したからです。私たちにとって非常に重要でしたが、多くの人にとって、編集してprintステートメントなどを削除するたびに、コンパイラは「このライブラリを使用していません。 もうあなたを建てるつもりはありません。」と伝えます。

そして、ブラッドはgoimportsと呼ばれるこのことを書きました。これはあなたのためにインポートを管理するgofmtのバリアントであり、その苦情をほとんど沈黙させました。よくあることですが、自動化は多くの泣き言を取り除くことができます。[ソース]


それらはそこにあります。ロブ・パイクがGoの成功に貢献した5つのこと。会話全体が魅力的で、聞いてみる価値があります。さあ、どうぞ。何を待っているのですか?👇

Hacker News