6
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

はじめに:AIネイティブ世代の「素朴な疑問」

初めまして!株式会社リンクアンドモチベーション新卒1年目の林龍蔵です!
普段はプラットフォームエンジニアとして働いています!

突然ですが、「銀の弾丸(Silver Bullet)」という言葉をご存知でしょうか?

エンジニア界隈では「あらゆる問題を一撃で解決する魔法のような特効薬」という意味で使われる言葉です。 僕たち新卒エンジニアは、入社したその日から Cursor や ChatGPT を当たり前に使っている世代です。

そんな新卒として学習をしていく中で『銀の弾丸』という言葉を知り、
AIがそれになり得るんじゃないかな?って思ったのがこの記事を書こうと思ったきっかけです。

直感的には、コードはもうほとんどAIが書き、研修でも約2日で新規プロダクトをある程度の形まで作ることもできたので、生産性はかなり上がっていると感じています。
しかし、さまざまな人の話を聞くと、開発リードタイム自体はそこまで短くなっていない、という声もよく耳にします。

AIは本当に僕らの「銀の弾丸」になり得るのか?

その答えを探すために、この言葉の元ネタである40年前の古典論文、フレデリック・ブルックスの 『No Silver Bullet(銀の弾丸などない)』 を読んでみました。
そこから得た知見をもとに「銀の弾丸」を再解釈するというちょっと背伸びをした記事を書きました!

1. なぜ魔法はないんですか?(1986年の視点)

1986年に発表されたこの論文では以下のような主張がされています。

There is no single development, in either technology or management technique, which by itself promises even one order-of-magnitude improvement within a decade in productivity, in reliability, in simplicity.

(生産性、信頼性、簡潔性のいずれにおいても、それだけで10年以内に1桁(10倍)の向上をもたらすような単一の開発技術や管理手法は存在しない。)

--- Frederick P. Brooks, Jr., "No Silver Bullet - Essence and Accident in Software Engineering"

この主張の根拠として、論文では、ソフトウェア開発の難しさを、 「偶有(Accident)」「本質(Essence)」 の2つに分けて説明しています。

偶有的な難しさ (Accident)

これは「本来の目的ではないけれど、今の技術的な制約でやらなきゃいけないこと」です。

  • プログラミング言語の構文に合わせてコードを書くこと

  • コンパイルを通すための修正

  • メモリ管理やハードウェアの制約への対処

これらは、ツールや言語の進化で解決できる問題です。

本質的な難しさ (Essence)

こちらは「ソフトウェアを作ることそのものの難しさ」です。

The essence of a software entity is a construct of interlocking concepts: data sets, relationships among data items, algorithms, and invocations of functions.

(ソフトウェアの本質は、絡み合った概念の構成体である。データセット、データ項目間の関係、アルゴリズム、関数の呼び出しなどがそれにあたる。)

つまり、複雑な現実世界の要件を論理的な構造に落とし込んだり、矛盾する仕様を整理したりすることです。

I believe the hard part of building software to be the specification, design, and testing of this conceptual construct, not the labor of representing it and testing the fidelity of the representation.

(ソフトウェア構築の困難な部分は、この概念的構造体の仕様化、設計、テストであり、それを表現したり表現の忠実性をテストしたりする労力ではないと私は信じている。)

すなわち、コーディング自体の時間やデバッグなどの時間はここには含まれていないことがわかります。

なぜ生産性は10倍にならないのか?

もし開発時間の90%が「コード入力(偶有)」で、10%が「設計(本質)」なら、AIでコード入力をゼロにすれば生産性は10倍になります。 しかし、開発の現場ではすでに「偶有的な作業」は半分以下になっています(OOPやIDEのおかげで)。

つまり、たとえ魔法の杖を振って「コーディング時間」をゼロにできたとしても、「何をどう作るか悩む時間(本質)」が残る限り、生産性は劇的には上がらないのです。

40年前に書かれたこの理屈は、AIを使っている今の僕にも深く刺さりました。

2. AIが生み出した「見えない負債」

ここで、僕が感じていた「違和感」の正体を考えてみます。

現代の生成AIは、「偶有的な難しさ(Accident)」 を、かつてないレベルで消し去ってくれるツールです。 「やりたい処理」を自然言語で伝えれば、面倒な構文を意識することなく、動くコードが出てきます。これは学生時代にプログラミングを学んでいない自分にとって、とても画期的で魔法のようなものでした。

しかし、AIは 「本質的な難しさ(Essence)」 、つまり「その仕様で本当に正しいのか?」「システム全体の整合性は取れているか?」までは保証してくれません。

「生産性の空回り」現象

ここで起きるのが、以下のような現象です。

  1. AIで爆速コーディング: 30分かかる実装が1分で終わる。「すごい!」

  2. 検証の泥沼: でも、そのコードには微妙なバグや、仕様の考慮漏れが含まれている。

  3. 手戻りの発生: 人間がそれを読み解き、修正する。AIが書いた(自分が書いていない)コードを理解するコストは、自分で書くよりも高いことが多い。

結果として、 「書く時間は減ったが、読む・直す時間が激増した」 状態になります。 本質(仕様や設計)を理解しないまま、偶有(コーディング)だけを高速化しても、トータルの生産性は上がらないどころか、品質の低いコードという「負債」を高速で積み上げるだけになってしまう。

自分も、AI に生成させたコードをきちんと見ずに PR を出し、先輩のレビューでうまく答えられずにやり直す、という経験をしたことがあります。
(新卒の方なら、一度は経験があることなのかなと勝手に思っています)

3. 9年後の答え合わせと、AIの正しい使い方(1995年の視点)

では、AIは「銀の弾丸」にはなり得ないのでしょうか? ブルックスは最初の論文から9年後、続編となる 『"No Silver Bullet" Refined(銀の弾丸などない・再考)』 を見ていきます。

ここで「やはり銀の弾丸はなかった」と自身の予言の正しさを確認しつつ、 「本質的な難しさ」 に立ち向かうための希望として、いくつかの手法を再強調しています。 その中でも、AI時代にこそ輝くと思ったのが 「プロトタイピング」 と 「再利用」 です。

① AI × プロトタイピング

ブルックスは、開発の最も難しい部分は「要件の定義」にあると言います。顧客(あるいは自分)すら、実際に動くものを見るまでは自分が何を欲しいか分かっていないからです。

The hardest single part of building a software system is deciding precisely what to build.

(ソフトウェアシステム構築において最も困難な単一の部分は、正確に何を構築するかを決定することである。)

だからこそ、彼はこう提案しています。

Therefore one of the most promising of the current technological efforts... is the development of approaches and tools for rapid prototyping of systems as part of the iterative specification of requirements.

(したがって、現在の技術的な取り組みの中で最も有望なものの一つは...要件の反復的な仕様策定の一部としての、システムのラピッドプロトタイピングのためのアプローチとツールの開発である。)

これこそ、AIが最も輝く領域ではないでしょうか。 AIに「完璧なコード(正解)」を求めると、検証コストで死にます。 しかし、 「とりあえず動く試作品(たたき台)」 を作らせるなら、AIは最強の相棒です。

  • 「こんな機能どう?」とAIにコードを書かせる。

  • 動かしてみて「なんか違うな」と気づく。

  • 仕様を修正してまた書かせる。

この 「作って壊すサイクル」を爆速で回すこと で、「本質的な要件」を素早く固める。 AIを「コーダー(下請け)」ではなく、「思考の壁打ち相手」として使う。これが一つ目の生存戦略です。

② AI × 再利用 (Reuse)

論文の再考版で、ブルックスはソフトウェアの再利用(Reuse)が進まない理由の一つに 「学習コスト」 を挙げていました。 より高レベルな部品(ライブラリやクラス)を再利用しようとすると、プログラミング言語の構文だけでなく、その部品特有の「語彙(Vocabulary)」を学ばなければならないからです。

Vocabulary learning constitutes no small part of the intellectual barrier to reuse.

(語彙の学習は、再利用に対する知的障壁の少なからぬ部分を構成している。)

ここも、AIがブレイクスルーを起こせる点だと考えてます。
今や、未知のライブラリでも「〇〇をするために、このライブラリを使って」や「この仕様を実装するにあたってリポジトリ内で再利用できるクラスや関数を教えて」と指示すれば、AIが適切な使い方を提示してくれます。

僕たちは、ライブラリのドキュメントやリポジトリ内を隅から隅まで暗記しなくても、AIという「コンシェルジュ」を通じて、巨人の肩に 簡単に 乗れるようになりました。

しかし、ここで強調したいのはあくまでも、「学習コスト」が下がったということであって、上記のようなプロンプトで出てきた出力をそのまま理解せずに使うことは、「生産性の空回り」現象に陥ると考えています。
「知識の再利用」のハードルを下げること。これが二つ目の戦略です。

結論:AIを「銀の弾丸」にするのは自分次第

40年前の論文を読んで、僕なりの結論が出ました。

AIというツールそのものは、決して「銀の弾丸」ではありません。 何も考えずに使えば、それは単なる「超高速なタイプライター」になり下がり、検証コストという名の負債を量産するだけです。 論文内の言葉を借りるなら、AIは 「偶有」を消し去る強力な「真鍮の弾丸」 に過ぎません。

しかし、僕たちがAIを使って空いた時間を、 「本質的な難しさ(何を作るか、どう設計するか)」 に集中させたとき。 そして、プロトタイピングを通じて要件の不確実性を減らし、再利用を通じて巨人の肩に乗りまくったとき。 その時初めて、AIは僕らにとっての「銀の弾丸」になり得るのだと思います。

新卒エンジニアの生存戦略

AIネイティブ世代の僕たちがやるべきことは、AIにコードを書かせて楽をすることではありませんでした。 AIにコードを書かせている間に、人間はもっと深い 「設計」「仕様の整合性」 について思考を巡らせること。品質の保証もコード段階ではなく、設計段階ですること。

「銀の弾丸」はどこかに落ちている魔法の道具ではなく、AIという最強の素材を使って、自分たちの手で鋳造するもの なのかもしれません。 そう思えば、AI時代にエンジニアとして生きていくのも、まんざら悪くないなと思えてきます。

参考文献

  • Frederick P. Brooks, Jr. "No Silver Bullet - Essence and Accident in Software Engineering" (1986)
6
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?