25-05-24: 人月の神話 を読んで

人月の神話

git

“13章 全体と部分” の ”変更を統制する” においてこんな記述があった。

まず、誰かが監督になる。その人だけがコンポーネントの変更や、あるバージョンのおいかえを許可できるものでなければならない。

私は基本的にGithubflowに従ってチーム開発を行っているが、まさしくGithubflowとgitはこれを実現するための手段を提供している。

深く理解せずとも先人の知恵を体現したエンジニアリングが実践できていた!“人間の開発フロー”自体に影響を与えるツールはこんな形に要件定義されていたのかと衝撃を受けた。

効率化ツールについて

“3章 外科手術チーム” はチーム編成に関しての章だが、ツールの制作者に関してこういった記述がある。

その基本的な機能の適切さを保証し、チームが必要とする特別ツール——大抵は対話型コンピュータの機能——の製作とメンテナンスおよび改良を責任もって行うツール製作が必要になる。専属のツール製作者が各チームに必要であり、それは、チームが目的とするサービスの優秀性や信頼性とは関係がない。というのも、その仕事が執刀医の必要ないと希望しているツールの手入れをすることであって、チームのその他のニーズとは無関係でだからだ。ツールの製作者は、用途の限られたユーティリティやカタログ化されたプロシージャやマクロライブラリなどを作成する。

ここで言う執刀医というのはチーフプログラマだ。小さいチームを想定した文脈でのチームの技術リーダだ。

これには完全に同意だ。そのチームごとに、ツールのメンテナンスが必要だ。特に、私の個人的な経験では、ツールは使い回すことができない。

開発の中でなるべくたくさんのプロジェクトで使いまわせるCICD環境を作ろうとしたことがあったが、結局誰も使ってくれていない。ツールを使いこなすためには、

  • ツールの特性を理解
  • 今の作業フローでどこに適用できるかを見定め
  • 環境を構築(大抵の場合はある程度作り直し)
  • 実際に使ってみる
  • さらに思ったのと違うのことになるので、調整する

という作業が必要がある。これは技術メンバーが片手間でやるにはいささか重たい仕事だ。だから、ツール制作者がチームごとに必要だと本の著者は言っているのだと思うし、おそらくはツールが使いまわせないということも著者は指摘していると解釈した。(ここでツールと言っているものは自動テスト環境のようなプロジェクトの中身と関連のあるツールであり、gitなどは使いまわせる。)

ツールを使いまわさず自作する場合は、1,2番目の工程が不要になる。3番目は多少作業が増えるかもしれないが、もはや生成AIに作ってもらうことになるので実装のコストはほとんどゼロに近い。

生成AIというキーワードが一つ存在してしまうと、一番のボトルネックは”人間の理解”や”人間の慣れ“になってくる。その工程とは1,2番目の工程に他ならないので、もはやツールの使いまわしは考えるべきではないのではないように思われる。

必要な資料について

下記所感の章に書いたが、向き合うべきはソフトウェアの本質的な複雑さのようなものである。そこで私の関心は、人間の脳はどのような手順を踏むと理解が早くなるのか、熟練のエンジニアと私の間で、知識や理解のモデルの他に、どのような違いがあるのかに移った。

より具体的には、コードを読み理解するには、ドキュメントにはどのような事柄が書かれてあるべきなのかということだ。と言っても、”品質の保証のために説明されるべきこと”もドキュメントに書かれるべきではあるが、ここでは義林の対象から外したい。

本質・所感

“16章 銀の弾丸などない〜ソフトウェアエンジニアリングの本質と偶有的事項〜” において、ソフトウェアは本質的に難しいよね、という話が出てくる。

かつては、ソフトウェア開発において、下記(これについては人月の神話ではなく私の定義だが)のそれぞれで課題があったが、

  • What アーキテクチャやコンセプト
  • How インプリメンテーション(実現方法)
  • When, Where, Who 計画、環境、チーム編成

最も時間を取られていたのはHowの部分だった。

計算資源が潤いインプレメンテーション(実装や、実現方法)のコストはかなり下がった。今や生成AIの登場で、もはや”実行可能な高級言語のコード”の生産コストはものすごく低いと言わざるを得ない。

ソフトウェアエンジニアが向き合っていくべきは、アーキテクチャやコンセプトなどといったより抽象的なものだ。つまり、C言語は難しいよね、というような実装上の課題ではなく、本質的にソフトウェアって複雑だし理解しにくいよね、という側面に向き合っていく。

それは技術的な意味合いだけではなくて、思考、あるいは脳がものを理解し発想する仕組みにも向き合っていくことになるのではないかと思う。