Monthly Archives: June 2020

銀の弾丸に関するノート

銀の弾丸の意味について簡単に書いておく。 『銀の弾などない』について まず、フレデリック・ブルックスの有名な論文「銀の弾などない ― ソフトウェアエンジニアリングの本質と偶有的事項」(1986)の内容は、次のようなものである。 ソフトウェアの構築には、本質的作業と偶有的(副次的)作業がある。前者は「何を作るか」についてのテーマであり、後者は「どう作るか」についてのテーマである。 「どう作るか」については様々な技法が生まれており、高水準言語、タイムシェアリング、オブジェクト指向プログラミング、人工知能、ワークステーションなど重要な技術革新はあったが、決定的なものとは言えない。 またそもそも「何を作るか」のテーマにおいて、ソフトウェアには困難が本質的に内包されているのである。 ソフトウェアの「何を作るか」には4つの性質がある。 複雑性: ソフトウェアは、同じコードは1度しか書かないという作り方をするので、他のどの人工構造物よりも複雑性が高い。 同調整: ソフトウェアは、現実世界の複雑な要求に合わせて作られるので、ソフトウェアだけで単純にすることはできない。 可変性: ソフトウェアは変更しやすいと考えられているので、追加や修正が強制され続ける。 不可視性: ソフトウェアは目に見えないため、デザインプロセスや関係者間のコミュニケーションを妨げる。 これらの困難はつまり、ソフトウェアに生得的なものであって、これらを一気に解決するような、飛躍的な改善方法というものは無い、というのである。 ― それはそうだろう、と思う。 ブルックスは基本的に、ソフトウェア技術者として、ソフトウェア技術によってソフトウェアの問題を解決しようとしている。だから解決できない。ソフトウェアが本有する問題は、ソフトウェアによっては解決しないから。 “技術の本質は技術的なものではない。- マルティン・ハイデガー” “私たちが抱える重大な問題は、それを生み出したのと同じレベルの思考では解決できない。- アルベルト・アインシュタイン” ハイデガーやアインシュタインが言うように、問題の本質は問題の中にはないのである。問題を解くには、問題の外に出なければいけない。 問題の中で考えていても問題は解決しない。解決するには問題の外に出なければならない。 pic.twitter.com/a8dGduAdwZ — Manabu Ueno (@manabuueno) December 17, 2019 では、ソフトウェア開発の問題の外に出るとはどういうことか。 実はブルックス自身が、この件について『銀の弾などない』の中で考察している。彼は、本質的困難に対する有望な攻略として、次のアイデアを示している。 作るのではなく購入する: ソフトウェアを作るのが難しいなら、既製品を買って使えばよい。 ラピッドプロトタイピング: 要件を繰り返し抽出し、洗練させ、「何を作るか」を確かにする。 構築ではなく育成する: ソフトウェアを、一度作って終わりではなく、継続的に育ててくものと考える。 偉大なデザイナーを育てる: 偉大なデザインは偉大なデザイナーから生まれる。企業はコストをかけてデザイナーを育てるべき。 ブルックスがこれを書いたのは80年代だが、奇しくも現在、この4つの方針のうち最初の3つは、多くの開発組織において実践されており、ソフトウェア開発の問題に対するソフトウェアの外からのアプローチとして一般化している。その意味でブルックスは非常に優れた予言者だった。ただし4つ目のデザイナー(この場合は広義のソフトウェアデザイナー)育成の重要性については、まだ広く認識されているとは言えないが。 そのような意味で、ブルックスはかなり本質的な施策を持っていたことになる。しかしそれでもこれらは銀の弾には至らなかった。なぜなら、これらは依然としてソフトウェア開発の困難に関する解法であり、ソフトウェアが本有する問題自体はどこにも行かないからだ。 『オブジェクト指向UIデザイン』について 『オブジェクト指向UIデザイン ― 使いやすいソフトウェアの原理』では、OOUI のコンセプトを通じて、その身体的な意味と、精神的な意味で、ふたつの「転回」について書いている。 身体的な意味としての OOUI とは、知覚される表象として、タスクではなくオブジェクトをベースにUIを構成するということ。 […]