僕がつくる社会心理学実験のためのコンピュータ・プログラムでは、非常に多くのフォームが使われている。ひどい場合20以上にもなる。ログイン画面、実験インストラクション表示画面、確認問題場面、練習画面、実験刺激提示画面、回答場面、エラー通知画面、フィードバック画面、質問画面、ちょっと待っててね画面、これだけでも10になる。これらは、基本的には重なることなく、1つ1つ順番に画面いっぱいに広がることになる。
考えてみると、昨今の多くのソフトウエアはこういう作りになっていない。メインの入力画面とメインの出力画面があって、あと補助的な設定を行う画面がある程度である(こういう補助的なウィンドウはメインの画面の上に重なって表示される)。
ここで難しいのは、複数のフォームで共通して用いられる変数の扱いである。実験参加者が操作する画面は次々に移り変わっていくから、プログラムの主導権を握る(?)フォームも次々と移り変わっていく。しかし、どんな変数もプログラム全体として保持しておきたい。これを手っ取り早く実現するのは全ての変数をグローバル変数にしてしまうというやり方だが、もちろんこんなやり方は通用しない(1970年代にプログラミングを身につけたうちの親分はいまだにこれをやれというので困る)。これは頭の良い人が1人で作業する場合にだけうまくいくやり方だ。プログラマが直感的に把握できるコードの量は約3000行だと聞いたことがある。素人の作る心理学実験プログラムと言えど(素人がつくるからかもしれないが)、僕の書いているプログラムは、実験参加者用のプログラムとそれらの同期と情報の管理を行うプログラムをあわせると4000行を越える。僕が直感的に把握できる量を越えているのだ。
コンピュータプログラム全体を適切にプログラム部品に分割していくのは重要なスキルだ。ずっとそれを学びたいと思っているのだが、試行錯誤でやっているので一向に進歩しない。特に、プログラムが大きくなってくると、親分関数と下っ端関数の間に中間管理職みたいな関数を設けざるを得なくなってくるのだが、このときに誰にどの程度の権限を与えるかという問題にいつも頭を悩ませることになる。
これはプログラム全体の設計の問題、関数の設計の問題なのだが、いつも必ず失敗して頭を抱える。今ふと思いついたのは、デザインパターンの勉強をしてみようかということだ。デザインパターンって、クラス間の権限の委譲のうまいやり方をパターン化したものではないかと思うからだ。違うかもしれないけれど。