簡単な事柄もたくさん積み上げると手に負えなくなります。
プログラムは、読むより書くほうが簡単だそうです。
確かにそうかもしれません。
他人のコードの一部をコピペして、変数名やクラス名だけをちょろっと書き換えてつなぎ合わせていけば、なんとなく動くフランケンシュタインには命が宿るようです。
ですが、既存の実装の意味は誰も全体を理解しようしません。たぶん、理解できないのでしょう。そうして自分が修正する部分だけを近視眼的に眺めてエンバグするのです。
実際、ある実装についてその振る舞いを完全に理解することは不可能なのかもしれません。
ブロックひとつコード1行、関数1個ごとの振る舞いは単純ですが、それが10個20個と連なると途端に難しくなります。
単純なものをたくさん集めるとフクザツになることについて、私はコピー用紙を束ねる仕事のことを思い出します。
50枚くらいまでの用紙なら、両手でトントンすれば、簡単に綺麗に揃えることが出来ます。
ところがこれが100枚200枚、500枚になると、用紙同士がまるで糊で引っ付けたようになってしまい、うまくいきません。
途中であきらめて、数十枚ずつに分けて揃えてからひとつにまとめることになります。
あわててむりに500枚の紙の束と格闘すると、紙の端で指先を切って悲しい思いをしたりします。
500枚のコピー用紙のフクザツ性をカラダで知っている人は、配布資料の多量コピー作業などを安易に人に頼んだりしません。
それは専門の作業者がやるべきもので、片手間に出来るものでは本来無いからです。
1部25枚の資料を20部整えるには、たくさんの単純な作業を完全にこなす必要があります。
抜けはないか、印刷にかすれは無いか。ホチキスに失敗したら、印刷やり直しです。
プログラムを読むのもそれと同じことなのです。簡単な関数がたった10個ある。それでもう手に負えません。
一方プログラムを書くときには、実装しようとしている機能を実現するための連鎖を考えているだけです。
これを表現するとき、私は口下手なので、こんなたとえでしか表現することが出来ません。
プログラムを書くというのは、ヤキトリの串に順に具を指していく作業に似ています。誰にでも出来ます。
一方、プログラムを読む作業は、穴の明いた具の集団を眺めて、串に刺さった様子を思い浮かべるのに似ているのです。
さぁ串は何本だろう?
この対比を理解している人は、プログラマが優秀なリバースエンジニアになれるとは限らないことを理解するでしょう。
REとはライバル会社の製品を解析して富の源泉を盗み取ったり、マジコン開発者のエキサイティングな作業ばかりではありません。
会社の先輩が数年前に開発したシステムの機能追加をするときに新人にゆだねられる作業は、まぎれもないREなのです。
そしてその困難な仕事で右往左往する新人を指導する者にはさらなる困難が待ち受けているのです。
新人を指導させると指導者を訓練することになる理由も上記で説明することが出来ます。
コメント