人月の神話メモChapter4
第四章
貴族政治、民主政治、そしてシステムデザイン
この偉大な境界は比類のない芸術作品です。そこに示された協議には、無味乾燥なところも混迷したところもありません…
これは様式の極致、先達らの成功のすべてを理解し、吸収した芸術家たちの作品です。彼らは当時の技術を完璧に習得していながら、それをひけらかしたり、必要以上に巧みな技を使うことはありませんでした。
建物の外観を立案したのはまぎれもなくジャン・ド・オルベイズですが、その構想は少なくとも本質的な部分に関して後継者たちから尊重されています。そのためにこの建築物には並外れた一貫性と統一性が見られるのです。
ランス大聖堂ガイドブックより
プログラミングシステムにはコンセプトの統一性が大事である。
- コンセプトの統一性は、どのようにして実現するのか。
- この議論には、アーキテクトという「エリート」または「貴族階級」と、創造的才能やアイデアが抑制された「平民」の実現者の存在が、ほのめかされてはいないか。
プログラミングシステムの目的=コンピューターを使いやすくすること
- 使いやすくなったの定義
- (昨日の指定で節約できた時間)が(マニュアルを勉強したり、記憶したり、調べたりすることにかかる時間)を上回ったとき
- 使いやすくするためには
- システムの機能数が適切である
- システムの操作が簡潔である
- システムの操作が直感的である
- システムの操作を直感的にするのは難しい
- そもそも直感的なシステムとは
- 複雑な処理を行う際の慣用的なコマンドの組み合わせがユーザの頭の中にすぐに思い浮かぶシステム
- システムの操作が直感的であるためには?
- 語義(基本コマンド)それぞれが同じ重みを持つようにする
- 構文(基本コマンドの組み合わせ)の構造が同じ文法で表せるようにする
- では、「直感的なシステム」を作るには?
- システムのデザイン(コンセプト)を一人もしくは少数の人間で作ればよい
現実のプロジェクトで使いやすいシステムを作るには
アーキテクチャとインプリメンテーションを慎重に分離する
時計の場合
アーキテクチャ | ねじを回して針を現在時刻にあわせる。針が文字盤を指したところが現在時刻 |
インプリメンテーション | 振り子を使って針を進める・ゼンマイを使って針を進める・クォーツとステップモーターを使って針を進める・・・ |
- プログラミングシステムのアーキテクチャとは?
- 実装者から見ればUIについての完全かつ詳細な仕様書
- 利用者から見れば一番詳細なマニュアル
アーキテクトだけがアーキテクチャを決めるべきである。
- アーキテクトだけが良いアイデアを持っているというつもりはない
- 実現者や利用者から良いアイデアや新鮮なコンセプトが出てくるのはよくあること
- しかし、システムの使いやすさにとって「直感性」=「統一されたコンセプト」は命
- そのためシステムの基本的コンセプトと相容れない優れた機能やアイデアは除外すべきである
- そういう機能やアイデアがたくさんあるようならコンセプトの方が間違っているので基本コンセプトからやり直す
民主的にアーキテクチャを決めると……
貴族政治擁護の立場
少人数のアーキテクトチームでシステムの外部仕様を書こうとする場合に想定される想定問答
- そういう仕様書には機能が多すぎて、現実的なコストの検討がされない
- 実際に起こりうる問題
- 第5章で述べる
- アーキテクトが創造的楽しみを独占して、実装者の創意工夫が閉め出されてしまう
- 妄想
- インプリメンテーションも同等の創造的活動である
- 仕様書がアーキテクトという細い管を通ってくる間多くの実装者がただ漫然と待っていなくてはならない
- 妄想
- 一番良いのは仕様書が完成するまで実装者を雇わないこと
- 実装者を雇った場合でもしなければならないことはいろいろある
- 大人数でシステムのデザインをするよりも時間がかかるのでは?
- 経験からいって、システムのデザインにかかる時間は同じ
- インプリメンテーションやテストの時間は、コンセプトが統一されていた方が遙かに短くてすむ