作った途端に忘れるのが優秀なプログラマ | それゆけ西表島

作った途端に忘れるのが優秀なプログラマ

優秀なプログラマは大規模なソフトウェアも作れる。普通のプログラマはある程度の規模以上のプログラムを作ると破綻してしまう。この違いはなんだろうか。

小規模なプログラムが作れる人は、大規模なプログラムも作れそうである。仕組みは何も違いがないし、建築物みたいに大きいと自重で沈むとかそんなことを考える必要がないからだ。

根本的な違いは、全体を把握しているかどうかである。普通のプログラマは、自分の理解できる規模を超えると、途端に前に進めなくなる。この関数はなんだったかなと思い出し直しては開発し、また忘れて、ということを繰り返すからである。

それなりに記憶力のある人は、ある程度の規模までは自力でプログラミングできてしまうため、大規模な案件を任せたら火があがるという罠があったりする。

優秀なプログラマは記憶力が抜群にいいから大規模でも問題ないのだろうと思われるかもしれないがそうではない。優秀なプログラマはプログラムの中で何が大事で何が大事でないかをよく知っている。そのため、自分で作ったプログラムも作った時点で忘れてしまうことが出来る。要するにモジュール化、ライブラリ化が上手ということだ。

中のロジックは作っている時は一生懸命考えているが、作り終わった後は、入力に対して結果がどうなるかだけ覚えていれば、中身は綺麗さっぱり忘れてしまう。

バグがあれば直すことになるが、その時は他人が作ったプログラムを見るのと同じ過程を辿ることになる。以前作ったけど覚えていないという状況はいかにも駄目プログラマのようだが、実際は忘れてしまえるからこそ大規模なプログラムのコントロールができるのだ。

ある意味、仕掛中なのか、もう終わったのかということである。何度も何度も同じプログラムの手直しをしているという状況は、ずっと仕掛中だということだ。手を入れなくてすむ場所と触りつづける場所を分離して、手を入れなくてすむ場所については、完全に切り出して終わらせてしまうことができるかどうかが、優秀かどうかの境目ということなのかもしれない。

忘れる以上は、その後バグなんて出している場合ではない。そのために忘れる前にテストである。もう一生そのプログラムに触らないつもりでテストしないと、忘れたくてもそう簡単に忘れられない。

優秀なプログラマは本当に必要な箇所だけを意識して、それ以外は忘れる。理屈で考えるととても当たり前のように見えてなかなか難しい。それが出来るようになれば、一人前のプログラマといえるのではないだろうか。