2007年07月09日

わかりやすい設計(実装)とは

神様なんて信じない僕らのためにというブログのそれはみんなの心の中にあるよという記事を読んで、ふと思ったことをひとつ。

この記事に、
実際どうやったら万人に理解がしやすいものができるだろうか?
という言葉が出てきます。
プログラムの設計の話です。

コンテンツ

  1. 暗黙の条件
  2. わかりやすいとは
  3. 設計がシンプル
  4. 全員が理解できる
  5. 「わかりやすい」は2つある

暗黙の条件

たとえば誰でもわかる、単純な一文を書いたとします。
「これはペンです」
みたいな。

でもこれ、日本語がわからない人には理解不能ですね。
「万人にとって理解しやすい」
という言葉の「万人」というのには、特定のコミュニティに属するという暗黙の条件がつきますよね。

また、母国語というのは、ほとんどの人が一定のレベルまで理解していますね。
そういう「一定のレベル」について、漠然としてて幅はあるものの、共通認識がある場合と、
オブジェクト指向みたいに理解度が人によって大きく異なるものでは「わかりやすい」の意味も違ってきます。

わかりやすいとは

国語の場合、たいていの人が理解できるというのが「わかりやすい」ということですね。
でも、オブジェクト指向みたいな場合、「設計がシンプル」であるという理想としての意味と、
開発チームという小コミュニティに注目し、そこにいる「全員が理解できる」という現実的な意味があります。
設計がシンプル
「設計がシンプル」というのは、オブジェクト指向の原則やデザインパターンなどの先人の知恵を駆使し、さらに自分の持てるテクニックをふんだんにつぎ込んで、はじめて成し遂げられることです。
原則というのは、言ってみれば最も基本的な文法規則のようなものです。
ボキャブラリは、アプリケーションが対象とする問題領域に出現するオブジェクトです。
ボキャブラリに含まれる単語というのは、単に文字や記号の羅列としてのコトバを意味するばかりでなく、それが表す概念も含んでいます。
デザインパターンなどのさまざまなパターンは、オブジェクトという単語を関連でつなげるフレーズです。

これらに対する知識が豊富であればあるほど、表現力が豊かになり、複雑な内容も簡潔に表すことができるようになります。
設計は簡潔な内容で豊富な概念を表現することができるようになり、技術者同士はコミュニケーションに最も効率的で確実な表現を使用することができるようになるでしょう。
コミュニケーションのオーバーヘッドとギャップが大幅に削減されるのです。
反面、これらを理解するには相応の知識が必要になります。
設計やコミュニケーションが高度化してパワーを増すほど、知識のない人にはちんぷんかんぷんになっていきます。
全員が理解できる
それに対して「全員が理解できる」というのは、はじめからつぎ込むテクニックに制限を加えているわけですから、理解するのも容易です。
そのかわり、簡潔でパワフルな表現が使用できないわけですから、設計もコミュニケーションもまわりくどく複雑になります。
たとえばシャープペンシルという言葉も、それが表す概念も知らない人に、それを説明するとしたらどうでしょう?
「鉛筆に似た形をしてて、お尻にあるボタンをカチカチ押すと、先っぽから芯が出て書けるようになるやつ」
「ボタンを押すと、芯が無限に出てくるの?」
「いやいや、あらかじめ芯を何本か入れとくの。で、ボタンを押すとそれが出てくるの」
「芯って、何本も入れられるんだ」
「うん」
「じゃあ、鉛筆に形は似てても、結構太いんだよね」
「いや、これの芯は鉛筆の芯よりずっと細いから」
なんて会話を毎回繰り広げなきゃならないとしたら、もううんざりですよね。
どれだけ説明したところで、正確に理解してもらえるとは思えませんし。

「わかりやすい」は2つある

上記の記事でおっしゃってる「様々な道しるべ」は、前者の「設計がシンプル」の方だと思います。
(冒頭に「目指すはSimplify。」とありますし)

でも、これが理想に近づけば近づくほど、コミュニティーに属していない人との溝が深まっていくという現実もあるということも、覚えておきたいですね。
会社であれば、その溝を埋めるのが採用や教育、そしてインセンティブ等も駆使した動機づけですね。
開発組織を高度化させるには、技術力を牽引する人たちをより高度化させる戦略と、後発の人たちをそれに追従させる戦略が両輪として機能する必要があるわけです。
posted by craftsman at 15:18 | 東京 ☁ | Comment(0) | TrackBack(0) | 雑草の雑想
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。

この記事へのトラックバック
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。