第4回:再利用って口で言うほど簡単じゃないんだよね|本気で読み解く”人月の神話”(第17章:後半)

AUTHOR :  田中 耕比古

1.5k
田中 耕比古
title_myth_of_man_month

見解は変わらない(だって、正しいこと言ってたもーん)

人月の神話【新装版】
人月の神話【20周年増訂 新装版】

前回に引き続き、第17章「『銀の弾などない』再発射」を読み解きます。17章の前半では、色んな人からの”突込み”に対して全力で”突っ込み返し”ていたブルックス氏ですが、今回ご紹介する後半部分では、オブジェクト指向および、それに関連するモジュールの再利用性について語ります。

連載記事一覧は、コチラの最下段から

オブジェクト指向も、銀の弾ではなかった

オブジェクト指向を捉える際に、4つの見方がある、とブルックス氏は説きます。それは、

  1. モジュール性(きれいなインターフェース)
  2. カプセル化(内部構造を隠す)
  3. 継承(クラスの階層構造と、仮想関数)
  4. 強い抽象データ型

です。ただ、これらの特徴は、オブジェクト指向の登場以前から存在していたものであると指摘した上で、「それらすべて」を同時に享受できることが特徴なのだと述べます。

高まる期待と、それに反する緩やかな発展・浸透

そういう意味で、オブジェクト指向は、高い期待をもって迎えられたわけです。しかし、その期待に応えることはできませんでした。なぜか?

期待されていたのは「デザインの原則を与えること」だった

オブジェクト指向について本書で語られる期待は、一言でいうと「大きなレベルで”モジュール化”(あるいはカプセル化)すること」だと僕は理解しています。

これは、”高度な抽象化”という表現がされます。そして、その高度な抽象化の目指すところは、オブジェクト指向をデザインの一つの種類だと定義して、プログラマにデザインの原則を与えるべきだったと述べられます。

オブジェクト指向の目指すところに関する解説は別の機会に譲りますが、この”高度な抽象化”によって、ソフトウェア開発の”本質的なむずかしさ”から開発者を解放することを狙っていたわけです。

実際には、「特定ツールの使用」の励行にとどまった

しかしながら、その期待は達成されませんでした。その原因として、本書ではデービット・パルナスの言葉を引用しています

答えは簡単だ。それは[オブジェクト指向が]、いろいろな複雑な言語に結び付けられてきたからだ。(中略)オブジェクト指向が特定のツールを使用することであると教育してしまった。どんなツールを使っても、優れたプログラムも書ければ、まずいプログラムも書ける。

デザインするための思考法・考え方として理解されるべきオブジェクト指向が、特定の言語・ツールを使ってプログラミングすることだと誤って理解されてしまったのでは、ソフトウェア開発者を「本質的なむずかしさ」から解放することができないのも自明です。

「先行投資」をするという意思決定は難しい

また、仮に「デザインのための思考法だ」と理解したとしても、オブジェクト指向が、開発プロセスにおける真の価値貢献をするためには、大きな壁があるとブルックス氏は述べます。

投資家なら、予想はされるが後の不確かな利益のため事前にお金をかけることは日ごろからやっている。しかし、多くのプログラミング会社・団体の経営者・管理者にとって、これは真の勇気を必要とする。(中略)コストの事前投資と据え置かれる利益の両極端さこそ、オブジェクト指向テクニックの採用を遅らせている唯一最大の要因であると私は思う。

オブジェクト指向は、再利用されることによってこそ、その価値が出ます。(この再利用には、カスタマイズも含まれます。)しかし、それが発揮されるのは「最初の開発時」ということはありえません。「後継ソフトウェアの開発」(あるいは、「開発済みソフトウェアのメンテナンス」)のタイミングにならないと、再利用のメリットはでにくいのです。

つまり、「いま、目の前では収穫できない果実を、いま、目の前の手持ち資金で植えることができるか?」という判断になりますので、上の引用文のとおり、投資の概念と近くなります。さらに、事態をさらに複雑にしているのは、(特にシステム開発の場合)メンテナンスや後継システムの開発をしたりするのが”自社じゃないかもしれない”ということです。果実はきっと実るのでしょうが、誰が刈り取ることになるのかわからない、ということになるわけです。(まぁ、”業界全体で、順繰りに果実を刈り取っているのだ”と割り切れればいいんでしょうけどね・・・)

結局、再利用されないんだよね・・・

そんなわけで、「再利用性」が最大限に活用されることは少ないのですが、プログラマ「個人」の世界では、再利用が盛んに行われます。

経験豊かなプログラマのほとんどは、私的プログラムライブラリを持っていて、開発しているソフトウェア全体の約30パーセントにその際利用コードを使っている。

ジョーンズの発言より

しかし、それは、あくまでも「個人」の世界に留まります。

私たちは、再利用を妨げているものは、生産者側の問題ではなく、消費者側にあると推測している。ソフトウェアエンジニア、つまり標準化されたソフトウェアコンポーネントの潜在的消費者が、自分のニーズに合ったコンポーネントを見つけ、それを検証するコストが、新たにコンポーネントを書くよりも高くつきそうだと認める場合、そっくり同じ新しいコンポーネントが書かれることになるだろう。注意してもらいたいのは上で私が「認める」と言ったことである。再構築に実際かかるコストがどれくらいかは、問題ではないのだ。

バン・スナイダーの発言より

要は、「探すのが面倒だ」と思ったら、「自分で書く」ということです。(プログラマという人種を一人でもしっていたら「奴ならありえるな」と思いませんか?)ということは、普通にやっていては”企業レベルの再利用性は、なかなか高まりにくい”ということになります。

どうすれば、再利用されるのか

では、いったいどうすれば”企業レベルの再利用性”を高められるのでしょう。

本書内に「企業レベルでは、全体の75パーセントの再利用を目指しており、特殊なライブラリと管理サポートを必要としている」という記述があります。75%って、相当な割合ですよね。そのためには何をしたらよいのか。本書では「優れたデザイン」と「非常に優秀な文書」が鍵だと述べられます。

しかしながら、その要件を満たし、再利用性が十分に高いものを作ろうとすると、「1回限りのコンポーネントの2~3倍の労力がかかる」とも言われます。それは、本書の第1章でかたられる「プログラムをプログラミング製品にするための労力=3倍」と同じです。そのむずかしさの一端を示す一文を引用します。

一般性のため必要なものがなんであるかを事前に予測するのは難しい(中略)ユーザーインターフェースに関する自分自身のライブラリを使用するのが五度目にもなったというのに、修正が必要な状況が続くのだ

いやはや、何とも難しい。

「高水準言語」ゆえの、再利用のむずかしさ

さらに、高水準言語であるがゆえの、プログラム再利用に関する困難性がある、とブルックス氏は述べます。そもそも、高水準言語の特徴として

高水準言語になるほど、その語彙は多く、構文(シンタックス)は複雑に、また語義(セマンティクス)は豊富になる

再利用性を高めようとすると、「再利用できるもの(ことば)」を沢山つくる、すなわち”語彙が増える”ことになります。そして、再利用性が高いということは「再利用するシーンの幅が広い」ということですので”語義が豊富になる”ということを意味します。さらに、そのような複雑な情報を記述するためには”構文が複雑になる”わけです。

そうすると、問題はソフトウェア開発の域を超え、言語習得の領域に踏み込んでいくことになります。それに関して、3つの教訓を例示してくれていますが、まだまだたくさんの課題が潜んでいるのは言うまでもありません。そりゃぁ、再利用するの難しいですよね。

  • 人々は文脈の中で学んでいくので、部品ライブラリだけではなく、構成した製品の実例をたくさん公表する必要がある。
  • 人々は綴り以外暗記しない。構文と語義は、文脈の中で使用しながら少しずつ学んでいく。
  • 人々は構文クラスによって語構成規則をグループ化するのであって、互換性のあるオブジェクトのサブセットによるのではない。

「見解は変わらない」

そして、本章(すなわち、本論文)の締めは、「解決策についての要点 -見解は変わらない」という見出しで締めくくられます。

R・L・グラスは(中略)私の1995年時点の見解を正確に要約してくれている。

「(中略)ソフトウェア開発は概念上の骨の折れる仕事であり、魔法のような解決策は身近にはないと言った。(中略)

ソフトウェア分野の中には、それは失望させる見方だとする人もいる。相変わらず、解決策がすぐ手近にあると考えていた人である。

しかし、私たちのうちで自分が現実主義者だと頑なに思っている人は、この状況を一服の清涼剤と考える。ついに、絵に描いた餅より少しは実現望みのあるものに焦点を絞れるようになったのだ。(後略)」

ということで、前回述べたような「いろんな反論」は、解決策が身近にあると考えていた人たちによるものに過ぎず、現実的な観点に立てば、これは非常に妥当なのだ、ということで締めくくるわけですね。非常なる自信に満ち溢れていますね。(笑

以上、第17章は「反論への反論」という体で進められましたが、読み手としては「第16章の補足」だという位置付けで読むべきでしょう。

色んな人の批判は的外れであり、折角のオブジェクト指向によるモジュール化・カプセル化も”再利用性”という意味では殆ど活用されない状況であることを踏まえれば、銀の弾は相変わらず存在しないと言わざるを得ない。結局のところ、行うべき”本質へのアプローチ”は、9年前に述べた通り「マスプロダクトの活用」「ラピッドプロトタイピングの実施」「インクリメンタルな開発」「デザイナーの育成」しかない、という「見解は変わらない」というわけですね。

 

さて、ここまでの4回(+1回)の連載で、「”人月の神話”の全体像」と「”銀の弾などない”の概略」をご理解いただけたことと思います。この次は「19章:『人月の神話』から20年を経て」で、(”銀の弾などない”ではなく)”人間の神話”を、(他人からの批判ではなく)自己批判の精神で著者自身が振り返ってくれますので、そちらをしっかりと読み解いて”人月の神話”に対する理解を深めていきましょう。

連載記事一覧は、コチラの最下段から

SERVICE

SERVICE

BANNER

graffe

grip

GiXo BLOG

recruit

Aibou

amazon web service partner network

TAG BOX