設計は名前のことだけ考えろ

ドゥルーズという学者は

哲学とは概念を創造することだ

と述べていますが、現代で「概念の創造」という仕事を最も行っている職種は哲学者ではなくてプログラマでしょう。辞書を引くとコンピュータ用語が多く出てきます。それだけ新しい概念が作られたということです。辞書に載っている単語はもはや専門用語ではなくて、説明なしに一般に使うことが許される言葉ですが、辞書に載っていない専門家の間で常用される用語はもっと多いです。計算機が発明されて以来、膨大な概念が発見・発明されてきました。新しい用語を作るのが仕事だと思われている業界なので、現在も日々新語が生まれています。

言語というのは強力な思考ツールで、概念を抽出し、名前をつけると、さも実体があるかのように認識できるようになります。計算機自体は物理的な実体がありますが、その上で動いているプログラムは物理的な実体がありません。人間がこれを認識するには、概念を整理して適当な名前をつけて言語化しなければなりません。システムを導入する業務に対しても同じことが言えるでしょう。業務も物理的な実体がないので、概念を創造しなければ認識できません。

概念の創造は「モデリング」と呼ばれる仕事です。これができないと、おかしなシステムやプログラムになってしまいます。分かってない人がわけわからずに作るのだから当然です。

モデリングを別の言い方で呼ぶと「名付け」です。正しいモデルには適当な名前を与えることができます。適当な名前は、概念を明らかに表し、表すものが広すぎも狭すぎもせず、冗長すぎずシンプルです。おかしな名前がついているときは、モデルがおかしいとみなすべきです。ネーミングセンスがないために気の利いた名前が付いていないことはありえますが、モデルを上手く表せない名前しか付けれない場合はモデルの方が間違っています。名前のないものは認識できないので、名前から概念を作っていかないと上手くいきません。

モデリング/名付けは、抽象的な思考でストレスがかかる作業であり、凝ろうと思えばとことん凝れるが手を抜くことも簡単にできてしまうので、易き流れて先に進めてしまいがちです。しかし、そこを踏ん張って十分に煮詰めた方が良いと思います。名前重要という格言がありますね。

ただ、モデリング/名付けは語彙力が必要であり、ものを知らない人がやっても、ないものは出てこない。できないものはどうしようもないので、現実的にできる範囲でやればよいでしょう。 type や class を kbn (区分) としてしまうのも仕方のないことだと思います。さすがに kbn は嫌だと思う良心のある人は、語彙力を鍛えていくべきでしょう。

まずは日本語の語彙。そもそも業務(ドメイン)の言葉が変だったりします。さきほどの区分を表す日本語はそれ以外にも、タイプ、クラス、分類、類別、類、型、種、級、いくつもでてきます。日頃から言葉に注意しなければ、語彙は増えない。あと辞書を引くこと。サラリーマンに学を求めるべきではないのかもしれませんが、サラリーマンに理解できないことの一つが誰も辞書を持ってないことです。

次に英単語。私が気に入っているのは Lingvist という楽天が提供している英単語学習サービスと、thesaurus つまり類語辞典です。thesaurus に関しても、どうして誰も持っていないのか理解できないです。type の類語として、class, kind, group, category, division があることを知っていて、それらがポンポン出てくる人なんていないはずです。

最後にプログラム特有の語彙。これは辞書に載っていないが、慣例化しているものがかなりあります。例えば、 push/pop。データが並んでいて、末尾にデータを追加する/末尾からデータを取り出すという意味だが、知らなければ読めないし書けない。他には、Builder という名前のクラスがあったとしても、デザインパターンを知らなければ、何をするためのクラスか分からないだろう。これらは辞書には載っていないので、知らなくても仕方はないと思うが、知らないからと怒り出さないようにはしたい。プログラマは世界に 1000 万人もいるので、プログラミングの用語の辞書には需要があるでしょう。

全ての言葉を覚えるなんて不可能ですが、名前が重要と気づいて、自分の語彙の幅が狭いと知ったならば、ちょっとは勉強した方が便利だと思います。