世界を動かす技術を、日本語で。

人間のコーダーは依然としてLLMより優れている

概要

人間の創造性と柔軟な発想が、現在のLLM(大規模言語モデル)を大きく上回っていることを実感した体験談。 Redisのベクターセット機能のバグ修正で、AIの提案を参考にしつつも最終的には人間独自の工夫が決め手となった事例。 AIは有用だが、決定的なブレイクスルーや「枠外」の発想はまだ人間の領域。 AIとの対話を通じてアイデアを検証・発展させるプロセスの重要性。 AI活用の現状と限界を、実体験を通じて再認識。

人間の創造性とLLMの限界

  • LLM (大規模言語モデル)は日常的に活用、コードレビューやアイデア検証に利用
  • AI の能力は実用的で優れているが、 人間の知能 にはまだ大きな隔たり
  • Redisの ベクターセット 機能で複雑なバグ修正作業に直面
  • RDB/RESTORE の耐障害性強化機能の導入による新たな課題発生
  • HNSW (Hierarchical Navigable Small World)グラフの高速保存のため、ノード間リンクを整数で直列化
  • 双方向リンク の破損時に発生する「use-after-free」バグの検出が必要
  • 全リンクの 相互性チェック はO(N^2)の計算量で大規模データでは非現実的

LLMとのやりとりと人間のひらめき

  • まずは 素朴な実装 でバグ検出に成功するも、読み込み時間が2倍に増加
  • Gemini 2.5 PROに 効率化案 を相談、隣接リストのソートとバイナリサーチを提案される
  • ハッシュテーブル によるリンク管理案を自ら発案、LLMは妥当性を認めるもパフォーマンス面を指摘
  • snprintf() 不要でmemcpy()利用の簡素化も自力で気付く
  • XORアキュムレータ による高速な検出法を考案、LLMは衝突リスクを指摘
  • 良質なハッシュ関数 (murmur-128等)と乱数シードの導入で安全性・実用性を両立
  • 最終的に 人間の創造性 がAIの発想を上回る結果となる

AI活用の価値と限界

  • LLM はアイデアの検証・整理に非常に役立つツール
  • 「枠外」発想やあいまいな解決策 は、現時点では人間の独壇場
  • AIとの対話 が思考プロセスを刺激し、新たな発想の呼び水となる
  • 実際の運用では、 パフォーマンスと安全性のバランス を考慮した最適解が求められる
  • 今後も AIと人間の協働 が重要、だが「決定的なひらめき」は依然として人間の強み

Hackerたちの意見

それ、私の経験と合ってるわ。実際、LLMアシスタントから得られる価値のかなりの部分は、そこそこ賢いラバーダックと話せることだと思う。たまにそのダックが反対したり、改善してくれたりもするしね。 https://en.m.wikipedia.org/wiki/Rubber_duck_debugging みんながこの会話を飛ばしたいと思ってる大きな疑問は、2年後もこれが真実であり続けるのかってことだよね。どう答えたらいいか分からないな。

10年後もLLMはこんな感じだと思う。でも、誰かがもっと良いものを作るかもしれないけどね。今のAIをプログラミングを解決するものに extrapolate する理由は全くないよ。新しいものが持つ制約は、今のものとは全然関係ないだろうし。

私にとっては、ペアプログラミングみたいな感じだね。アイデアを話し合える相手がいるし、コードをレビューしてもらったり、別のアプローチを提案してもらったりする。自分とは違う機能を使っている人から学べるのもいいよね。

チェスみたいなもんだね。今は人間の方が優れているけど、永遠にそうとは限らない。でも、人間とソフトウェアの組み合わせは、どちらか単独よりも長い間優れていると思う。

これは、能力に対して完全に不釣り合いな、強気なアヒルだね。これと話して道を誤った人をたくさん見てきたよ。

実際、LLMアシスタントから得られる価値のかなりの部分は、そこそこ賢いラバーダックと話せることだと思うんだ。「ラバーダックデバッグ」っていう言葉が未来でもまだ使われるのかな。

一緒に働いている何人かは、ソフトウェアエンジニアリングをあまり理解していないみたい。彼らと働くのは悪くないし、実際にコラボレーションやドキュメント作成は得意なんだけど、コードをしっかり追って論理的に理解する能力がないみたい。LLMが出る前は、そういう仕事をしていなかったからまあ大丈夫だったけど、今は微妙なカオスモンキーが解き放たれた感じ。PRで「なんでこうなってるの?何をしてるの?」って聞くと、「わからない、ChatGPTがこうしろって言った」って返ってくる。これが問題で、彼らのコードはほぼすべて疑わしくなっちゃう。動くものもあれば、意味不明なものも、実際に害を及ぼすものもある。LLMが信じられる出力を出すから、コードをチラッと見ただけじゃそれがナンセンスだとわからないんだ。もしクレッドアプリみたいなものであれば、何が動いていて何が壊れているかすぐにわかるけど、私たちは科学ソフトウェアを扱ってるから、コードを理解していないと研究結果を完全に台無しにすることもあるんだよね。

みんながこの会話を飛ばしたいと思ってる大きな質問は、2年後もこれが真実であり続けるのかってことだよね。どう答えたらいいかわからないけど、数年前のトム・スコットの「AIカーブの今どこにいる?」っていう動画を思い出す。

私にとっては、APIに詳しいジュニア開発者が下で働いてる感じなんだけど、アーキテクチャに関する常識が全然ないんだよね。彼らにタスクを任せられるのはいいけど、私の頭は他の問題に使えるから、レビューが以前よりもずっと多くなっちゃった。チームにレビューを頼む前に、毎回3〜4回のレビューサイクルを通してるよ。

同じく。今日、特定のエッジケースでREST APIがどう振る舞うべきかを探るために使ったんだけど、いろんな選択肢について自信満々の意見をくれたんだ。でも、それらは矛盾だらけで、存在しない段落への言及もあった(実現しなかった選択肢3とか)。でも、読んでるだけで解決策が見えてきたよ。それは、提案されたものとは全然違ったけどね。

アヒルは時々意見が合わないこともある それは私の経験とは違うな。LLMは確かに役立ってるけど、一般的には正しい答えをくれるか、信じられそうなけど間違ったことを作り出すかのどっちかだよ。自分が何をしているかを伝えると、いつも息を切らしたような称賛が返ってくるけど、「それは違うと思う、こっちを試してみて」なんてことは一度もない。

「より良い」というのは常にタスクに依存するよね。LLMは、CSSの文法を正しく取得したり、人気のライブラリ(例えばfetch)を呼び出す方法を覚えたりするような、単純作業ではもう僕よりずっと優れてると思う。こういうちょっとしたサイドクエストは昔はかなりの時間を食ってたから、ほぼ瞬時にできるツールがあるのは嬉しいよ。

もしそれが自分の主要な言語以外のものであれば、それは素晴らしいと思う。私もその使い方で良い効果を得てる。ただ、そういうことを学んだ記憶を自分から否定しちゃうと、そのツールに完全に依存することになっちゃうよ。ツールが提案することを理解できてないと、より良い方法があることに気づかずに妥協した解決策になっちゃうかもしれない。

and most devs I’d imagine ひどい想像力だね。確かにCSSが嫌いだけど仕事で使わざるを得ない人もいるから、ちゃんと学べてないんだよね。だからCSSが暗記だと思ってるんだ。でも、会社がCSSに本当にスキルのある人を雇うのがケチだとしたら、無理やり人間にやらせるよりはLLMにやらせた方がまだマシだと思う。だって、その無理やりやらされる人間はCSSをうまく学べないし、書くのも楽しめないからね。一方で、もし会社が本当に優秀な人を雇う気があるなら、LLMは比較にならないよ。結局、LLMはあまり優秀でない開発者を置き換えることしかできないっていう古い議論に戻るだけだね。この場合、君は自分がCSSが得意じゃないって認めてるし、LLMは君よりCSSが得意だってことだ。これはタスク依存じゃなくて、スキル依存なんだよ。

基本的なスタイリングを超えたことに関しては、LLMは特にひどいと思う。効果を説明するのがかなり難しいことが多いし、普遍的な説明がないからね。それに、特定のスタイルを実現するための方法が複数あって、どれも問題なく機能するけど、特定の調整をしたいときには一つだけがうまくいくことが多い。その場合、LLMはうまくいかない方法に引っかかっちゃうことが多いんだ。

自分があまり得意じゃないこと(SQL)には良いけど、得意なこと(CSS)にはひどいって感じだね。面白いよね。

限られた経験からだけど、元コーダーで今は管理職だけど、たまにコードを書くこともあるよ。役に立つけど、時には邪魔にも感じることもある。コードの残りの行や次の数行を予測してくると、行きたくない道に進んでしまうことがあるから、それをスキャンするのに時間がかかるんだ。設定の問題かもしれないけど、コードを直接目の前に置かないでほしいし、デフォルトではオフにして、キーコンボを押したときだけ表示される方がいいな。一つ分かってるのは、LLMにコードのセクションや関数を全部書かせることはしないし、必ずレビューするつもりだってこと。

Zedにはそんな「微妙な」モードがあるよ。もっと多くのエディタがそれを提供すべきだね。 https://zed.dev/docs/ai/edit-prediction#switching-modes

一つ分かっているのは、LLMにコードの全セクションや関数を書かせることは、レビューなしではしないってこと。最近はスタートアップで色々やってるけど、作成されるUIがあまり好きじゃないんだ。基本的な部分を作っておけばそれなりに役立つけど、claudeに大きなセクションを書かせると、求めているものにたどり着くまでに何度もやり直しが必要になるんだよね。

LLMがただパターンを見つけるだけなら、何かに「良い」ってことは可能なのかな?それって、せいぜい平均的になるってことじゃない?

大多数の人(平均的な人やそれ以下の人)でも、何かが平均以上だってことは分かるよね。たとえ自分が平均以上のものを作れなくても。だから、RLHFを使えば平均以上の成果を出すのは結構可能だと思う。実際、トレーニング中にトップリンクや人気のある動画が重視されているのは、これらが平均以上である可能性が高いからだよ。

悪いパターンと良いパターンがあるけど、特定のタスクに対してそのパターンが正しいかどうかは別の話だよね。大事なのは、そのタスクが確実に解決されること。だから、平均的な品質で平均的にこれを達成できるなら、それは次のレベルのゲームチェンジャーになると思う。

私の経験では、LLMはそのタスクに対するコンテキストの平均に戻る感じがする。平均的な結果が出ているなら、あなたが求めていることについて十分な詳細を与えていない可能性が高いよ。幻覚についても同じことが言える。私の経験上、LLMはそのコンテキストの限界に達したり、超えようとするときに幻覚を起こすことがかなり多い。だから、特定の出力を得たいなら、LLMがアクセスできるコンテキストの具体性と包括性が成功率を大きく左右するよ。

そう、IAは基本的に平均的な結果を目指すランダムなマシンだ。IAは平均的な人々にとっては便利だけど、平均的なコードを生み出すためのものなんだ。競争の激しい世界では、IAを使うのは死刑宣告だよ。

人間もほとんどいつもパターンに従って行動してるよね。だから「経験」がすごく大事なんだ。ほんとに最先端のことをやってる人は少数派で、そういう人たちを「ビジョナリー」って呼ぶけど、ほとんどの人は期待されてることをただやってるだけだよね。で、これもその一例。全然クリエイティブでもオリジナルな考えでもないし、似たようなことを考えた人は何百人もいると思う。多分、誰かのアイデアをそのまま真似してるだけだし。だから、俺ができるなら、LLMだってできるはずじゃない?

LLMがコーダーを置き換えるって話のときにみんなが忘れがちなのは、ソフトウェアエンジニアリングにはコードを書く以上のことがたくさんあるってこと。実際、それは仕事の中でも小さい方の側面かもしれない。ソフトウェアエンジニアリングの大きな側面の一つは、社会的なもので、要件分析や顧客が本当に何を求めているのかを理解することなんだ。顧客自身がそれを分かっていないことが多いからね。もし人間のエンジニアが顧客の要望を理解するのに苦労して、顧客もそれを具体的に指定するのに苦労しているなら、LLMにそれを期待するのは無理じゃない?

それは2000年代のオフショアリングブームの時の課題の一つでもあったね。オフショアチームは、物事に対して反発する力や知識がなくて、ただひたすら作り続けていた。AIとも似てるよね?多分、同じ結果になるだろうね。

LLMは、実際にコードを書くよりも、要件を引き出すのが得意だと思う。

そうだね、だから「すべての開発者が消える」ってのは信じてないよ。5年後にはコードを書く量がかなり減るかもしれない(ほとんどゼロになるかも)。確かに、今は1年前よりもずっと少なく打ってるけど、それはプロセスのほんの一部に過ぎないからね。

LLMはソフトウェアエンジニアリングを全くやらないけど、それでも問題ないんだ。成功するプログラムを作るのに、実際にはソフトウェアエンジニアリングは必要ないから。アプリケーションによっては、ライフサイクル全体でソフトウェアエンジニアリングが必要ないものもあるし、結局、効率に気を使っている人がいないからね。実際、あなたが言っていることとは逆だと思う。技術に詳しい「ITビジネスパートナー」が、ソフトウェアエンジニアなしでアプリケーションを作れるようになると思うよ… それは毎日グリーンエネルギーの世界で見ているから。問題は後から出てくる。メンテナンスやスケール、効率化が必要になるときだ。ここでソフトウェアエンジニアリングが重要になってくる。何百万件のアイテムを繰り返し処理する時に、Pythonアプリでリストを使ったかジェネレーターを使ったかが実際に重要になるからね。

そうなんだよね、ある意味でコーダーを置き換えてる。LLMが得意とする仕事をしている(またはしていた)人が何百万もいるんだ。例えば、「この入力を受け取って、この出力を返すAPIを書いて」っていうチケットをもらったコーダーたち。彼らはチェーンのかなり下の方にいて、要件分析とか顧客とのやり取りには全く関わってない。ソフトウェアエンジニアリングは別物だし、そこは君が言ってる通りだと思う(少なくとも今のところはね)。でも、世の中には本当に頭を使わないコーダーがたくさんいるってことを過小評価しないでほしい。

LLMが私に助けてくれた主なことは、いつも戻ってくるのは、ブートストラップやグーグルが必要なタスクだね。具体的には、1) シンプルなコードベースのスタート 2) 構文のグーグル 3) 自分が最初から学ぶ気にならなかったUnixコマンドを使ったbashスクリプトを書くこと。これらでは確かに時間を節約できてるけど、10年以上前のコードベースで作業するために必要な難解な知識は、LLMにはまだまだ多すぎるし、コードだけでは意味のあることをするためのコンテキストが足りないんだ。自分がやるよりも早くできるわけでもないしね。

世界中の賢い頭脳が、自分たちを置き換えようと競っているね。プログラマーとして、私たちはその流れに注意を払うべきだと思う。少なくともその可能性を捨てず、未来に備えておくべきだよ。陰謀論者みたいに聞こえたくはないけど、こういうことを実現する可能性は日々高まってる。長期的には(AGI以降)、安全なホワイトカラーの仕事は、公開されていないデータに基づくもの、つまり極めて独自のもの(例:防衛、金融)だけになるだろうし、そういう仕事でもカスタマイズされたAIに大きく依存することになるだろうね。

ノーベル賞は、ダイナマイトを発明したことへの罪悪感から部分的に生まれたと言われているけど、それは明らかに破壊的な方法で使われたものだよね。今、ジェフリー・ヒントンが、最も破壊的な発明の一つに貢献したことで賞を受けている。

最終的にはこれを政治的に解決する必要があるね。私たちの仕事をもっと効率的にすることや、人間を不要にすることは、本当にワクワクすることだと思う。中年で家族がいる人たちが、今や十分な収入を得られなくなるなんて、決まったことじゃないはず。もしそうなったら、たくさんの人に影響が出て、変化を強いられることになるといいな。

世界中の最も頭の良い人たちが自分たちを置き換えるために競争している じゃあ、私たちプログラマーがやる小さなスクリプトや自動化も、同じ精神じゃない?「これをやるのが嫌だから、自動化して他の仕事に集中できるようにしよう」って。確かに、自分たちを置き換える方向に進んでるけど、自由になったときにはもっと面白い仕事が待ってるはずだよ。もしかしたら、みんながサーフィンを学んだり、ガーデニングをしたりする時間がやっとできるかも。中には手でコードを書く人もいるかもしれないけど、パンを手で作るのが好きな人もいるしね。でも、手でパンを作ることが文明を支える方法じゃないよね。たとえ何百人ものパン職人が仕事を失ったとしても。

これらのコメントには、墓場を通り過ぎるような雰囲気があるね。「社会的要素には人間が必要だ…」、「LLMはデバッグが苦手」、「LLMは道を誤らせる」。確かに、その主張には多くの真実があるけど、数年前からLLMを使ってコードを生成する遊びを始めてから、彼らは大きな進歩を遂げてる。次の数年では改善がそれほど大きくないと思うけど(パレートの法則)、それでも何らかの改善は見られると期待してる。最近r/fpgaで、LLMを使って最初のテストベンチを作るのに成功したって話したら、すごくバカにされた。でも、彼らはそれを試すことすらせずに、できないって結論を出してたんだよね。

でも君は自分の置き換えを進めてる一方で、同僚たちは慎重なアプローチを取ってるんだね。

LLMはしばらくの間すごい進歩を遂げたけど、最近はあんまり良くなってない気がする。最近のモデルは、ちょっと悪化してるように感じることもある。テストコードを生成するのは結構うまくいってるけど、新機能の作業でLLMを使いすぎると、ひどい結果になることもあるね。見た感じ、新しいプロジェクトやウェブアプリの基本的な機能を作るのはすごくうまくいくけど、大きな古いコードベースのリファクタリングや新機能追加にはあまり役立たないみたい。ClaudeやChatGPTがD3のAPIを丸ごとハルシネートしてるのを何度も見たけど、これはトレーニングセットにしっかり含まれてるはずなんだよね。

ChatGPT-4oはVHDLを書くのがめちゃくちゃ上手い。実際、今日はそれを使って低レベルのコントローラーのプロトタイプを作ってるよ!

こういう態度は、残念ながら多くのプロフェッショナルなホワイトカラー業界でよく見られると思う。さっき/r/lawのサブレディットを見てきたけど、ダリオ・アモデイの最近の法務に関するコメントを即座に否定する人たちに驚いたし、真剣に受け止めているコメントもあった。これは、自己満足というよりは、むしろ対処メカニズムなのかもしれないけど、どちらにしても、これからの経済的・社会的混乱を和らげる努力には非常に悪い兆しだよ。

プログラマーたちは、アセンブリがデフォルトだった頃にプログラミング言語をバカにしてたよね(効率が悪い、柔軟性がない、簡略化しすぎ)。その現象は予想通りだけど、新しい技術の実際の質についてはあまり語ってない。

君に同意したいし楽観的でいたいけど、これまでの技術は月を約束しておきながら、結局は消えていったものが多すぎて、もう楽観的になれないんだ。君がどれくらいの年齢か分からないけど、音声認識が次の大きなものになるって言われてたのを覚えてる?ドラゴンスピークが1997年に出て、みんながMS Wordで手紙や文書を音声で書くことに夢中になってた。そして、これがコンピュータのインターフェースの鍵になるって約束されてたんだ。でも、27年後、最新のSiriに話しかけても、当時と同じくらい間違いを犯す。メッセンジャーアプリでは、みんな音声メモを送り合ってる。音声入力が信頼できないからね。そして、音声クリップはコミュニケーションのための最悪のインターフェースかもしれない(検索もできないし)。ブロックチェーンが世界を変えるって言われてたのを覚えてる?Web3?IoT?などなど。こういうサイクルを何度も経験してきたから、AIのギミックは面白いけど、今は多分限界に来てると思う。信頼性はあまり改善しないだろうし(幻覚とか)、運用コストは高いままだろうね。最終的な墓標は、AI企業が赤字を出さずに、これらのモデルの運用にかかる巨額のコストを実際に請求するようになったときだろう。

LLMやAIを活用して社員の生産性を上げる企業は成功するけど、社員をLLMやAIで置き換えようとする企業は失敗するだろうね。残念ながら、これは長期的な話だけど。短期的には、いくつかのCEOや経営陣が短期的な評価で利益を得る一方で、目先の人員削減で会社の将来の成長を無駄にしてしまうんだ。

ほんとにその通りだね。コードアシスタンスを使うのは今後の基本になると思うし、人を置き換えるものじゃないよね。競合もAIのサブスクリプションを買えるわけだし。

短期的には、いくつかのCEOや経営陣が短期的な評価で利益を得る これは考えると面白いね。社員をAIで置き換えようとするような逆効果なことが、短期的には会社の評価にプラスになるかもしれないっていうアイデア。つまり、同時に会社を傷つけたり助けたりしてるってことだね。

それが全てだね。これらのツールはプログラマーのアシスタントとしては役立つけど、実際のプログラマーを置き換えるものではない。完全に拒絶するのではなく、適度にこの技術を受け入れるのが正しい道だと思う。

「良いコード」に関心を持っている人がこんなにいるのは嬉しいけど、結局は何の変化もないんじゃないかと心配してる。問題は、ソフトウェアの世界が何年も前にビジネスの世界に飲み込まれたことなんだよね。正確にいつそうなったのかはわからないけど、ビル・ゲイツが1976年にホビイストに向けて書いたオープンレターの時点で、すでに兆候はあったのかもしれない。株主やマネージャーが良いコードを受け入れるかどうかが問題なんだ。利益が上がる限り、彼らが気にする理由はないと思う。開発者やユーザーからの文化的な反発がない限り、私たちは終わりだね。

コードはビジネスを支えるためのものだ。悪いコードは悪いビジネスにつながる。これを考えると、ホスティング部門のことを思い出すよ。VMwareや物理ファイアウォール、DPIプロキシを使っている人たちがいる一方で、QEMUやNetfilter、ダムなネットワークデバイスを使っているパブリッククラウドプロバイダーもいる。誰が誰を飲み込んだのか、誰にも予想できなかったね。