知識の局在化 2007/04/19

自分が現在関わっているお仕事しながら、考えたことです。

僕がやってるお仕事は、プログラムを書くことです。あるデータを別のデータに置き換えるといっても過言ではないと思います。データベースに格納されているデータをユーザがわかりやす状態にする。ユーザが入力したデータをデータベースも含めたストレージに格納するといった感じです。ずばり、データを変換して代入して、変換して代入しての繰り返しです。

よいコードというのは、このデータを変換して代入してのプロセスが明確になっているものなのかなぁとか考えています。データを変換するいろいろな条件をみて、変換して新しい変数に代入していく。その繰り返しのプロセスがすばやく理解しやすいコードがよいコードかなと。

僕はコードにたいして《難しい》という意味を二種類に分けて使います。ひとつめは、賞賛の気持ちをこめて。これはすごいとか、グレートとかという意味です。ふたつめは、完全にマイナスです。このコードを書いた人の《その場かぎりの対応》を揶揄しています。

自分の書いたコードにたいして難しいというのは、このマイナスの《難しい》という意味です。

最近気がついたのですが、このマイナスの《難しい》が発生する過程には《つじつまあわせ》がおきています。《つじつまあわせ》は、プログラムの成長過程にはつきものです。永続化されているデータは変更できないが、データの解釈を変えるために、変換コードを注入するということはしばしばおきます。仕様の矛盾(矛盾とまでいかなくても)に開発途中で気がつき、コードでその場限りのデータ変換を行ったりなどです。途中までintの型だったが、Objectで扱う必要がありキャストするというのも小さい《つじつまあわせ》だと思います。こういった《つじつまあわせ》を、僕は知識の局在化と呼んでいます。

知識の局在化が進むと、その書かかれたコードは書いた本人でもわかりづらくなります。

では、《知識の局在化》を防ぐためには何を行うとよいのでしょうか。コードレビューを行うのがいいのかなと思います。お恥ずかしい話ですが、僕の経験上、実はコードレビューをまともに行ったことがありません。あとコードレビューを行う際のルール、その場の雰囲気も重要になるかなと想像しています。コードレビューの場が《知識の局在化》の容認、再確認であるだけならもちろんだめですが。

: