🤡

Go言語が成功した理由

2021/09/27に公開

Go言語の作者であるRob Pike氏が「Go言語が成功した理由は何なのか?」というタイトルで2015年に発表をしてる動画を見つけたので、雑に和訳してみたいと思う

ちなみに最近Go言語の好き嫌いに関する記事がいくつかバズっており、それに乗っかってるというのは言うまでもない

良く挙げられる成功要因

Pike氏は以下がよく理由として挙げられると述べている

  • コンパイルの速さ
  • 実行の速さ
  • デプロイの容易性
  • ツール
  • ライブラリ

しかしこれらは全て表面的であって、本質的な理由ではないとも述べている
ではGo言語が成功に至った本質的な理由とは一体何なのか?彼は続いて説明している

Go言語が成功に至った真の理由

彼は「Simplicity」、シンプルさがGo言語が成功に至った本質的な理由であると述べている
そしてこのコンテキストにおける「シンプルさ」とは以下であると補足している

  • 少なくとも既存の有名な言語と比較してシンプルに見える
  • シンプルさとは多面的である
  • シンプルさを実現するには複雑なことを沢山考えなければいけない

注意しなければいけないのが、Go言語はシンプルなのではなくシンプルに見えるということである

Go言語のシンプルさとは一体何なのか

彼はlang.nextというプログラミング言語の開発者が集うイベントに出席した時の記憶を交えながら、現代のプログラミング言語の進化は以下のような流れを踏襲しているものが多いと述べている

  • 機能を追加することによって他の言語と競争し、進化し続けている
  • 機能を追加し続けることによって言語自体の複雑度は増していくが、追加される機能は基本的に他言語から影響を受けているので、進化し続けるにつれて似ていく傾向がある

ちなみにこの時に発表された言語はJava8, ECMAScript6, C#, C++14等であったと述べている

そして彼は、Go言語はこれらの言語とは以下の点で違うと述べた

  • Goは機能の豊富さで競争するということはしない
  • Goに新しく触れる人は、親しみの深い言語の機能の実装を求めるが、基本的にそれらはGoには相応しくなく、追加されることはない
  • Goに機能を追加しても良くはならない、ただでかくなるだけである
  • Goがでかくなれば、他の言語との違いがなくなるわけであり、つまらない言語になってしまう

要は機能を厳選することによってシンプルさを維持しているのだ。ちなみにGo言語は異なるバックグラウンドを持つ3人の作者によって生まれており、その3人が全員「これは必要な機能だ」と意思表示したものだけを取り込むようにして機能を厳選したとも述べている

シンプルさを維持するために犠牲にしたものとは?

勿論Go言語はシンプルさを維持するために犠牲にしてるものがあり、これはトレードオフであると作者は述べている。具体的には以下のトレードオフである

書いていて楽しい言語 or メンテナンス性が高く、扱いやすい言語

このトレードオフが存在する中で、Go言語で実装された機能の大半は「長期的な目線におけるメンテナンス性の高さ」を重視して採用されたものであると述べている

ちなみにmapやfilterのような機能は言語の表現力を高めるものであり、 書いていて楽しい言語 に繋がるわけだが、これはトレードオフにおける後者を犠牲にするだけでなく、(極めて素晴らしい方法で実装しない限り)コンピューターリソースを非常に消費するものでもあると述べている

Go言語のシンプルさの極意

作者は前半で「Go言語が成功したのは、Go言語がシンプルだからだ!」と言っているが、中盤でそれを撤回し「Go言語はシンプルではない、シンプルに感じるだけだ」と述べている
Go言語の実態はシンプルではなく、いくつもの要素が複雑に絡み合うが利用者はシンプルに感じるようにデザインされていると述べている
その例として以下が挙げられている

  • garbage collection
  • goroutines
  • constants
  • interfaces
  • packages

それぞれの具体的な内容に関しては割愛させて頂くが、興味のある方は是非動画をご覧になってほしい

補足

今回翻訳内容には入れなかったが、作者は「シンプルさは多面的である」事に関する説明も行っており、興味のある方は是非動画を見ていただきたい(決して難しすぎて翻訳出来なかったわけではない😉)

所感

最近バズっていた批判記事の中で批判の対象となっていたmap/filter等が無いことに関しても言及されており、Go言語は根本的な所で他言語と差別化を図っている事が分かるなぁと感じた
同時に好意的な記事の方で褒められていた「シンプルさ」に関しては言わずもがなであり、設計思想の根底に存在していることが分かる

個人的にGo言語のシンプルさは時に煩わしさも感じつつ、複数人開発や長期的な目線での運用/開発が必要なプロジェクトにおいては非常に有効的だと感じている。その要因がシンプルさであり、言語をデザインする時に最優先で考えられているということが動画で分かり面白かった

広告

記事中に出てきたGo言語を使用し、プロダクト開発を行っている株式会社shizaiではエンジニアを募集しております!

興味がある方も無い方も、是非一度御覧ください

Discussion