プログラマが知るべき97のこと/ハードワークは報われない

プログラマという仕事は、時に、懸命に働いても意味がない、ということがあります。長時間オフィスにいれば、プロジェクトに多大な貢献をしているような錯覚に陥ることもあるし、同僚たちもそう思ってくれることがあります。しかし事実はまったく逆で、自分の働く時間や労力を減らせば減らすほど、プロジェクトへの貢献は大きくなると言えるのです。ときには、頑張って働くよりも、働かずに済む努力をした方が、はるかに大きな貢献ができることもあります。神経を集中させる時間、製品を産み出すのに使う時間が週に30時間を超えるようなら「自分は働き過ぎだ」と考えるべきでしょう。自分のかけている労力を減らすことを検討する必要があります。もっと効率的に働く方法、少ない労力と時間で多くを生み出す方法を探さなくてはならないということです。

一見してこれは直感に反する話なので、異を唱える人もいるでしょう。しかし、プログラミング、ソフトウェア開発という仕事の特性を考えれば、なぜこのように言えるかがわかります。プログラミング、ソフトウェア開発は、取り組みながら絶えず学ぶということが出来る仕事です。仕事をすればするほど、問題領域についての理解は深まり、同じ目的を達するために必要な労力と時間は徐々に減っていきます。仕事が効率化されるのです。自分の仕事にどんな無駄があるかを常に観察し、その結果を後の仕事に反映させていけば、着実な効率化がはかれます。

プログラミングのプロの仕事は「舗装された道路を、あらかじめ定められたゴール地点めざして猛烈に走る」というようなものではありません。ソフトウェア開発プロジェクトは通常、オリエンテーリングをしながらマラソンをするようなものです。しかも走るのは時間で、頼みにするのは、大雑把な地図だけです。一方向に闇雲に、しかもすごいスピードで走れば、感心してくれる人はいるでしょう。しかしそれでプロジェクトが成功するわけではありません。第一、後先を考えずに走って途中でペースが極端に落ちることがあっては困ります。一定のペースで走りながら、自分の現在地と向かっている方向を常に確認し、コースを絶えず微調整していくことが大事なのです。

学ぶのは特定のプロジェクトについてだけではありません。ソフトウェア開発や、プログラミング技術全般についてもずっと勉強を続ける必要があります。勉強の手段は様々です。本を読むのもいいでしょうし、カンファレンスへの参加や、他のプログラマとの情報交換なども役立ちます。新たな実装テクニックを試したり、作業の効率化に役立ちそうなツールを探したり、使い方を調べるといったことも大事でしょう。脳外科医や航空機のパイロットと同じく、プロのプログラマなら、知識と技術の研鑽を怠ってはならないのです。それには主に、帰宅後や休日などの時間を利用することになります。会社の仕事で夜遅くまで、残っていたり、休日出勤をしたりしていたりすると、それができなくなります。 脳外科医が週60時間も執刀していたとして、そんな医者にかかりたいと思うでしょうか? かかりたい人はいないはずです。プロには、備えるための時間、知識と技術を高める時間がどうしても必要なのです。

仕事には長い時間を掛けず、集中して短い時間で終わらせるように心がける。より効率的な問題解決方法を探す努力を常にする。プロジェクトに貢献するというのはそういうことです。技術力を向上させ、自分の行動パターンを振り返り、改善に努めることも、プロジェクトにとってプラスになるでしょう。決して、ケージの中のハムスターのように、ただその場で車輪を回転させているだけ、というような仕事をすべきではありません。そんなことをすれば、自分自身とプログラマという職業を貶めることになります。プロのプログラマが週60時間、ずっと神経を集中させてひたすらコードを書き続けるというのは、とても賢明なこととは言えないでしょう。プロはただ、がむしゃらに働けばいいというものではありません。プロの仕事には、入念な準備と効率化のための努力、そして日々の反省と絶え間ない変化が必要なのです。