Goが成功する運命にある理由(更新)

TL; DR Golangは、さまざまなレベルのプログラマーの大規模なグループによって書かれた大規模なプロジェクトで繁栄するように特別に設計されており、世界にはそのようなグループはオープンソースコミュニティしかありません。






人生のすべては妥協に基づいています-熱力学の第一法則がこれを証明し、プログラミング言語も例外ではありません。 Goでの妥協点はユニークなものではありませんが、組み合わせが成功したために、 Goは実際に起こりました 。 物理学の法則はまた、すべての行動が反対を引き起こし、人気が高まるにつれて、時には正当化され 、時にはそうではない言語の批判の量も増加することを断言します。 この批判が重要ではないと思う理由を説明させてください。Goは何があっても成功する運命にあります。



レゾン・デトレ



Goがなぜそれであるかを理解するには、最初にその外観の理由を理解する必要があります。

Goプロジェクトの目標は、Googleでのソフトウェア開発の遅延と不器用さを排除し、プロセスの生産性と拡張性を高めることでした。 この言語は、大規模なソフトウェアシステムを作成し、読み、議論し、サポートする人々のために、そして人々のために開発されました。
ソース



これがGoを作成する唯一の理由であり、それ以上ではありません。 偶然にストリームにヒットしたのはエンターテインメント向けの20%のプロジェクトではなく、これまでに行われたことのない何かを達成する試みではありませんでした。 大規模な機能セットを備えた言語で記述された大規模なコードを扱う大規模なチームによって必然的に作成された複雑さによる失望から作成されました。 そして、これらの利益に従うため、すべての妥協案が選ばれました。 そして、これらの妥協に不満を抱いているなら、おそらくあなたの興味が単に一致しないだけで、Goを使う必要はありません。



Goの最も重要な機能の1つは、コンパイル速度または簡単な同時実行ですが、Goを特別なものにする主な機能は、その信じられないほどのシンプルさです。 Goはあらゆる方法で大規模なGoogleプロジェクトの複雑さを軽減することを目指しており、 DRYのように、いくつかのこと-多くのこと-あなたが常に揺るぎないものと考えていた原則さえも犠牲にすることでそうします。 GoはPythonやRubyとは異なり、明確なコードを「作成」できます。 Goでは、他に選択肢はありません。



例を示してみます。 囲yourはあなたの友人ですが、パーティーの後に運転しないように頼む友人ではありませんが、タクシーを呼ぶために、囲いはあなたのパーティーを中断する友人であり、彼があなたのアルコールをすべて窓から捨てたとあなたに言います。 Goでは、自分自身を足で抽象化することはできません( 自分自身を足で抽象化します。-orig



残りのトレードオフは直交しています。 はい、GoはErlangのように常に「競合状態」からあなたを救うわけではありませんが、Erlangはデータを絶えずコピーするという犠牲を払ってこのセキュリティを提供します-TANSTAAFL



私の評論家



批評家を読んで、これが他の多くのトピックに当てはまる場合、通常、それらを2つのカテゴリに分けることができます。



  1. Goが提起したタスクをGoが最適に解決しないと不満を言う
  2. Goは個人の目標を最適に解決していないと不満を言います。


そして、十分に根拠のある批判があり、それは完全に最初のカテゴリーに分類されます。 時々、それは好みの問題です。 時には物事は人々が想像するよりずっと複雑になることが判明します 。 他の人と同じような人である囲authorの著者が、完全に正しく行っていないことがあります。



しかし、私が会う批評家のほとんどは完全に第二のカテゴリーに属します。 そして、そのような批評家への答えはいつも同じです:「行くことはあなたのためだけではありません。」 一部の人々は、これを長期的にGoを殺すものを改善するコミュニティの回復力と不本意と見なしています。 彼らは、他の人が言語から他のものを望んでいることを単に理解していません。



これらの相反する利益を検出する非常に簡単な方法は、「I」という単語の使用を分析することです。 批評家は一般に失望しています。なぜなら、「私」は「私」が望むことをすることができず、「私」はそれを「私が」望むように表現できないからです。 「私たち」が行っていることについて苦情を聞くことはほとんどありません。



5人の異なる人がさまざまなタイミングで作業した後、または過去の独自のコードでさえもコードが読めなくなることに失望した場合、Goが最適です。 ClojureScriptトリックを使用できないことに失望している場合、Goは探しているものではありません。 あなたが他の人よりもかっこいいことを証明できないこと失望しているなら 、Goは確かにあなたのためではありません。



オープンソース



しかし、個人的な好みはさておき、Goのシンプルさと親しみやすさから間違いなくGoogleに大きな利益をもたらすグループが1つあります。それはオープンソースコミュニティです。



オープンソースプロジェクトは、コミュニティの意見のおかげで存在しています。 非常に少数の成功したプロジェクトが1人の開発者によって作成されました。 オープンソースの世界では、開発者を雇う必要はありません。彼らはあなたのもとに来なければなりません。受け入れるプルリクエスト/パッチを選択することができますが、取得するほど成長が速くなります。



そして、これはGoが誰にも負けないところです。



Goは、特に次の3つの側面で輝いています。



彼は他人のコードを学ぶことを奨励しています。



あなたと私が同じなら、Githubで他の人のプロジェクトのソースコードをよく見るでしょう。 好奇心や必要がないだけですが、定期的に他の人のコードを調べて、そこですべてがどのように機能するかを理解します。 簡単で理解しやすいコードを見つけることもあれば、コードを解読するためにレベルごとにさらに深くする必要があることもあります。 Goのプロジェクトは主に最初のグループになります。



コードに触れないとしても、Goで記述されているという事実から、はるかに優れたコントロールが得られるという理由だけで、特定のオープンソースソフトウェアを常に好みます。 問題が発生した場合、著者だけが問題を解決できるのではなく、著者に完全に依存しているとは思いません。 そして、私がずっと知っている言語で書かれたプロジェクトには同じ感覚はありません。 オープンソースプロジェクトの場合、Goで記述すること自体が利点です。



Goはコミュニティへの貢献を容易にします



あなたがオープンソースプロジェクトの著者である場合、ゲームの平等なルールも特別な利点を提供します。 Goを使用すると、マージリクエストのレビュープロセスが大幅に軽減されます。 go fmtgolintgo vetなどのユーティリティは、コードの書式設定における個人的な好みのためのスペースをほとんど残しません。 そして一般的に、Goは同じことをする千の方法であなたのプロジェクトをモンスターに変えることをそれほど簡単にしません。 インターネットのランダムな人々のコードを確認する必要がある場合、トリックのある言語は必要ありません。おそらく、人々が彼らの素晴らしさを証明しようとは思わないでしょう。 できるだけ明確で明白なものが必要です。 おそらくローカルエラー処理ですら。



Goはオープンソースへの恐怖を軽減します



これは、プロジェクトのソースコードを開くために、プログラミングでロックスターになるか、批判に耐えるロックスターのような自我を持たなければならないというよく知られたポイントです。 そして、コードをどれだけ上手に書いても構いません-彼を憎み、彼がこれをあなたに持って来たことを確かめる誰かが常にいるでしょう。 これは、利他的なことをしている善良な人々を強調する悪い瞬間であり、そのため、著者はオープンソースのリリース段階では不十分であると恐れているため、大量のソースコードが暗闇に残っています。



Goコードは、原則として、他の言語よりもはるかに早く、より早く公開する準備ができているように見えます。開発者に自信と快適さをはるかに強く感じさせ、コミュニティはシンプルで小さな決断を下し、大規模で複雑なものよりも優先します。 全体として、Goは開発者の不安を薄め、暗闇から出てくるコードを増やします。



最終的な考え



実際、Goの成功はすでに起こっています。 最近出てくる多くの重要なシステムソフトウェアはGoで書かれています。 DockerCoreOS、 HashicorpなどのOSS企業は、Goを主要なツールとして使用してサーバーに革命をもたらしました。 ますます多くのデータベース検索エンジンhttpプロキシ、または監視システムが登場しています。 Goはすでにサーバーソフトウェアの世界で大きな役割を果たしており、これはその富を増やすだけです。



正当な目標であっても、その目標を最適に達成できないGoについて苦情がある場合は、言語が変更されないことを受け入れてください。 著者の囲teamチームは、言語が近い将来に安定して完全であることを明確かつ繰り返し明らかにしました。 あなたはパーティーに遅れています。 このために文句を言う人もいれば泣く人もいますが、互換性を壊さないというこの約束は、長期的には考えられる言語の変化よりもはるかに大きな利益をもたらします。 互換性を損なう変更は、たとえ意味のあるものであっても、 Javascript開発の西部でさえ、いつでも歓迎されるものではありません。



シンプルさが本当に好きなのに、Goのいくつかの妥協が耐えられないように見える場合はどうでしょうか。 その後、申し訳ありませんが、ニーズに最適な言語をさらに検索し続けるか、十分な才能があれば独自の言語を作成することできます 。 十分な人が同じものを必要とするなら、 それはサポートさえ得ることができます。



2015年6月14日更新



この記事は少し騒ぎ立てたようです。 最初の24時間で約4万件の訪問があり、直接および間接的に多くのレビューを受けました。 私はインターネットについて議論するつもりはありませんが、将来この記事に出くわした人たちに遅刻した発言をいくつか加えたいと思います。



「成功」という言葉の意味について



「成功」という言葉は、Goが他のすべての既存の言語を置き換えることを意味するものではありません。 それは愚かだろう。 成功とは、開発者の人生のかなりの部分が、Goでコードを記述しない場合、少なくともGoで記述されたソフトウェアを使用することであることを意味します。 これは、プログラミング言語の成功に対する私の理解です。



私の主張の証拠について



この記事は元々 Golang subredditに投稿されたもので、すでに言語に精通している読者を対象としています。 Goのコードがシンプルでサポートしやすいことを証明することは、記事の範囲を超えており、私が知る限り、誰もこれについて議論していません。 私の発言はGoを使用した人には絶対に明白かもしれませんが、それについて何も知らない人には絶対的な宣伝のように思えるかもしれません。



Goのシンプルさを正式に証明する能力はありません。 私は自分の経験からそれらを感じています。 私が正しいかどうかを本当に知りたい場合は、 GoツアーでGithubの人気のあるGoリポジトリをご覧になることをお勧めします。 また、Rob Pikeの記事「 Less is exponentialally more 」も参照することをお勧めします。ここでは、Goの簡略化の多くについて説明および説明しています。



All Articles