PaPoo
cover
technews
Author
technews
世界の技術ニュースをリアルタイムでキャッチし、日本語でわかりやすく発信。AI・半導体・スタートアップから規制動向まで、グローバルテックシーンの「今」をお届けします。

LLM時代は「地味な言語」が強い? Jacob YoungのGo推しがかなり面白い話

記事のキーポイント

この記事が言っていることをざっくり言うと

Jacob Young氏の記事「Use boring languages with LLMs」は、かなり挑発的ですが、筋の通った主張です。要するに、

LLMやcoding agentを使うなら、派手で自由度の高い言語より、地味でルールが揃った言語を使ったほうがいい

という話です。

ここでいう「boring languages」は、「退屈な言語」ではなく、​**“仕様や流儀が安定していて、毎回ちがうやり方を要求しない言語”** くらいの意味だと思うとわかりやすいです。
記事では特に Go が強く推されています。正直、これはかなり納得感があります。人間のエンジニアでも「毎回やり方が違う」環境はつらいわけで、LLMならなおさら迷いやすい、というのは自然な発想です。

なぜLLMは「一貫した技術」に強いのか

著者の主張の中心は、​consistent architecture(整った一貫性)ほど、LLMの出力が安定するという点です。

LLMは、学習した膨大なコードのパターンから次のトークンを予測します。
つまり、ある技術が

みたいな状態だと、モデルは「何を選べばいいか」を毎回広い候補から当てにいくことになります。
これは人間でもしんどいですが、LLMにとってはもっと厄介です。

記事の言い方を借りるなら、​**“tokensを賭けるギャンブル”みたいなものです。
ちょっと強い表現ですが、言いたいことはわかります。モデルが安定して良いコードを書くには、​
学習データ側にも“揺れの少なさ”が必要**ということです。

JavaScriptとPythonが「つらい」とされる理由

記事では、JavaScriptとPythonがかなり辛口に扱われています。
ただし、これは「悪い言語」という意味ではありません。著者が批判しているのは、​言語そのものより、周辺エコシステムの断片化です。

JavaScriptの場合

JavaScriptは、たしかにフロントエンドからサーバーサイドまで何でもできる便利な世界です。
でもそのぶん、

という状態になりやすいです。

著者は、2024年のState of JSのような状況を引き合いに出し、​人間にとっての「選択肢の多さ」は、モデルにとっては「学習すべき揺れの多さ」​だと見ています。
これはかなり本質的だと思います。

Pythonの場合

Pythonも似ています。
一見シンプルですが、実際には

みたいな分岐がたくさんあります。

このへん、Pythonを触ったことがある人なら「うん、あるある」とうなずくはずです。
個人的には、Pythonは“簡単な顔をして突然めんどくさい顔をする”ところがあると思っています。LLMも同じ穴に落ちるのは当然かもしれません。

じゃあ、なぜGoがそんなに評価されるのか

この記事の本丸はここです。著者はGoを、​この時代のcoding agentに最も向いた言語の一つだと見ています。

しかも面白いのは、「Goが理論上いちばん美しいから」ではなく、​**“制約が多く、選択肢が少ないから扱いやすい”**という理由で評価している点です。
これは人間にとっても、AIにとっても、かなり重要な視点です。

1. Concurrencyがわかりやすい

Goの goroutine は、簡単にいうと 軽量な並行処理の仕組みです。
複数の処理を同時にさばくための道具ですね。

記事では、これが thread や callback や async/await より、LLMにとって扱いやすいとされています。
理由はシンプルで、​Goの並行処理は一貫していて、書き方が迷いにくいからです。

人間も「この非同期処理、何色の関数だっけ?」みたいな話に疲れますが、LLMにその混乱を押しつけないのは大事です。
ここはかなり面白い視点でした。

2. 標準ライブラリが強い

標準ライブラリとは、​言語に最初から付いてくる公式の道具箱のことです。
Goはこの道具箱がかなり充実しています。

記事では、net/http が多くのマイクロサービスで使われていることや、Googleが支援・保守してきた暗号系のパッケージの強さが挙げられています。
要するに、​外部ライブラリにあまり頼らなくても、かなりのことができるわけです。

これはLLMにとって大きいです。
外部パッケージが増えるほど、「どれを入れるべきか」「どの流儀に合わせるか」が増えるので、迷いも増えます。
Goはその迷いをかなり減らしてくれる、という話です。

3. ツールチェーンが強い

ツールチェーンとは、​開発を助ける道具一式のことです。
Goには

image_0001.png

といった、かなり筋のいい道具があります。

ここが僕はかなり重要だと思いました。
LLMは“それっぽいコード”を書けても、最後の品質担保が弱いことがあります。そこで、​ルールを強制してくれるツールがある言語は、AIと相性がいいんですね。

つまり、Goは「AIに自由に書かせる」より、​**“決まった型に沿って書かせる”**方向で強い。
これはいかにもAI時代っぽい発想です。

4. メモリ管理が現実的

メモリ管理は、ざっくりいうと プログラムが使う記憶領域をどう扱うか です。
Rustは安全性が高い一方で、LLMにとっては借用チェック(borrow checker)がかなり厄介。
C/C++はもっと危険で、学習データにバグの例が山ほどある、というのが著者の見立てです。

Goは、​低レベルすぎず高レベルすぎず、ちょうどいい
そのため、LLMがメモリの細部に過剰に振り回されず、実用的なコードを出しやすいというのが主張です。

これはかなり納得です。
AIに「自由に全部やっていいよ」と言うと事故る。
でも「この範囲でやって」と決めると急にうまくなる。
Goは、その“決めすぎず、でも決めている”感じがうまいのだと思います。

5. 失敗しやすいポイントが少ない

記事では、Goには known set of footguns、つまり「よくある事故ポイント」が比較的少ないとされています。
footgunは直訳すると“自分の足を撃つ銃”ですが、要するに自分で自分を困らせる罠です。

Goにも nil ポインタのような落とし穴はあります。
でも、Pythonのように“何でもできるがゆえに何でも壊せる”世界よりは、​危険の種類が限定的だと著者は見ています。

これはLLMにとって非常に大きいです。
モデルは、選択肢が少ないほうが安定します。
つまり、​失敗パターンが少ない言語は、エージェントの成功率を上げやすいという理屈です。

この主張の本質は「Go礼賛」ではない

ここは大事です。
著者は「Goだけが正義」と言っているわけではありません。むしろ、

非ビジュアルなソフトウェアの大半は、Goとこのツール群で十分こなせる

という現実的な話をしています。

つまり、Webアプリ、CLI、バックエンド、agent orchestratorのようなものを作るなら、​**“一番自由な道具”より“最も壊れにくい道具”を選ぶべきではないか**、という提案です。

個人的には、この考え方はかなりAI時代っぽいと思います。
これまでの言語選びは「人間が書きやすいか」が中心でした。
でも今は「AIが事故らずに書けるか」という軸が、普通に重要になってきています。

この記事を読んで感じたこと

率直に言うと、かなり刺さる記事でした。
特に印象的だったのは、​**“柔軟性は人間には嬉しいが、LLMにはノイズになりうる”**という視点です。

これは単なるGoの宣伝ではなく、
「AIがコードを書く世界では、技術選定の基準が少し変わる」という話なんですよね。

もちろん、これでJavaScriptやPythonが不要になるわけではありません。
でも、​agentic codingを本気でやるなら、構造が単純で、流儀が揃っていて、ツールが強い言語の価値は上がる
これはかなりありそうな未来ではないかと思います。

まとめ

この文章のメッセージを一言でまとめるなら、

LLMには“自由な言語”より“退屈で一貫した言語”が向いている

です。

Goがその代表例として挙げられていて、理由も

と、かなり筋が通っています。

AI時代の技術選定って、派手さより予測可能性が効いてくるのかもしれません。
この視点は、今後さらに重要になると思います。


参考: Use boring languages with LLMs

同じ著者の記事