こんにちは。谷口です。
「銀の弾などない」という言葉を聞いたことはありますか。
これは「狼人間を魔法のようにすぐに鎮める銀の弾丸のように、ソフトウェア開発においてすぐに役に立ちプログラマの生産性を倍増させるような技術や特効薬はない」という意味で、ソフトウェア技術者のフレデリック・ブルックス氏が著した『人月の神話』に登場する言葉です。
人月の神話は1975年に出版されたソフトウェア工学とソフトウェアプロジェクト管理に関する書籍ですが、いまだにエンジニアのバイブルとして人気があります。エンジニアのみなさんは読んだことがあるでしょうか?
おそらく
「書名はよく聞くけど、実は読んだことない…」
「古典すぎて今は参考にならないのでは」
といった方が多いのではないでしょうか。
今回は、『人月の神話』の概要と読んだ感想を書きたいと思います。
概要について
本書がどんな内容の書籍なのか、まず丸善出版の公式サイトにはこう書かれています。
IBMの大型コンピュータSystem/630、およびオペレーティングシステムOS/360の開発チームを率いた著者が、プロジェクトで発生した問題点を詳細に分析し、ソフトウェア開発にまつわる困難と展望について持論を展開したエッセイ集。原著初版(1975年)の刊行から35年がたつ現在でも、大規模開発プロジェクトにおけるソフトウェア工学の古典として読み継がれ、多くの読者を獲得している。
エンジニアのみならず、ソフトウェア開発やプロジェクト管理にかかわったことがある方であれば
- スケジュール管理の厳しさ
- 人月換算の難しさ
- 炎上プロジェクトの大変さ
などを身をもって体験し、悩まされた経験は少なからずあるかと思います。
なぜ我々はそのようにして何年も何年もプロジェクト管理に悩まされなければならないのでしょうか。
本書では、ソフトウェア開発において起こりがちなさまざまな問題の要因と困難さが分析されています。特に「人月」の概念がいかに意味をなさないかが切々と説かれているので、現在人月単位で仕事をしている方にとっては身につまされる内容かと思います。
構成について
第1章 タールの沼
第2章 人月の神話
第3章 外科手術チーム
第4章 貴族政治、民主政治、そしてシステムデザイン
第5章 セカンドシステム症候群
第6章 命令を伝える
第7章 バベルの塔は、なぜ失敗に終わったか
第8章 予告宣言する
第9章 五ポンド袋に詰め込んだ十ポンド
第10章 文書の前提
第11章 一つは捨石にするつもりで
第12章 切れ味のいい道具
第13章 全体と部分
第14章 破局を生み出すこと
第15章 もう一つの顔
第16章 銀の弾などない——ソフトウェアエンジニアリングの本質と偶有的事項
第17章 「銀の弾などない」再発射
第18章 「人月の神話」の命題——真か偽か
第19章 「人月の神話」から二十年を経て
エピローグ 五十年間の不思議、興奮、それに喜び
各章のタイトルはかなり抽象的で、一見すると何について書かれているのかわからない章題も多いです。
現在販売されている新装版では『第18章 「人月の神話」の命題——真か偽か』で、初版に収録された15章までの内容の概略が示されています。全部読む余裕がない人はまず第18章を読んで、特に興味を持った箇所から読んでみるのがよいかと思います。(全部読むつもりの人も、まず第18章から読んでみるとこの本に何が書かれているかがざっくり把握できます)
銀の弾などない
第16章の『銀の弾などない——ソフトウェアエンジニアリングの本質と偶有的事項』は、『人月の神話』の初版が出版されたあとにブルックス氏が発表した論文で、20周年記念版から収録されています。
これから10年間という水平線を見渡すと、銀の弾などはどこにも見あたらない。技術においても、管理手法においても、それだけで10年間に生産性や信頼性と容易性での飛躍的な改善を1つでも約束できるような開発は1つとしてない。
(中略)
輝かしい進展は見えないが、そう決めてかかることはソフトウェアの本質からは離れている。実際のところ多くの頼もしい新機軸(革新)が着々と進められている。それらを開発、普及、利用するという難しいが一貫した努力こそ、飛躍的な改善をもたらすはずだ。王道はない。しかし、道はある。
ソフトウェア開発の複雑性には、本質的な難しさ(ソフトウェアの性質に固有な困難)と偶有的な難しさ(目下の生産にはつきまとうが本来備わっているものではない困難)があり、本質的な難しさには複雑性・同調性・可変性・不可視性がある。偶有的な難しさは高水準プログラミング言語、タイムシェアリングシステム、統一されたプログラミング環境により攻略されてきた。(ただし完全に解決されたわけではない)今後はソフトウェア問題の本質を衝く攻略、つまりこうした複雑な概念構造物の定式化を検討しなければならない。
とした上で、ブルックス氏は4つのアプローチを提唱しています。
- 購入できるものを敢えて構築しないようにするためのマスマーケット(市販製品)の利用
- ソフトウェア要件の確立に際し、開発反復計画の一部として、ラピッド(迅速な)プロトタイピングを使用すること
- 実行と使用とテストが行われるにつれて、より多くの機能をシステムに追加しながら、ソフトウェアを有機的(系統的)に成長させること
- 若い世代の素晴らしいコンセプトデザイナーを発掘し、育てること
読んだほうがいい人について
対象読者については、冒頭で「本書は、プロのプログラマや管理職、特にプログラマの管理職を対象にしている」とされています。
たしかに開発チームのメンバーとしてのプログラマ・エンジニアはもちろん、チームリーダーやプロジェクトマネジャーなど、多少なりともソフトウェア開発におけるマネジメントに携わる人は一読しておいて間違いないでしょう。
なぜなら、プロジェクトが計画通りに進行しなかったり、エンジニアの作業時間が増幅したりする背景には、人月計算による見積もりの問題やブルックスの法則、できるプログラマとできないプログラマの生産性の相違など、本書に書かれているあらゆる問題が隠れているからです。
もちろん、実際に開発をするエンジニアの方にとっても学びや共感できるポイントはかなりあるかと思います。
「銀の弾などない」「ブルックスの法則(遅れているソフトウェアプロジェクトへの要員追加は、プロジェクトをさらに遅らせるだけである)」などの話はどこかで耳にしたことがある方も多いですよね。これらが実際にどのような文脈で出てきたのか、同時に解決の糸口はどこにあるのかといった目線で読むのもよいでしょう。
もちろん初版が1975年に出版された書籍なので、現代では参考にならない箇所もあります。前述の通り第18章で概略がわかるので、そういうところは読み飛ばして、普遍的に役立ちそうな部分や自分が特に悩んでいるところ、関わりが大きいところを読むだけでも参考になるかと思います。
SILVER BULLET 戦場のエンジニア 銀の弾丸コードを打て
銀の弾といえば、paizaでは先日プログラミングゲーム『SILVER BULLET 戦場のエンジニア 銀の弾丸コードを打て』を公開いたしました!
新種の軍事プログラミングで戦場に【銀の弾丸】を打ち込め!
世界中でIT化が加速し、プログラミングも生存のために重要なスキルのひとつとなった近未来の戦場。ミリタリーインテリジェンスから最前線へと飛び出した我々は、軍事プログラミングを駆使して自軍を勝利へと導く任務を負った。
平和をもたらす【銀の弾丸】を見つけることはできるのか!?
エンジニアのみなさん教えて!キャンペーン #銀の弾がほしいと思うとき
また、ただいまpaizaでは『SILVER BULLET 戦場のエンジニア 銀の弾丸コードを打て』の公開を記念してつぶやくだけでAmazonギフト券が当たる エンジニアのみなさん教えて!キャンペーン #銀の弾がほしいと思うときを実施中です。
応募方法は、こちらもpaizaのTwitterアカウント(@paiza_official)をフォローして、「#銀の弾がほしいと思うとき」をツイートするだけ!(#銀の弾がほしいと思うとき のハッシュタグが含まれていればOK!)
例えば…
「スケジュール通りに開発が進まないとき… #銀の弾がほしいと思うとき」
「原因不明のエラーが出ているとき… #銀の弾がほしいと思うとき」
などなど何でもOK!
キャンペーン期間
2022年2月11日まで
プレゼント
Amazonギフト券5000円分・3000円分・1000円分を各1名様、500円分を2名様にプレゼント
詳しくはこちら
「paizaラーニング」では、未経験者でもブラウザさえあれば、今すぐプログラミングの基礎が動画で学べるレッスンを多数公開しております。
詳しくはこちら
そしてpaizaでは、Webサービス開発企業などで求められるコーディング力や、テストケースを想定する力などが問われるプログラミングスキルチェック問題も提供しています。
スキルチェックに挑戦した人は、その結果によってS・A・B・C・D・Eの6段階のランクを取得できます。必要なスキルランクを取得すれば、書類選考なしで企業の求人に応募することも可能です。「自分のプログラミングスキルを客観的に知りたい」「スキルを使って転職したい」という方は、ぜひチャレンジしてみてください。
詳しくはこちら