プログラマが知るべき97のこと/プロのプログラマとは?
プロのプログラマとは、どういう人のことでしょうか。
プロフェッショナルなプログラマの最大の特徴は「自分が責任を取る」という態度、責任感です。プロのプログラマは、まず自分のキャリアに責任を持ちます。責任の取れないような見積りやスケジューリングは決してせず、作る製品の質にも責任を持ちます。ミスがあれば、必ず自ら対応します。他人に責任を押しつけるようなことは一切しない、それがプロです。
- キャリアに責任を持つというのは、自分の力で自分の価値を高め、成長していくということです。自分の意志で新たな知識と技術を習得し、常に最先端にいられる努力をするのです。プログラマに教育を受けさせるのは雇っている会社の責任だと考えている人も多いようですが、それは残念ながら完全に間違いです。他の仕事、たとえば医師や弁護士のことを考えてみてもわかるでしょう。彼らは誰かが自分に教育を受けさせてくれるなどとは考えません。彼らは仕事が終わった後や休みの日に、自費を使い自らの意志で学会誌や判例を読むなりして勉強をしているのです。そうやって自力で最新の知識を得ているのです。プロのプログラマも同じことをすべきでしょう。プログラマと会社との間の関係は雇用契約書に明記されているはずです。それを見れば、なぜ自分が会社から給料をもらえるのかがわかるでしょう。プログラマは良い仕事をすると約束をしたから、その見返りに給料の支払いが約束されているのです。
- プロのプログラマは、自分の書いたコードに責任を持ちます。間違いなく正しく動くと確認できるまではリリースをしません。正しく動くかどうか確信のないコードをリリースしてしまう人をプロとは呼べません。当然のことです。プロのプログラマは品質保証(QA)チームに問題を見つけてもらおうとは考えません。徹底的にテストをし、「絶対にもう問題など見つかるはずはない」と思えるまで、コードをQAには回さないのです。もちろん人間のすることなので、それでもQAでは何か問題が見つかることになりますが、それは仕方のないことです。重要なのは、何も問題が見つからないよう努力する姿勢です。まさにそれがプロの姿勢なのです。
- プロのプログラマはチームプレイヤーです。一人一人が自分の仕事だけでなく、チーム全体のアウトプットに責任を持ちます。互いに助け合い、互いに学び合い、足りないところは補い合います。チームメイトが何か失敗したときには、誰かがカバーします。いつか必ず自分が逆にカバーしてもらうことになると知っているのです。
- プ口のプログラマは、バグリストが一定以上の規模にならないよう、常に注意を怠りません。バグリストが長大になってしまうのは怠惰の表れです。問題追跡システムに記録されるバグの数が何千にも及んでしまうのはまさに悲劇ですが、そうなってしまうのは、開発に携わる人間があまりにも不注意だからです。実のところ、そういう問題追跡システムを必要とすること自体が、プログラマが怠惰であることの証拠とも言えるのです。よほど巨大なプロジェクトでもない限り、問題追跡システムは実は必要ないのです。巨大プロジェクトならばバグ数が増えて管理を自動化することもあるでしょうが、それ以外に問題追跡システムが必要になることはまずあり得ません。
- プロのプログラマは、絶対に、間に合わせのいい加減な仕事はしません。自分の誇りにかけて、美しく、完壁な製品を作ろうとします。余分な部分のない「きれいな」コード、構造化されたコード、読みやすいコードを書くよう常にこころがけます。業界標準やベストプラクティスは確実に守ります。決してあわてて仕事に取り組むようなことはありません。たとえば、あなたがもし、心臓切開手術を受けるとします。そしてその様子を幽体離脱して上から見ているとします。医師に与えられた時間は限られています。他の仕事と違い、締め切り(deadline)を過ぎてしまえば、文字通りあなたは死んで(dead)しまいます。人工心肺を装着した状態で長時間経過すると、血球の損傷が激しくなるからです。こういう時あなたが患者なら、医師にはどう行動して欲しいでしょうか。納期に追われるプログラマのような行動を望みますか。「とにかく時間内に終わればよい」というようないい加減な仕事をして欲しいですか。あるいは「今、ちょっと治せないので、後にします」などと言って欲しいですか。やはり、時間の無い中でも平常心を保ち、その時にでき得る最善の処置をして欲しいと思うのではないでしょうか。間に合わせの仕事ではなく、プロの仕事をして欲しいと思うはずです。
プロであるということは、責任を負うということです。自分のキャリアにも、製品の質にも責任を負います。製品の質に責任を負うということは、無駄がなく、動作も正しいコードを常に書き続けるということです。たとえ納期に追われて余裕がなくなった時でも、決して手を披くことなく、最善の努力を尽くして良い製品を作るということです。