銀の弾丸に関するノート

June 20, 2020
Manabu Ueno

銀の弾丸の意味について簡単に書いておく。

『銀の弾などない』について

まず、フレデリック・ブルックスの有名な論文「銀の弾などない ― ソフトウェアエンジニアリングの本質と偶有的事項」(1986)の内容は、次のようなものである。

ソフトウェアの構築には、本質的作業と偶有的(副次的)作業がある。前者は「何を作るか」についてのテーマであり、後者は「どう作るか」についてのテーマである。

「どう作るか」については様々な技法が生まれており、高水準言語、タイムシェアリング、オブジェクト指向プログラミング、人工知能、ワークステーションなど重要な技術革新はあったが、決定的なものとは言えない。

またそもそも「何を作るか」のテーマにおいて、ソフトウェアには困難が本質的に内包されているのである。

ソフトウェアの「何を作るか」には4つの性質がある。

  • 複雑性: ソフトウェアは、同じコードは1度しか書かないという作り方をするので、他のどの人工構造物よりも複雑性が高い。
  • 同調整: ソフトウェアは、現実世界の複雑な要求に合わせて作られるので、ソフトウェアだけで単純にすることはできない。
  • 可変性: ソフトウェアは変更しやすいと考えられているので、追加や修正が強制され続ける。
  • 不可視性: ソフトウェアは目に見えないため、デザインプロセスや関係者間のコミュニケーションを妨げる。

これらの困難はつまり、ソフトウェアに生得的なものであって、これらを一気に解決するような、飛躍的な改善方法というものは無い、というのである。

― それはそうだろう、と思う。

ブルックスは基本的に、ソフトウェア技術者として、ソフトウェア技術によってソフトウェアの問題を解決しようとしている。だから解決できない。ソフトウェアが本有する問題は、ソフトウェアによっては解決しないから。

“技術の本質は技術的なものではない。- マルティン・ハイデガー”

“私たちが抱える重大な問題は、それを生み出したのと同じレベルの思考では解決できない。- アルベルト・アインシュタイン”

ハイデガーやアインシュタインが言うように、問題の本質は問題の中にはないのである。問題を解くには、問題の外に出なければいけない。

では、ソフトウェア開発の問題の外に出るとはどういうことか。

実はブルックス自身が、この件について『銀の弾などない』の中で考察している。彼は、本質的困難に対する有望な攻略として、次のアイデアを示している。

  • 作るのではなく購入する: ソフトウェアを作るのが難しいなら、既製品を買って使えばよい。
  • ラピッドプロトタイピング: 要件を繰り返し抽出し、洗練させ、「何を作るか」を確かにする。
  • 構築ではなく育成する: ソフトウェアを、一度作って終わりではなく、継続的に育ててくものと考える。
  • 偉大なデザイナーを育てる: 偉大なデザインは偉大なデザイナーから生まれる。企業はコストをかけてデザイナーを育てるべき。

ブルックスがこれを書いたのは80年代だが、奇しくも現在、この4つの方針のうち最初の3つは、多くの開発組織において実践されており、ソフトウェア開発の問題に対するソフトウェアの外からのアプローチとして一般化している。その意味でブルックスは非常に優れた予言者だった。ただし4つ目のデザイナー(この場合は広義のソフトウェアデザイナー)育成の重要性については、まだ広く認識されているとは言えないが。

そのような意味で、ブルックスはかなり本質的な施策を持っていたことになる。しかしそれでもこれらは銀の弾には至らなかった。なぜなら、これらは依然としてソフトウェア開発の困難に関する解法であり、ソフトウェアが本有する問題自体はどこにも行かないからだ。

『オブジェクト指向UIデザイン』について

オブジェクト指向UIデザイン ― 使いやすいソフトウェアの原理』では、OOUI のコンセプトを通じて、その身体的な意味と、精神的な意味で、ふたつの「転回」について書いている。

身体的な意味としての OOUI とは、知覚される表象として、タスクではなくオブジェクトをベースにUIを構成するということ。

精神的な意味としての OOUI とは、デザインという行為に形から入ること。すなわち、推論ではなく仮説 = アブダクションによって行うということである。

この両者を、「名詞→動詞」という構文論的な転回として統合しているのが、オブジェクト指向UIであるということ。

デザインの究極の目的は形である。形は道具性をまとって人の行動を変化させる。そのような存在としてソフトウェアを捉えることである。これはラピッドプロトタイピングの趣旨と少し近いが、UIというものをソフトウェアの付属品ではなく、ソフトウェアの実在性そのもの、ユーザーの目当てそのものであるとする意味で、ずっと本質的な認識なのである。

OOUI は古くて新しいと書いたが、つまり、この20年でソフトウェアは我々の生活のかなりの部分に浸透し、リアルになった。それは例えば、石器、絵、言語、文字、文具、手仕事道具など、人の文化の中で綿々と相属しているものたちと区別なく、同列に、オブジェクトとして実在している。そのような時代に、OOUI は、ソフトウェア開発というジャンルを超えた意味を持つようになる。

かつてソフトウェアは、あらかじめ定義された計算を高速に行うための機械だった。しかし技術が進歩し量的な変化が起こると、やがて質的な変化をもたらした。すなわち、思考のための道具への変化。それは問題を解決するというよりも、問題の見方についての可能性を広げるために用いられるのである。

道具はまず人の行動に合わせて作られるが、やがてそれが進化すると、その道具に合わせて人の行動が変化する。そのような真の道具存在としての、ソフトウェアをデザインすること。それが OOUI の意味であり、同時にそれは、ソフトウェアの問題を、その内と外を貫きながら一気に転回する、高次のパースペクティブなのである。

ソフトウェアデザインにおいて、一般的にプログラマーは「その中が何でできているのか」を問う。ブルックスもそうだった。一方、UIデザイナーは「それが世界の中の何であるか」を問う。ブルックスは本質的困難に対する有望な攻略としてデザイナー的視点からも優れた提言をした。

ブルックスはオブジェクト指向プログラミングについても言及している。しかしそれはあくまで偶有的事項として「どう作るか」というテーマの中においてだった。ソフトウェアというものを、ソフトウェアとしてではなく、道具存在とするための転回的原理として捉えるには至らなかった。これがブルックスの臨界だったのである。

『オブジェクト指向UIデザイン』を読んだ人はわかると思うが、この本が睨んでいるのは、もはやソフトウェア開発の困難さではない。問題の本質は、そのような不合理で複雑で使いにくいソフトウェアを作らせている、現代の社会構造的なものにある。銀の弾丸が向けられている先は、「全ての人に合う靴」を開発者やデザイナーに求め、それを履くよう人々を駆り立てている、現代の徴用システムなのである。

Comments are closed.