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

ソフトウェア開発の未来はソフトウェア開発者にある

概要

  • 43年間のプログラマー経験 から見た技術サイクルの繰り返し
  • 「プログラマー不要論」 の歴史的変遷とその誤り
  • AIやLLMの現状と限界 についての批判的考察
  • プログラミングの本質的困難さ と人間の役割の重要性
  • 今後もプログラマー需要は続く との予測と雇用への提言

プログラマー不要論の歴史と現実

  • 43年以上のキャリア を通じて、何度も「プログラマー不要論」サイクルの経験
  • WYSIWYGやVisual Basic、Delphi などの登場時も同様の主張
  • Microsoft Officeのウィザードやマクロ、Executable UML、No-Code/Low-Code も同じ流れ
  • LLM(大規模言語モデル) も「プログラマー不要論」の最新例
  • 1970年代・80年代の4GL/5GLやFortran、COBOL、A-0コンパイラ でも同様の議論
  • COLOSSUSの再配線時代から続く技術進化 と「真のプログラマー」論争
  • 予測は毎回外れ、結果としてプログラマー人口とソフトウェアの増加
  • Jevons Paradox の典型例としてのソフトウェア産業拡大

今回のサイクルの特徴とAIの限界

  • 今回の「AIによる終焉」論は規模が異例
    • Visual BasicやUML時代と比べ、社会的・経済的インパクトが大きい
  • 過去の技術は本当に生産性向上を実現
    • LLMは多くの現場で生産性低下や信頼性・保守性の悪化
  • 本質的なボトルネックを解決しない限り「LOSE-LOSE」現象
  • プログラミングの難しさは「人間の曖昧な思考」を「論理的・形式的思考」へ変換する点
  • 言語モデルによるプロンプト生成も本質的困難は変わらず
  • Edgar Dijkstraの指摘通り、自然言語による完全なプログラミングは非現実的

プログラマーの需要とAIの現状

  • 論理的・明確な思考ができる人材の需要は常に供給を上回る
  • パンデミック期の過剰採用や資金流出が開発現場の混乱要因
  • AIがソフトウェア開発者を本格的に代替する証拠は皆無
  • AGI(汎用人工知能)は依然として遠い存在
  • AIコーディングアシスタントは過去のコンパイラやコードジェネレータとは根本的に異なる
    • 同じプロンプトでも同じコードが生成されない
    • 生成コードの品質問題やバグの発見・修正には依然として人間の力が不可欠
  • 現場でのコード理解・実行はAIには困難
  • AI生成コードが原因の障害や事故が増加し、経営層もリスクを認識

プログラミングの未来と雇用への提言

  • 「プロンプト=ソースコード」論の誤りと現実の厳しさ
  • AIによるプログラマー終焉論は近い将来消滅する可能性大
  • 巨大LLMの長期的な持続性や経済合理性への懐疑
    • モデルの維持コストや技術的制約が大きな課題
  • 今後は小規模なAIアシスタント(例:Java用の簡易モデル)が補助的に活躍
    • プロトタイプ生成やインライン補完など限定的用途
  • 本番環境では依然として人間のソフトウェア開発者が主導
  • Jevons Paradoxに従えば、今後もプログラマー需要は増加
  • 企業への提言:今こそ優秀な人材の採用・育成が重要
    • AIの有無に関わらず、納期短縮・信頼性向上・コスト削減に直結する技術習得の推進

まとめ

  • AI技術は過度な期待の割に、プログラマー不要論を裏付ける根拠は薄い
  • プログラミングの本質的困難は今後も人間の役割を保証
  • 持続的な技術進化と人材育成がソフトウェア開発の未来を左右

Hackerたちの意見

本当にこれが真実であってほしい。自分が必要とされる存在でありたいんだ。もし予測が全部当たって、プログラマーがほとんど必要なくなったら、どうすればいいのかわからない。でも、「今回は違う」っていうのが本当に違うって感じるんだ。コーディングAIは、俺よりもソフトウェアを上手に設計して、コードをレビューして、見つけにくいバグを見つけて、長期プロジェクトを計画して、研究や文献、プロジェクトの状況に基づいて決定を下すのが得意なんだ。俺はそのプロセスの指揮者みたいなもんだよ。あ、コーディングについては聞かないで。AIを使って上記のタスクをやると、AIが得意な明確なコーディングタスクの定義が得られるよ。今はまだ雇われてるけど、まるで20人のエンジニアが必要だった仕事を一人でやってる気分だ。今の立場から見ると、ちょっと怖いよ。

これ、宣伝みたいに読めるね。コーディングAIは、少しでも複雑なことに苦労してるし、クソみたいなことを作って研究として提示してる。テストは「return true」みたいなもので、君が下した決定に疑問を持つこともない。あの20人のエンジニアはあまり成果を出してなかったんじゃないかな。

Michelin星付きレストランで11年間シェフをやってた。好きなポジションの一つは皿洗いだった。目標は常に5分サイクルで機械を動かし続けることだった。皿をラックに入れて、洗って、前のサイクルが終わるのを待ってすぐに機械に入れられるようにすることが大事だった。そして、サイクルが終わったら乾かして片付けて、品質を確認して、見逃した場所がないようにする。機械が止まったら、次のバッチを入れるために他のことを全部中断しないといけなかった。機械を動かし続けることが、皿が積み上がるのを防ぐ唯一の方法だったから、タワーが崩れて皿が割れることになる。これには素早く動く器用さが必要なんだ。AIコーディングエージェントはその機械に似てる。俺の仕事はプロンプトを書くことと、サイクルが終わった後の品質管理とハウスキーピングだよ。それでも、全自動化のように、今のところは人間がまだ必要なんだ。

俺のこのツールに対する経験は、全然そんなもんじゃない。もし本当に20人の組織の仕事を一人でできるなら、ビジネスを始めた方がいいよ。

確かに怖い部分もある。でも、俺の組織でもトレンドを見つけてるよ。優れた非AI開発者は、AIを使って開発するのが上手い傾向がある。AIはまだ要件を忘れちゃうし、今は企業向けの「SAAS置き換え」アプリケーションのデザインを試みて実験中なんだ。AIは完全に説得力のあるプロジェクト計画を出すことができるけど、誰かがその計画を実行しようとするとギャップが出てくる。ここで、適切で経験豊富な開発者が正しいタイミングで手助けできるんだ。これが新しい世界に踏み出す正しい方法かはわからないけど、少なくとも俺は自分の組織がこの技術をどう使っているかの最前線にいるように頑張ってるよ。これは、俺のスキルとAIの能力の限界を試す良いエクササイズだと思った。成功は期待してないけど。

AIの使い方、間違ってたかも。こういう証言、全然理解できない。AIを使おうとすると、ほとんどの場合、めちゃくちゃになって、結局全部書き直さなきゃいけないんだよね。

今日の時点で、知られているAIコードボットは、新卒や夏のインターンを面接するために使う50以上のプログラミング演習を正しく解くことができるものは一つもない。ゼロだよ!中学校の数学を使って20行未満で解けるレベル1の問題ですら、解けないんだから。

残念だけど、君はあまり良いプログラマーじゃないね。AIは、君が足し算や掛け算でコンピュータに勝てないのと同じように、何かをすぐに作り出すことができる。でもその後、間違いや誤検知、完全に動かないコードを見つけることになる。そして一番厄介なのは、完全に動かないだけじゃなくて、君がまだ理解していないコードもあるってこと。これが時間を奪うところだよ。今度はそれを見直さなきゃいけないからね。それに、彼らはシステムをより良く設計するわけじゃない。部分的なものは作れるかもしれないけど、複雑なものを与えると、君が10年以上その言語でプログラミングしてきたとしたら、もっとひどい解決策を妄想することになる。今、その「AI生成」したコードが増えるにつれて、この不安定さの問題が倍増するんだ。今、君は信頼できるかどうかも分からないシステムを持っていて、それを修正するために理解できない状態になってる。おめでとう…。私はAIを適度に使ってるけど、得意なタスクには良いからね。スクリプトを生成したり、ちょっとした関数をくれたりして、それを見直す。私のコードを見直してもらうと、私はその言語をよく知ってるから、君の間違いや妄想の一部を捨てて、いくつかの価値のあるものを見つけることができる。さらに、私のコードの問題を見直していると、LLMが存在しないエラーを妄想する必要があることに気づいた。これはLLMが正確でないように見えることの一つだね。それに、問題がちょっとでも典型的でなくなったり、難易度が上がったりすると、もっと不安定になる。結局のところ、人間が必要になるよ。どれくらい必要か、どれくらい改善されるかは分からない。ただ、彼らが信頼できないことと、この「速く生成する不安定さ vs 今はコードベースが分からない」というのが、根本的な障害だと思う。これは非常に難しいか、もしかしたら不可能なことだと思う。

コーディングAIは、私よりもソフトウェアをデザインしたり、コードをレビューしたり、見つけにくいバグを見つけたり、長期プロジェクトを計画したり、研究や文献、私たちのプロジェクトの状況に基づいて意思決定をするのが上手だ。 それは全然真実じゃないよ。ある程度の能力があれば(君がそうだと仮定するけど)、AIはこれらのタスクが苦手だし、経験の浅い人間にも及ばないよ。

コーディングAIは俺よりもソフトウェアをデザインできるなんて絶対にありえない。俺は超速キーボード派で、使えるときはほぼ毎回速いキーボードを使ってる。デバッグスキルには驚かされたこともあるけど(正直、何度もがっかりしたこともある)、速いキーボードでHTML UIをあっという間に作れるのには本当に感心してる。PRをレビューする時に、速いキーボードが欠陥を指摘する能力にも感心してるんだ。要するに、速いキーボードにはたくさんの価値があるけど、プロンプトやスキル、フックをいくら追加しても、モジュール化についていくら詳しく説明しても、「エージェント」は人間と同じようにはソフトウェアをデザインできない。LLMの根底にあるメカニズムが何であれ(次のトークン予測器と呼ぶのはその能力を過小評価してる)、問題を独立して解決できる部分に分解するメカニズムは持っていない。これが真実である限り、ここに変化の兆しは全く見えない。今の最先端の技術は、エージェントがTODOリストを使っているのと同じくらいのものだから、LLMは人間よりも良いデザインはできない。シンプルなCRUD系のビジネスアプリなら、十分にデザインできる場合もある(もっと正確に言うと、問題が小さくてシンプルだから)けど、だからといって一般的なケースでソフトウェアをデザインできるわけではない。

俺はそうは考えてない。コーディングアシスタントと一緒にいる方が、俺一人やコーディングアシスタントだけよりも良いんだ。俺にとっては、俺とコーディングアシスタントの関係が大事で、どちらか一方ではない。だけど、俺はプロのコーダーじゃないし、コーダーとして自分を位置づけてるわけじゃない。プログラミングにはずっと関わってきたけど、タイトルとしては持っていない。製品側やステークホルダー側で働いてきたけど、開発チームと話すことでより深く関わることができた。だから、純粋なコーダーと比べて、コーディングアシスタントと並んで働くのが自然なんだ。

航空安全には「スイスチーズ」モデルっていう概念があって、各安全層は100%完璧ではないけど、それぞれ異なる穴があって、重なり合うことで安全性が向上するんだ。今のLLMをソフトウェア開発やデプロイメントパイプラインの「チーズ」の層として扱うことができるから、追加する目的は測定可能な指標(コードの質、稼働時間、開発コスト、成功した取引など)を改善することになるべきだよ。もちろん、選んだLLMの挙動を特定のシナリオごとに理解する必要があるけどね。スイスチーズのように(大きな穴が少数)なのか、ハバティチーズのように(小さな穴が多数)なのか、それに応じて扱う必要がある。

Hacker Newsで議論の続きを見る