ソフトウェア開発の本質的な課題を知る本(人月の神話)

ソフトウェア開発の本質的な課題を知る(あるいは再確認する)のにとても良いと思う本「人月の神話」を紹介させていただきます。とても有名な本です。

  • 人月の神話
    • Frederick P. Brooks,Jr. (原著), 滝沢 徹 (翻訳), 牧野 祐子 (翻訳), 富澤 昇 (翻訳)


ここで、本質的な課題とは、昔から今まで飛躍的に改善できる方法が無いと思われる課題のことです。

プロジェクトをちゃんとコントロールしようとすると、こういった課題をちゃんと押さえておくことが重要だと思います。
その意味で、「人月の神話」は、ソフトウェアの開発に関わる技術者、管理者はもちろん、お客様、販売や導入、運用に関わるなど、全てのステークホルダーに読んでいただきたい本です。(この本の概略だけでも知って頂ければいいな、という意味です。)

著者であるフレデリック・ブルックスさんのWikipediaのページには以下のように書かれています。
  • 著書『人月の神話』と論文『銀の弾などない』は、ソフトウェア工学およびソフトウェアプロジェクト管理の世界で多くの人々に読まれ、大きな影響をあたえている。
  • 1995年にはアメリカ国家技術賞、1999年にはチューリング賞を受賞した。

新装版(刊行20周年記念増訂版)には、タイトルの『人月の神話』に加えて、『銀の弾などない』、『銀の弾などない-再発射』、『人月の神話から20年を経て』なども収録されたお得な内容になっています。

ソフトウェア開発に携わっている方なら、「人月の神話」は知らなくても、「銀の弾などない」という言葉は聞いたことがあるのではないかと思います。

ところで、「人月の神話」が最初に刊行されたのは1975年とのことです。そして刊行20周年記念増訂版があることから分かる通り、コンピュータ分野ではかなり歴史のある本です。

変化が激しいと言われるソフトウェア分野の本なので、内容が陳腐化して歴史的な価値しかないのでは?と思われるかもしれませんが(実際にそう思える部分もありますが)、この本の主題は、今読んでも通用すると思います。

それは、主に、ソフトウェア開発における本質的な課題のところに焦点を当てており、その部分においては、現在でも解決されていないからだと思います。

<この本を読んだきっかけ>

この本の存在は、私がソフトウェアエンジニアになった若いころから知っていました。しかし、つい最近まで読んでみたいと思ったことはありませんでした。

若いころは、本を読む時間があれば、管理的な本より、具体的な技術書を好んで読んでいました。
もともと管理的な仕事が好きでないこともあり、情報処理試験に出てくる最低限の知識があればいいじゃん的な発想もありました。

プロジェクト管理系の仕事をする時でも、管理的な問題を技術で解決するとか、ステークホルダと志しや問題を共有できていれば何とかなる、といった具合です。

幸運にも、これまで携わったプロジェクトでは、小さな失敗は多いけど、(成功といえるところまで続けることができたという意味で)大きな失敗もなく、それで今までなんとかやってこれました。

しかし考えてみると、全てのプロジェクトで自分はプレイングマネージャーとして関わっており、最後は自分で何とかケリをつけただけということで、実際は、専任管理者としての力量はかなり怪しいと感じていました。

また、年を取ってきたこともあってか、管理面についても、今まで自分が感じてきた素朴な疑問について、ちゃんと勉強してみようと思い始めました。

そんなことから、「銀の弾などない」という言葉は知っていても、もとの論文は読んだことがなかったので、まずは有名な「人月の神話」を読んでみようと思いました。

<本の内容>

この本の要旨は、Wikipediaに書かれていますし、ネット上にも多くの記事があります。
こんな状況なので、本を買って読む必要があるのか?と思いたくなりますね。。。

「人月の神話」は、もともとエッセイとして書かれたようで、スラスラ読めます。
しかし、しっかり読み直してみると、かなり深いというか、文章の一つ一つが示唆に富んでいて、捨て文章?が少なく、ネットで得た情報以上に有益でした。(とはいいつつも、昔のコンピュータでの事例などは、全く実感がわかないものが多いのですが。)

「銀の弾などない」は、サブタイトルが「ソフトウェアエンジニアリングの本質と偶有的事項」です。

読んでみると、私は言葉のイメージレベルの理解だったことが分かりました。それは、何について「銀の弾などない」と言っていたのか理解していなかったことで、恥ずかしくなりました。(チコちゃんに叱られる!)

全体的に、さらっと読むこともできますが、深く読むとさらに味のある本です。

とはいえ、以下のような読み辛い部分もあります。
  • 事例の内容が古典的?なものが多く、年取った私でも知らないことがあり、実感がわかないことがあります。
  • 初版をそのまま残し、後の章で当初との差分が書かれているので、後から自分で頭の整理をする必要があります。
    • 具体的には、今では当てはまらないなー、と思って読み進み、その後の「20年を経て」を読むと、やっぱりそうだよね、と思う部分と、それでも今はもっと進んだかな、と思ったり。
  • 用語の意味を自分なりに解釈する必要があります(深く読む場合)。
    • 日本語訳の問題というよりは、英語で書かれていたとしても、出版された当時と現在では、用語の使われ方が少しずつ異なってきているところもあります。というより、もともと明確に定義されていない言葉ということなのかもしれません。「訳語について」の項に、アーキテクチャ、インプリメンテーション、実現等の用語の解説がありますが、その他の用語においても、言葉が具体的にどのようなことを指しているのか、自分なりに解釈する必要があると思います。
私は技術系なので、熟読しようとすると考え込んだりしましたが、逆に技術系以外の人の方が、このあたりで深く悩まず、うまく読み飛ばせるような気がします(笑)。

<感想など>

読み終わってみると、これまで読んだ本やネットの情報から既に知っていた内容が多かった気がします。しかし、考えて見ると、その元となったのはこの本なのではないかという気もします。また、ソフトウェア開発においては、プレイングマネージャーが重要なのかもしれないとか(笑)。
いずれにせよ、より理解が深まりました。

1975年の段階でこのような内容が書かれていたことに驚きます。本質的なところだけ抜き出せば、最近書かれた本といわれても違和感が少ない気がします。

本の中で、個人的に特に気に入っている点、勇気づけられた言葉を書いておきます。
  • 「人月の神話」というタイトル
  • 作る喜び、作る苦しみ
  • プログラム開発は、多くの人々が目的達成のため、もがき苦悩するタールの沼であるとともに、また独自の喜びと苦悩を伴った創作活動でもある。
  • コンセプトの完全性こそ、システムデザインにおいて最も重要な考慮点だと言いたい。
  • 不変なものは、変化そのものだけである
  • 王道はない。しかし、道はある。
この本は、古典としてではなく、まだまだ長く示唆に富んだ本として読み続けられる気がします。

関連記事

コメント

このブログの人気の投稿

VirtualBoxのスナップショット機能

Google Document AIで画像から表形式データを抽出する(Vision API OCRとの違い)

Ubuntu/Colab環境でPDFファイルのページを画像化する(pdf2image、pdftoppm、pdftocairo)