プログラマが知るべき97のこと/「人間」を知る

ソフトウェア開発のプロジェクトでは、よほど小規模なプロジェクトは別にして、必ず人と人とが共に仕事をすることになります。研究などでは稀にソフトウェアを作ることそのものが目的ということもありますが、ほとんどのソフトウェアは、誰かの目標達成を手助けするために書かれます。つまり、人は、人とともに、そして人のためにソフトウェアを書くというわけです。ソフトウェア開発は「人のビジネス」なのです。それにもかかわらず、プログラマが人との関わりについて教育を受けることは、残念なことにほとんどありません。幸い役立つ学問分野もあるので目を向けてみることにしましょう。

たとえば、ルートヴィヒ・ウィトゲンシュタインは「哲学探究」などの著書の中で、「私たちが互いに話をする際には言語を使うが、私たちの頭の中にある思考や発想、画像などが、そのまま言語に変換されて他人の頭に送られるわけではない」という主旨のことを言っています。開発するソフトウェアの要件を顧客に確認する際に、十分注意が必要な理由の一部は、少なくともここにあるのでしょう。ウィトゲンシュタインはまた、私たちがお互いに理解し合うためには、「定義の共有」ではなく、「経験の共有」が必要だと言っていました。生きていく中で得た経験に共通する部分がないと理解し合えないというわけです。ソフトウェア開発の場合、問題領域に関して経験のあるプログラマの方が、経験のないプログラマよりも良い仕事をすることが多いですが、そうなる理由もそれでわかるでしょう。

ジョージ・レイコフとマーク・ジョンソンは著書「レトリックと人生」の中で、言語は大部分が比喩的なもので、その比喩により、私たちが世界をどのように見ているかがわかるということを述べています。金融の世界でよく聞かれる言葉に「キャッシユフロー」というのがありますが、このような具体的事象を指す言葉にも、やはり比喩的な部分はあります。「フロー(flow : 流れ)」という言い方をするからには、お金を液体のように捉えている、ということになるからです。この比喩によって、お金を扱うシステムに対する私たちの見方がわかります。また、ソフトウェアの世界の、「プロトコルのスタック」「レイヤー」といった言い方や、「ハイレベル」「ローレベル」といった言い方にも同じようなことが言えます。こういう言い方をすると、ユーザを「上」、コンピュータやソフトウェアを「下」とみなすことになるからです。私たちがシステムの構造に対してどう考えているかが、こうした言葉からわかるのです。このように物事をいくつかの層に分割して捉えると理解が容易になることがあるため、人間はよくそういうことをします。

マルテイン・ハイデガーは、「道具(ツール)」というものに人間がどう関わるかを詳しく考察しました。プログラマの場合は、ツールを自ら作ることもあり、使うこともあります。以前に作られたツールを改良することもあれば、同様のツールを新たに作り直すこともあります。プログラマは、ツールには強い関心を持ちます。しかしユーザはどうでしょうか。ハイデガーが著書「存在と時間」で言っているとおり、道具というものはそれを使う人間にのみ理解できる存在です。使わない人間にとっては目に見えない存在なのです。ユーザにとってツールは、正しく機能しなくなってはじめて関心を持つものかもしれません。ツールの使い勝手などについて話し合う際には、こうしたプログラマとユーザの意識の「ずれ」を念頭に置いておくべきでしょう。

私たちの思想、世界観には、いまだにアリストテレスの影響が強く残っています。アリストテレスのように物事を分類して考える習慣がいまだに残っているのです。エレノア・ロッシュは、それを覆そうとしました。プログラマは、システムを構築する際にユーザに要望を尋ねます。そのときプログラマがやろうとするのもやはり、アリストテレス的な「分類」です。ユーザの話を聞き、求められていることを明確な定義を基にカテゴリに分けるのです。そうするのがプログラマにとって非常に便利だからです。この方法を採ると、ユーザの話に出てきた言葉をそのままクラスの属性にしたり、テーブルのカラムにしたりできます。各要素がきれいに分かれた、理路整然としたプログラムができあがります。しかし困ったことに、生物としての人間は、元来そのように世界を認識していないのです。エレノア・ロッシュは、そのことを「ナチュラルカテゴリー」の研究やその後の研究を通じて明らかにしています。人間は、「例」に基づいて物事を理解します。例の中でも、特に「プロトタイプ」と呼ばれるものは、他よりも優勢で大きな影響力を持ちます。このような例に基づく分類は、暖昧で、要素の重複の多いものになり、各カテゴリーは豊かな内部構造を持つことになります。「アリストテレス的」な答えを求めている限り、私たちはユーザに対して、妥当な問いを発することができないのです。ユーザの物の捉え方と相容れないからです。そのため、共通理解を得るのに大変な苦労を強いられることになります。