46-すべきことは常に明確に

プログラマが知るべき97のこと」の46個目のエピソードは、仕事の進め方に関する話です。特に仕事でプログラミングをしている人にとって非常に有用なエピソードで、きのこ本の中でも特に感銘を受けました。
プログラミングに限ることではありませんが、仕事をどのように効率良く行っていくかは重要なテーマです。仕事を始めて間もない人は、自分が何をやったらばいいか右も左も解りません。先輩から細分化されたタスクを割り当てられ、ある程度の経験を積んでいくことで小さなタスクとしての仕事は出来るようになります*1。そして、次のステップとして全体を俯瞰してみることが出来る事が求められます。残念なことに、このステップに進めないで成長が止まる人も多いのが事実であり、チームリーダーなどチームを統括するポジションにつく人のみが全体を俯瞰できているのが現実でしょう。すると、仕事の進め方として、全体を俯瞰できる人がWBSなどを使い細かいタスクに分割していき、それをチームメンバーに割り当てながら仕事を進めていく方法が取られます。つまり、全体を俯瞰して見る事の出来ればプログラマとしてプロジェクトを回すための十分なスキルなのです。少なくとも自分はそう思っていました。
ですが、このエピソードでは全体を俯瞰できるのは当たり前で、その中で自分が何をすべきかを明確にするのがプロの仕事として語られています。プログラミングならではのやり方かと思いますが、ある時間で出来なかったならば破棄するという方法を提案しています。実際に開発をしていて煮詰まったとき、そこまで書いたコードを破棄するには相当の勇気が必要です。苦労して書いたコードであればなおさら、それを破棄して作り直したくないと思うのは当然です。しかし、本当に詰んだときにコードを破棄して書き直すことは珍しいことではありません。そして、詰まるまでに蓄積された思考まだは破棄されないので、作り直してみたら意外に簡単に片付いたということもよくあります。ですが、破棄するための判断基準が難しく、破棄した方が良いかもしれないけどもう少し頑張ってみようとなるのです。
このエピソードではそんなジレンマに関して解決策を教えて貰いました。それは時間です。何をするかを決めたならばそのタスクを完了するための期限を決めるのです。その期限を越えそうであれば、その時点で破棄を判断します。もしくはタスクの作業時間の再見積や細分化をします。時間で区切ることにより、客観的な基準を設定するのです。

大事なのは、常に自分が何をすればいいを明確にするということです。完了する期限も必ず決めます。もし、期限内に予定の作業が終わらないようであれば、その間に書いたコード、コードに加えた変更はすべて破棄します。再度、小目標を立て直して作業内容を検討し、はじめからやり直すのです。

時間を区切って仕事をする事といえば、アジャイル系の開発におけるタイムボックスが思い浮かびますね。

プログラマが知るべき97のこと

プログラマが知るべき97のこと

*1:ペアプロを導入すればこの部分はもっと効率化できます