プログラミングの生産性を上げるには

  1. Yak Shaving の誘惑に打ち克つ
    • ソフトウェアを作っている途中で、「これを作るのを効率化するためには ○○ が必要だ」と思い、本来やっていた作業の手を止めて ○○ を作り始めてしまうことは往々にしてある。
    • しかしその作り上げた ○○ が最終的に本当に(長期的にみて)効率化に役立ったケースは、自分の経験からいって 10 個のうち 1 つくらいではないかと思う。
    • 効率化のための努力をするなということではない。大事なのは、アイデアを寝かせることだ。
    • 人はゴミみたいなアイデアでも、気付かずにこれこそが素晴らしいアイデアだと信じこんでしまう。自分の考えたアイデアには愛着が湧くものだ。
    • そのアイデアが本当に優れているかどうか客観的に判断するには時間が必要だ。最低でも 1 晩、できればもう 2, 3 度は同じ必要性を感じてから作るのがいい。 1 回しか必要性を感じたことのないものをその場の勢いで作ると、それに費やした時間はほとんどの確率で無意味なものとなる。
  2. 実装する前に作ろうとしているものをレビューしてもらう
    • 実装もテストも完成させて pull request を出したら根本の設計が誤っていることを指摘され(あるいは途中で自分で気付き)、大幅な手戻りをした経験のある人は多いのではないかと思う。
    • これを防ぐためには、設計が完了した時点で、コードがなくても(むしろコードを書き始める前から)誰かにレビューを受けることが大事なのではないかと思う。
    • あるいは最初にテストだけ書いて見てもらうのも良いかもしれない。
  3. 優れたプロダクトのアイデアを考える
    • どれだけ頑張ってコードを書いても、ユーザーに使ってもらわなければ、コードを書くのに費やした莫大な時間の全てが無意味と化すという緊張感を持って、エンジニアもプロダクトのアイデアを真剣に考えるべきだ。
    • サービスをクローズすることになっても、企画屋はあなたがコードを書くのに費やした時間を返してはくれない。
  4. 働き過ぎるのをやめる
    • 働く時間が長いことに慣れてしまうと、だんだん価値観が狂ってくる。効率的な方法を探さなくなってゆく。
    • 時間の制約があるからこそ、真剣に効率化の方法を考えるようになり、努力に値するものと値しないものの判断がつくようになる。
    • 長時間働き過ぎていたら、その判断は下せなくなる。つまらない細部に執着して時間を無駄にしてはいけない。
  5. 夜更かしの誘惑に打ち勝つ
    • 夜は静かで、人の邪魔も入りにくい。ついついあなたはコードを書く手を止められず、夜更かしをしてしまう。
    • 夜遅くなると「ハイ」になり、働いているような気分になる。けれどもそれは気分だけ。
    • だが、翌朝になってみたら昨晩 3 時間費やしたバグが 5 分で潰せた、ということも珍しくないだろう。
    • どんなにキリが悪いように思えても、日付が変わるまでに寝るべきだ。
  6. 学ぶ
    • 「人はつねに、学べばわかるより良い方法よりも、慣れてしまったより悪い方法を使うことを好む。 — ルソー」

これらは全て自分自身の失敗から得た教訓だ。偉そうに書いているが、僕自身もこれが全てできるわけではない。むしろできていないことが多々あるからこそ、忘れる事のないようにここに書き残した。

他の人の考えも聞きたい。