2020/01/15SHAREツイートシェアはてブGoogle+PocketLINEソフトウェア開発者であれば、様々な文脈で「銀の弾丸など無い」という言葉に触れたことがあると思う。)という学会で発表された論文にたどり着く。ロバート・L・パトリックが著した「銀の弾などない」という論文は1987年にIEEE(電気電子学会)の「コンピュータ」誌に再掲載されて大いに反響を呼んだ。「ソフトウェアの生産性において、格段の向上をひとりでにもたらすようなプログラミング技法は今後10年間は登場しない」という意味である。注意すべきは、当時はプログラミングの生産性を上げるようなフレームワークも統合開発環境も存在していなかったという点だ。Railsも無い1986年の頃の話である。僕が生まれたか生まれない時代の話で、日本にバブルが来る前のことだ。-ソフトウェア・エンジニアリングの本質と偶有的事項」という項目で、銀の弾丸について述べられている。表紙の文言がこの章で述べていることを集約している。「銀の弾丸」とは何のメタファー(比喩)なのか?銀の弾丸とは、「狼人間を魔法のように鎮めることができる」というものである。狼人間は何を示しているのか?狼人間は、「慣れ親しんでいるものを恐怖に変えてしまうもの」のメタファーだ。本ではこう書かれている。慣れ親しんだプロジェクトにもこうした性質があり、ふだんは無害でまともなのだが、スケジュールの遅延、膨れ上がった予算、そして欠陥製品といった怪物にもなり得る。私たちは銀の弾、すなわちコンピュータハードウェアのコストと同じようにソフトウェアのコストも急激に小さくしてくれる特効薬を求める必死の叫び声を聞くのである。このような記述から、冒頭に記したような結論につながる。「特効薬などない」という結論だ。特効薬は無いのか?ソフトウェアは本質的に複雑なものまず、「ソフトウェアの複雑性は本質的な性質であって、偶有的なものではない」という点。簡単に言うと、ソフトウェアは本質的に複雑なもので、たまたま複雑だったり単純だったりするわけではないよってこと。ソフトウェアは複雑なものなので、単純なものさしでは測れない。ソフトウェア構築で難しいのは、処理を書くことよりも、インターフェース(仕様)を作ったりデザイン(設計)する部分なので、単純に「ステップ数は1000」みたいな古臭いSIerの謎基準で難易度は測れない。間違ったものさしでソフトウェアを測ろうとするから、目算を見誤る。目算を見誤った上に「どうして予定通りに進んでないんだ!」とガントチャートを見るしか仕事がないジジイが文句をつけ、さらにプロジェクトが炎上する!「ええい!人を投入せい!」いやいやいや、人数が増えたらそれに比例して「コミュニケーションコスト」が増えていくんだって。全体の生産性は落ちていくの。一回作ったものはなかなか変えられない。機能追加をするときは「既に動いている仕様」につねに引きずられてしまう。『人月の神話』には「多くの場合、ソフトウェアは最後に登場したという理由で他に従わなければならない」と書かれている。その通りで、それこそが複雑性が発生する原因であるという。早く会社に入っただけで偉そうにするおっさんのように、後から追加されるソフトウェアは前例に従わざるをえない。早く会社に入っていたり、早く生まれていたからといって人間が優秀だとは限らないように、既に動いているソフトウェアが素晴らしいともいえない。先に生まれただけで偉そうにすんなよ。ソフトウェアは常に変更という圧力にさらされているという。システム中のソフトウェアはその機能を具現化したものである。言い換えると、ソフトウェアこそがユーザーが求めている機能を実現するものである。人が変更の必要性を感じるのは、当然ながら「求めている機能」である。カーナビがあったとする。「いっそGoogleMapsを表示してくれ」とソフトの部分を変えてほしいと願うものではないだろうか。このようにソフトウェアはハードよりも変更の圧力にさらされる部分が多い。それゆえにゴールがなく、工数も膨らみがちとなる。最後に、不可視性について。ソフトウェアの構造は本質的に視覚化できないままになっている。そのため、強力な概念上のツールを作る意欲を阻害している、と。概念上のツールが作成できないから、思考を阻害し、コミュニケーションを妨げている、というのが『人月の神話』の主張だ。頭の中でもやっと考えてソフトウェアを作るのではなく、概念を視覚化しようぜ、ということだ。ちなみにUMLが登場したのが1996年。『人月の神話』の論文が発表されてから10年後のことだ。ここまで述べてきたようなソフトウェアの本質から、生産性を劇的に向上させる魔法なんてないよ、というのが論文の論旨である。1986年に『銀の弾丸はない』と嘆きにも近い論文が書かれた。その間、たしかにソフトウェアは大きく進歩したかもしれないが、銀の弾丸は無かった。現代を見たらどうだろう?XCodeを使い、GUIでユーザーインターフェースを作っていける。統合開発環境が丁寧にコードの予測をしてくれる。テストは自動化され、環境の構築も自動化され、便利なサービスがAWSで提供された。生産性を劇的に向上させる「銀の弾丸」は存在しなかったのかもしれないが、ソフトウェア開発者の絶え間ない努力と新たなサービスを生み出す意欲が、かつての人々から見ると魔法のような開発環境を作った。ソフトウェアは本質的に複雑で、現代のソフトウェア開発でも炎上はつきものだろう。それでも、かつての開発者と比べると、銀の弾丸で撃ち抜かれたような世界で開発ができているに違いない。ここで覚えておかなければならないことは、「銀の弾丸」の恩恵は全ての人間にもたらされるわけではない、ということだ。努力を惜しまず、新しい技術を取り入れ、現場の意識を変えたエンジニアだけが、銀の弾丸の恩恵を受けることができる。Excelでソースコードの自動生成したり、くだらない会議で時間を無駄にする世界に生きている人間には、銀の弾丸は見えない。Amazon調べ-詳細)Amazonから探す楽天から探すお金があるかないかで人生の楽しさは全く変わってきます。お金があっても幸せになれるとは限りませんが、お金がない人生は不幸です。お金がなかった私が、転職して年収1000万を超えるまでにお世話になったブログを紹介します。エンジニア転職のリアル今の時代は、お金を稼げるかどうかは能力の有無よりも触れた情報の質によるものが大きいです。皆さんも良質な情報に触れて、お金持ちになって人生を充実させてください。[...]現在コメントは受け付けておりません。自分が新人だった頃に知っておきたかったweb.xmlの基礎。次の記事JSTLとは何か?JSTLを使ったサンプル。