AIにコーディングはまだ任せられない 人間プログラマーが優位な理由
引用元:https://news.ycombinator.com/item?id=44127739
これ、俺の経験と一緒だわ。LLMアシスタントの一番の価値って、ちょっと賢いラバーダックと話せることだと思うんだよね。たまには意見が合わなかったり、改善案を出したりもするけどさ。
みんながすぐ飛び越えたがる大きな疑問は、これって2年後も同じなの?ってことだよね。正直、俺にはわかんねーわ。
LLMは俺のラバーダックじゃねーよ、あいつらは俺の「間違った答え」だ。
ネットで答えを知りたい一番の方法は、わざと間違った答えを書き込むことだって言うじゃん?LLMはまさにそれ。
単純だけどめんどくさい作業を頼むと、見事に間違えやがる。そしたらムカついて、自分でやる怒りのエネルギーが湧いてくるんだよ。
あいつら、自信満々に断言してくるけど、その能力とは完全に不釣り合いだよな。
LLMと話してて、道を誤ってる人をたくさん見てきた。
LLMは10年後もこんな感じだと思うわ。
でも、誰かこれより良い何か新しいものを作る可能性はあるかもな。ただ、今のAIをプログラミングを「解決」するようなものに勝手に推測するのは全く理由がないね。その新しいものが持つ制約は、今のものとは全然関係ないだろうし。
根拠もなくそう断言するのは説得力ないよ。
数年前は言語モデルなんてコーディングには全く使えなかったのに、今は完璧じゃなくても結構色々できるようになったのを覚えてる?あれこそ進歩で、推測する理由になるじゃん。
もちろん、「プログラミングを解決する」って言葉に何か特別な意味を持たせてるなら別だけど。
みんながずーっと繰り返してる同じ議論をなんでまた言うわけ?
LLMは、誰かが前に書いたコードしか出してこられない。これは本質的な限界。これである程度のことはできるけど、OpenAIがドイツのGDPを使ってLLMを学習させたところで、できることの範囲は変わらないね。
LLMって、2005年頃のGoogleみたいな、そこそこ使える検索エンジンだよ。
あれから20年も経つから、検索エンジンって広告まみれのSEOゴミじゃなくて、実際役に立つものだったってことをみんな忘れちゃっただけだと思う。
問題は、対話インターフェースになったせいで、なんか知らんけど検索エンジン使う時に自然と持ってた懐疑心がオフになっちゃうことだな。
俺もそう思う。コーディング教えてると、LLMは学生をめっちゃ混乱させてるのに気づくんだ。
LLMが的外れなこと言ってるのに、それに気づかずにそのまま受け入れちゃうんだよね。
「LLMは誰かが前に書いたコードしか出してこられない」って前提、それは間違ってる。
それは「”ABA”、”ABB”っていうデータセットで学習した言語モデルは、”B”って入力を与えられたら”BAB”とか”BAA”とか生成できない」って主張と根本的に同じレベルだよ。
俺に言わせれば、LLMとの会話で迷わされるんじゃなくて、自分のプロンプトをモデルが通した結果を、何らかの真実として受け入れちゃうことで迷わされてるんだと思うんだ。
マトモな人と話す時は、言葉以外のたくさんの文脈があるから、こっちが全て言わなくても意図を汲んでくれる直感があるじゃん。LLMは相手を理解する能力がないのに、まるでそれができてるかのように振る舞うんだよな。
彼らはそんな主張してないよ。LLMは誰かが書いたテキストしか生成しないって言ってるだけ。
反論するなら、AIが作ったプログラムを見せればいい。
君の主張(サポートされてないトークンは出ない)は違う。最小限のサポートでCは出る。AI研究ではよくある。
強化学習みたいにサポートは学習に組み込める。
追記:低評価されたから補足だよ。報酬モデルで学習させると、学習データにCがなくても「AAC」は報酬を得て出力できるようになる。Cは出てくるんだよ。
今のところ、AIはめちゃくちゃ優秀なオートコンプリートだと思うわ。
トークンのサポートだけじゃなくて、CとかDとかEとか新しいところに到達するには特定の概念を理解してる必要があると思うんだ。
でもLLMって物事を理解してるんじゃなくて、統計的に次に何が来そうかを予測する統計モデルなんだよね。
それは常に既存のデータに基づいている。
新しいものを生み出せるのは、古いものを新しい方法で組み合わせるだけ。
根本的に新しいものを概念的に「考える」ことはできない。だって、本当に「思考」してるわけじゃないんだから。
「思考」しないから概念的に新しいものを考えられないって?
階層的最適化は「思考」の定義だよ。言葉の使い方で混乱してるね。
「古いものを組み合わせるだけ」は間違い。報酬モデルだけで学習すれば、何も示されずに新しいものを生成する。
何も知らないのに生成できるってことは、新しいものが作れないって主張は違う。
概念理解がないって? Circuits研究見て。モデルの重みに概念対応空間はある。
概念は圧縮の一種。アイテム数よりパラメータ少ないデータセット見ればわかる。
LLMは2005年頃のGoogleみたいな検索エンジン?
知らない学習データからの統計生成と、ウェブ検索は違うよ。
会話UIが検索時の懐疑心をオフにする?
統計テキスト生成アルゴリズムを検索エンジンみたいに使うのに懐疑的なのは、それが検索エンジンじゃないから。
うん、新しいものは生成できるのはわかったよ。でも、それが使えるようになるには、人間がキュレーションした報酬モデルに依存してるんだよね。
だから、結局人間の思考に頼ってる。LLM自身の「思考」だけじゃ不十分なんだ。
人間の報酬モデルが不要になる時点なんて来ないだろうね。
LLMは人間がやってた思考のほとんどを自動化してくれるから、人間にとって色々なことを楽にしてくれるだろうけど、最終的には人間が引き継がなきゃいけない限界にぶつかると思う。
すごいのが、いくら進化したモデルでも、トークンのシーケンスを予測するように設計されたモデルが、ただの「めちゃくちゃ優秀なオートコンプリート」以上のものだと人々が思ってることだね。
それがどこまでできるかってのは印象的で非常に直感的じゃないけど、そのラベルは間違ってない。
それが根本的な正体なんだから、それに合わせた使い方すれば効果的になる。
チェスみたいなもんだね。
今は人間の方が上だけど、永遠じゃない。
でも、人間とソフトウェアを組み合わせた方が、しばらくの間はどちらか単体よりずっと優れてるよ。
合理的な人はわからない、知らない、不確かだと教えてくれる。
LLMはそれが全然ない。
すごく嬉しそうに、すごく自信満々に、完全にでたらめなことをまくし立ててくる。
答えが合ってるかは、essentially(要するに)くじ引きだよ。
LLMって、テレビのルーレット番組にちょっと似てるよね。
LLMって指示通り動くだけで、適当なインプットだと適当なアウトプットになるんだよね。でも、ちゃんと準備して問題が明確なら結構使えるよ。なんか適当なコーディングアプローチとか見ると、LLMについて変な印象持たれそうで嫌だわ。
まずさ、コード書くときってどれくらいマジで新しいことやってる?それと、あなたの言ってること、文字通りなら違うよ。自分で新しいプログラミング言語作って、定義をプロンプトで教えたら、その言語でコード書かせられるし、うまくいくかもよ。
正直言うとさ、プログラミング始めたての頃って「まあ信じてやってみな」って感じで、呪文みたいにコード覚える段階あるじゃん。Pythonで文字出すやり方とか、文字とか関数とか習う前にやるじゃん。最初はとりあえず受け入れるしかないんだよ。その頃のことマジで忘れちゃうんだよね。変数とか当たり前になると、まだ分かってない人の気持ちになれないの辛い。
最近マジでGoogleほとんど使ってないんだよね。検索する時って基本的に答え知りたいじゃん。今はLLMに聞けば余計な情報なしに答えがすぐ出るし、もっと知りたければLLMにウェブページ教えてって言えばいいんだもん。LLMが進化したら、Googleにはもう戻れないと思うわ。
あいつらさ、プルリク却下されたり、やり直し言われたりしても、怒ったり恨んだりしないから楽だよね。
ちっちゃいLLMとループがあればチューリング完全になること、簡単に証明できるじゃん。だから「トークン予測してるだけ」ってのがLLMの能力を制限するって考え、マジでおかしいって。チューリング完全なら他のシステム何でもシミュレートできるんだし。LLMの限界は学習データと計算力だけだよ。「ただ」トークン予測してるだけって言うのが計算能力と関係あるみたいな主張、完全に間違ってるって。
俺、ADHDかも。関数名決めたりdocstring書くのにマジで何分もかかるんだよね。LLM、コード間違っててもマジ助かる。変数名とかdocstringとか、必要な時まで直さないし。LLMって空白のページ問題を確実に解決してくれるわ。
つまりさ、Cっぽいのはできても、DとかEとか進むにつれて精度落ちるってこと?人間が作った報酬モデルがそこまで追いついてないから?C向けに新しい報酬モデル作らないと、Dの精度は上がらない、みたいな話?
要件変えても同じことグルグル言うんだよね。毎回、ダメだった理由全部言わないと先に進まない。人間もたまにそうだけど、LLMはマジでイライラする。よくある会話:「XをYでどうやる?」「Zがいいよ!」「いや、Zはエラーだよ」「ごめんね、Wにしよ!」「Wは会社のルールでダメ」「Wダメなんですね、Zどお?」「さっきZダメって言ったじゃん!」「じゃあW!」「Wもダメっつーの!」「じゃあZ使って…」
「LLMって誰かが書いたコードしか出せない。これは限界。」←これ、間違いだって簡単に証明できるよ。存在しないプログラミング言語作って、その意味をLLMに教えて、その言語でコード書かせる。必ずしも成功しないけど、マジで前例のないコード書けるって証明になるから十分。俺GPT3.5でRubyとINTERCAL混ぜた変な言語で試したけど普通にできたし。存在しない言語の文法教えて正しいテキスト作らせるのも結構うまくいく。「LLMは前例しか出さない」って考え、数年前ならわかるけど、今どきそれはねーわ。
>もしかしたら数年前はコードに全然使えなかったLLMも今は結構できるけど完璧じゃない、って覚えてる?俺的には、今もまだ役に立たないと思うな。唯一の進歩は、役に立つフリがもっと convincing になったってことだけだよ。それを大した進歩とは言わないな。
もっとコメントを表示(1)
これらのコメントは現実逃避だね。「人間が必要」、「LLMsはデバッグが下手」って言うけど、俺は数年 LLMs を使って huge strides を見てきたんだ。今後はそこまでじゃないだろうけど、改善は続くはず。最近r/fpgaで FPGA/HDL の testbenches を LLMs で早く作れたって言ったら、試してもないのに馬鹿にされたよ。
この態度、多くの専門職でよく見るよ。今 /r/law から来たんだけど、 Dario Amodei の法律業務コメントが即否定されて驚いたんだ。これは対処法か自己満足か知らないけど、これから来る経済的・社会的な激変への備えとしてはかなり悪い兆候だね。
これは新しい技術へのいつもの反応だね。みんな未来を受け入れたくないだけなんだ。 ChatGPT 以降の LLMs の INCREDIBLE LEAP FORWARD が見えない技術者は、頭を砂に埋めてるだけだよ。 LLMs はまだ完璧じゃないけど、進化は止まらない。俺たちは今その瞬間にいて、この技術が新しい世界に向かう中で、自分の居場所を理解するために、すぐに適応する必要がある。
まあ実際のところ、もし君が自分の代わりを書かないなら、競合がやって君の雇い主を価格で打ち負かすだろうね。どっちにしろ仕事はなくなる。新しいツールに適応して使いこなす方が、取り残されるより賢明なんじゃない?仕事のない織物工になりたい?それとも織物工よりずっと給料がいい機械織機を作るエンジニアになりたい?
LLMs はしばらく進歩したけど、最近はあまり良くなく、モデルによっては悪くなった気もする。テストコードは良いけど、新機能開発で使いすぎると酷い。新規や単純機能は得意だけど、大きな古いコード変更には向かないみたい。 Claude と ChatGPT は D3 の APIs を何度も hallucinate してたしね。
ChatGPT-4o って VHDL を書くのが恐ろしいほど上手いんだ。実際、今日低レベルコントローラーをプロトタイプするのに使ってるよ!
ああ、「現状維持を乱すな」って議論ね。見てよ、俺たち皆自分の代わりになるものを作ってるんだ。新しいバージョンや製品、知識は常に古いものを時代遅れにするだろ。自分の代わりを作るのは賢いし、その代わりを掌握して運用する方がもっと賢いんだよ。
ちょっとした Friendly reminder だけどさ、君たちみたいな人って metaverse とか VR とか web3 とか crypto とかについても、全く同じこと言ってたよね。
談合みたいなのは下からは無理だよ.AIみたいな変化が来たら,すぐ方向転換するのが個人ができることの一つかな.他の手もあるし,変わらないのもそうだけど,いい結果になるのはやっぱ動くこと.ついていかないと状況は悪くなる一方だと思うよ.
これ低評価しないでほしいな,マジで大事な問題提起だから.AIコードアシスタント嫌い,使えないんじゃなくて使えるから.もう終わりだよ.自分で自分の代わり作んなきゃ,他の誰かの変なコードに取って代わられるだけ.労組もないし.だからVibe Coderになって働くか,お前の言う賢明なやり方でクビになるか,だね.
自分の代わりを作るのが賢明?
状況によるね.社会や経済の目標はお前に安定した仕事を与えることじゃないって覚えとけよ.むしろ早く奪うインセンティブがあるんだ.エンジニアはこの技術を喜ぶ前に,工場閉鎖で失業した労働者みたいになるって気づくべき.お前ら特別じゃないし,社会も優しくない.「代替の責任者になるのが賢明」ってのは,ボスが知らない場合だけだろうね.
どんなことできるの?
LLMが何でもできるって想像できないな.簡単なことはたくさんできる気がするけど,全部は無理なら結局熟練エンジニアが必要でしょ.その人なら簡単なことなんて一週間で終わらせるだろうし.
組合作るときはそうなんだけど,なんかソフト開発者ってそういう考えに抵抗あるんだよね.
既存システムでは,訓練データに多いD3のAPIを幻覚するのを防ぐため,すぐドキュメントをコンテキストに入れられるよ.自動化もすぐできそう.エンジンを地面で動かしても進まない.Fordは馬に勝てないって言ってるのと同じだな.
どんなことできるの?
SPIデシリアライザとか,SDC制約ファイルとか,テストベンチとか,makefileとか書いてくれたよ.ゼロからこれやるのは15年やってても大変だけど,ChatGPT-4oが15分で.これ大好き.細かいことじゃなく,大きな問題に集中できる.LLMが仕事早めないなんて,自分騙してるか能力知らんだけだ.疑いや皮肉の理由は,エンジニアのアイデンティティ危機か,問題を説明できるならエンジニア不要って疑いじゃないかな.15年EEやってるけど,今までファームウェア担当者に具体的に伝えてコード書いてもらってたのが,このスキルをプロンプトにしてLLMでできる.中間業者いらず.マジでいいよ.自分の能力超えるプロジェクトもできたし,新しいこと学べた.ChatGPT最高!
個人的にはしばらく使ってみたけど,結局やめた.だってやっぱ使えないんだもん.最初は良さそうでも,手直しだらけでコスパ悪い.”vibe coding”ってのは,ツールが出したのを自分で書くよりずっと直し続けるってことじゃない?
LLMにコンテキスト与えると精度上がるけど,それは万能マシンって約束と違うよね.何でもしてくれるはずなのに,適切なコンテキストをこっちが知って与えなきゃならんのなら,万能じゃない.つまり,便利なツールなだけで,期待したり心配したようなヤバい変革者じゃないってことだ.
他のソフト開発者のスキルが信頼できるなら,AIアシスタントにもっと賛成するんだけどね.でも昔から信頼できないし,今はもっとひどい.だから,クビにしにくくするとか言う前に,そういうダメな奴らを排除するのが大事だと思うよ.
俺も”今は”そう思うけど、すぐ激変するポイントが来るよ。業界は超速で変わる。今から準備して波に乗るか、別の道行くか。受け入れたくないけど、 inevitable だと思うわ。
関係ないかもだけど、これって Pareto Principle(初めて聞いたわ)のこと? 80%の効果が20%の投入から生まれるってやつ? それか diminishing returns? 最初は凄かったけど、次々期待外れになってく感じ?
bigcorp のマネージャーの機嫌取って、彼が何かするために tech を hype するって? オープンソースプロジェクトは無駄な LLM shackle なんて使ってないし。
”安定した良い仕事を提供するのが社会や経済の目的じゃない。むしろ速攻で奪いにかかるインセンティブがある。”
っての同意。まさに俺が言いたいことだわ。現状維持なんて futile な道。いずれ変わる。 ready でいろ。仕事でも人生でも最高の advice は alternatives を常に持っておけってこと。なければ literally 選択肢なし。
engineer vs management の問題なのに、それを engineer vs engineer の問題にして、 boss の仕事を手伝ってんじゃん。
”問題を precisely に articulating すること”こそ software engineer の仕事の大部分で、他の奴がそれが苦手って証拠は山ほどあるだろ。
同意して optimistic でいたいけど、多くの tech が期待裏切ってきたから optimism 残ってないわ。 speech-to-text ( DragonSpeak, 1997年)もそうだった。27年後も latest Siri は mistake だらけ。 blockchain, Web3, IoT もね。こういう cycles を経験したから分かるけど、 AI gimmick は cool だけど、 probably local maximum だね。 reliability はこっからあんま上がらないし( hallucinations とか)、 run costs は high のまま。最終的に AI companies が loss 運転やめて cost を charge し始めたら終わり。
Pareto は diminishing returns のことだよ。
scaling hypothesis ( data と compute 増やすと gains )は plateau してる。 text data は全部使われ、 compute は diminishing returns に達してる(理由分からんけど)。
だから今見てるのは incremental な core model 進化、 pre/post training での variations や tuning、そして ton of applications ( agents )。
これは good と思う。でも exponential growth に基づく delusional valuations には good じゃないね。
こういうのの value っていつも far fetch で、 useful になるには critical mass が adopt しなきゃだった。でも LLMs の value は immediate で、世界の他の変化とか require しない。もし君がそれ使って amplified されるなら、 simply better off ってこと。
AIコード生成を使うプロンプトエンジニアを低賃金・低スキルの機械オペレーターに例えるのは違うんじゃない?本当の”エンジニア”はモデル作った人たちでしょ。でも近い将来、それすら人間いらなくなるかもって思ってるんだ。
マジで腕のいいプログラマーはAIよりすごいね。並はそうでもないかも。昔日本の会社にいた天才エンジニアは、難しい問題を解決しまくってたし、彼の書くアセンブリはコンパイラより何桁も速かったんだ。人間にはそういう凄いやつがいるんだよ。
+1000。”人間のプログラマーはまだLLMより優れてる”ってのは強気な意見だけど、”AntirezはまだLLMより優れてる”ってのは当たり前だよね ;-)
もっとコメントを表示(2)
みんなLLMがプログラマーを置き換えるって話で忘れがちだけど、ソフトウェアエンジニアリングってコード書くことだけじゃないんだよ。ぶっちゃけコード書きは仕事の小さい部分かも。大事なのは社会性、要求分析、お客さんが何を本当に欲しいか見つけ出すこと。人間エンジニアですらお客さんの要望把握に苦労するのに、LLMに期待できるわけないじゃん?
それって2000年代のオフショアブームの時の課題と似てるよね。オフショアチームは権限も知識もなくて、ただひたすら言われた通りに作り続けた。AIとすごく似てると思わない?たぶん同じ結果になるんじゃないかな。
AIとの違いはね、AIがヤバい動きしても、AI自体を改良したり、上に追加でAI積んで直せるってことなんだよ.例えば、先に進む前にもっと要件要るか判断するsupervisor AIとか、自動で修正させるcode review AIとか作ればいいじゃん.
問題は、自律的に決定を下すってのがどう動くかだよな.LLMがどんな文章でも完成させられるのはみんな分かってるけどさ、赤いボタン押せるのか?って話.
そりゃ赤いボタンなんて押せるよ.ちょー簡単、MCP使えばね.システムを勝手に決められるようにセットアップするのは技術的には楽勝.でも、”正しい”決定をさせるように保証する方が、ぶっちゃけめっちゃ難しいタスクだよ.
なるほど、つまり どれか 赤いボタンは押せるけど、必ずしも 正しい 赤いボタンってわけじゃないってことか.
LLMってさ、ソフトウェアエンジニアリングとか全然やんないし、別にそれでいいんだよ.成功するプログラムに必須じゃないから.非エンジニアでもアプリ作れる時代だよ、グリーンエネルギー現場で見てるし.でも問題は後から.メンテ、スケール、効率化が必要になった時.ここでエンジニアリングがマジで重要になる.Pythonで数百万件処理する時にリストかジェネレーターかで全然違う、みたいなね.
それもそうなんだよなぁ…世の中にあるソフトの vast majorityはさ、ほとんどスケールとか鬼効率とか必要ないんだよね.でもさ、信頼性は要るじゃん.LLMはそれがマジでヘタクソだって証明されてるけどな.
>世の中にあるソフトの vast majorityはほとんどスケールとか鬼効率とか必要ない
俺もしばらくそう思ってたんだけどさ.最近さ、それ考え直さないとダメかもって思い始めたんだよ.だって、スケーリングってゼロからじゃなく、AI生成コードや非エンジニアコードはマイナススタートすらあると分かったから.初心者がググったコードより酷いことも.彼らがPythonとか使わなきゃマシだったのに.中にはBIレポートすら回せないヤバいのもあるんだ.
もしかしたらさ、AIのヤバいhallucinationから守るために、あらゆる自動テストがもっと当たり前になるだけかもね?それってLLMに対するみんなの心配事をかなり解決する気がするんだ.俺が想像する世界だと、ソフトウェア開発者ってのは、要件聞いて、テスト書いて、AIにコード直させて、テスト動くか確かめて、AIがやった変更を人間が理解してるか確認して、次の要件に移る、みたいな人になるんじゃないかな.
そうそう、だから「全開発者消滅」って話は信じないんだ。5年後には書くコードがかなり減るかも?(ほとんどゼロ?)うん、今は1年前より全然タイプしなくなったしね。でもそれって開発プロセスの一部でしかないじゃん。
いやいや。LLMが空けたスペースを埋めるために、スコープが広がるだけだよ。俺たちは絶対引退させてもらえないね。
その通り。しかもさ、LLMができる前よりずっと早くゲームを完成させられるって今日実感できたんだ。だって、今までやったことない機能でも、LLMのおかげで詰まらないって確信できるようになったからね。
LLMはさ、実際のコーディングより要件を引き出す方が得意だと思うな。
要は顧客フィードバックに基づく改善の速さだよね。Chat UIsはいい例。LLMは抽象化や設計、要件分析もできる。でも最終的には反復と迅速な変更対応が重要。モデルは進化し続けてるし、ソフト開発全体が自動化に向かってる。たぶん、AIと融合してない人間が有用なのはあと最大5年くらいかも。ボトルネックにならないには、AIとの深い統合が必要だよ。
要は、ある意味AIが「コーダー」を置き換えてるってことだよ。LLMが得意な作業、例えば「このAPIを作って」みたいな単調な仕事だけやってるコーダーは何百万といる。要件分析とか顧客対応に関わらない、開発プロセスの最下層にいる人たちね。ソフトエンジニアリングは別だけど、単なる脳筋コーダーたちの数を侮っちゃいけないよ。
それって、硬直化したwaterfall development processへの批判に聞こえるな。実際の脳筋作業は置き換えられるべきだと思うけどね。
ソフト開発の主要な側面の一つは社会的なもので、要件分析とか顧客が本当に何を求めてるかを見つけ出すことだよね、顧客自身も分かってないことが多いし。それは組織によるね。最近は多くの場所でproduct ownersとかproduct managersがこれをやってるよ。
人間のエンジニアでさえ顧客の要望を掴むのに苦労して、顧客もそれを明確にするのに苦労するなら、どうやってLLMにそれが期待できるんだ?
たぶん、LLMは何トンもの要件定義ドキュメントとか、膨大な量の顧客サポート会話で学習してるんだろうね。俺はこれをコーディングと同じくらい、いやたぶんそれ以上にうまくやるだろうと思ってるよ。
「より良い」ってのは常にタスク次第だよ。LLMはCSSのシンタックスを正しく書くとか、よく使われるライブラリ(例えばfetch)の呼び出し方を覚えるとか、そういう定型的な作業に関しては俺(とか、たぶんほとんどの開発者)よりずっと得意だよ。こういうちょっとした脇道にそれるタスクに昔はすごい時間取られてたけど、今じゃほとんど一瞬でやってくれるツールがあるのは嬉しいね。