プログラムを組む時には、機能ブロックごとに、なるべく使い回しが利くように組んでいる。いろんなプログラムを作れば作るほど、使い回しの利くルーチンのストックが増えていく。
仕事の最中に他のプログラムを組んでみたりするのも、それはそれでサブルーチンを増やしていたりするので、完全に道草をくっているわけではないのだ(きっと……たぶん)。
逆に、1つのプログラムを組んでいるだけでは解決できなかったことが、全然違うプログラムを作る過程で解決されたりする。
以前に、誰もが認める伝説レベルのMacintoshプログラマーと話す機会があった。彼は、毎回変数やサブルーチンをすべてゼロから組み直すのだという。それを決める過程が一番楽しい、と語っていた。その超人的な実力に身震いがした。すごい人がいるもんだな〜、と心底感心した。
自分には、とうていそんなマネはできない。しかし、それを恥じる必要もない。自分にどういうスタイルが向いているか、という分析が自分なりにできていればよいのだ。
自分は、極力そういうシーンでは手を抜きたい性分である。ただし、地道にいろいろなルーチンの研究を行って、使い回せるルーチンのストックを増やす努力は行っている。楽をするためなら、地道に努力をしようという努力家タイプだ。天才肌というわけでは、決してない。毎日、いろいろと情報を分析して整理して検証を行うというのが基本スタイルだ。
伝説級の名人のように瞬発的に「ずがががががががががががががっ!」と新しくルーチンを組めるというわけではないので、コツコツ作りためて行くというタチである。ただし、一度組んだらなにがなんでも使い回す。
最近新たに作り始めたプログラムが、あっという間に1000行を超えた。使い回し用のライブラリが900行ぐらいあったので、そこに新規作成した分を追加したら、あっという間に1000行を超えたのだ。
などと書いていたら、さらにルーチンを使い回すための良い方法を思いついた。毎回、部品の名称を、
window "main"
とか、
window "peak_main"
などと手で書き換えていたのだが、これを今回、
window nameOfMainWindow
というふうに定数で指定することにした。至極当たり前の話だが、これも痛しかゆしで、プログラムの見通しが逆に悪くなったりする危険性をともなう。だいたい、使い回しスタイルが確立したので、抽象化してしまってよいだろう、ということなのであった。
ただ、これでも途中にボックスやタブビューがあったらオブジェクトの階層が変わってしまう。使い回しルーチンをいちいち書き換える必要が出てきてしまうわけだ。
ところが、プログラムの一番先頭でこれらのオブジェクトに対する参照をすべて変数に突っ込んでしまえば、ライブラリ側では毎回同様に変数を参照すればよいことになる。
準備段階でミスさえしなければ、非常に有効な生産性向上の手になるだろう。……そう、ミスさえしなければ(汗) 実はそれが一番あやしい部分なのであった。完璧と思える手法にも、ドロくさい部分に罠が潜んでいるものなのだった。