ソフトウェア開発に銀の弾丸はない
1. 原則
- ソフトウェア開発には、「銀の弾丸」のようにプログラマの生産性を大きく向上させる万能な技術や開発手法は存在しないだろうという予言または提言
- フレデリック・ブルックスによって1986年に発表した論文により広められた
- 銀の弾丸とは西洋社会において狼男や悪魔を撃退できるとされる銃弾を模した銀製のお守りのこと。転じて、困難な状況や強敵を一撃で撃破・解決するマジックウエポン的な概念とされる
2. 根拠
- ソフトウェア開発は本質的に複雑さを内包するものであり、複雑な活動の生産性を飛躍的に向上させる方法論は存在せず、あっても限定的な範囲に収まる
- ソフトウェア開発の複雑性は「本質的な複雑さ」と「偶有的な複雑さ」がある
- 本質的な複雑さとは、ソフトウェアが解決すべき課題そのもの(要件や仕様)や実装に落とし込む為に行われる設計作業
- 偶有的な複雑さとは、ソフトウェア開発技術から発生する複雑さ
- 言語仕様やライブラリの把握、開発環境の構築、インフラ整備etc...
3. 指針
- 新しく発表されるテクノロジーは往々にして革新的な生産性の向上を謳うが、本質的な複雑さを解消するものではないことが多い
- そのようなテクノロジーに踊らされて無用な痛手を負うのは愚かである
- エンジニアには新たなテクノロジーが本質的な複雑性を解決するものか、偶有的な複雑さを解決するものか見定める力量が必要
- バズワードに踊らされず、地道にやっていく
4. 注意
- 時代の流れによる進歩は存在しなかったわけではない
- 2020年現在では、1980年代、2000年代に比べると、クラウドサービスの発達や開発手法の発展などによって当時から飛躍的な生産性向上が達成されている
- これらは主に偶有的な複雑さの排除によって生産性を向上させたものが多い(クラウド、高級言語)
- 本質的な複雑さの解決は2020年時点でも解決できているとは言えず、アジャイル開発に代表されるインクリメンタル開発でリードタイムの減少を狙うことが主流になっている