毎日コードを書くこと

ワザノバで紹介されていたKhan AcademyのJohn Resigが投稿した Write Code Every Dayの翻訳です。 訳がおかしいなどの指摘をいただけると大変助かります。


去年の秋、自分のプロジェクトのコーディングを始めたんだけど、あまり進捗がよくなくてKhan Academyの仕事の効率を犠牲にすることなしに作業をすすめる方法を見つけらずにいた。

自分のプロジェクトへの取り組み方にはいくつかの問題を抱えていた。 私は週末にプロジェクトに取り組むことを優先し、平日の夜は時々といった具合だった。 自分にとってはその戦略は効果的ではなかったことが今ではわかっている。 週末の間も仕事と同じくらいの高いクオリティでプロジェクトに取り掛かり完成させるという作業は信じられないほどのストレスだった。(そして、うまく行かなかったら失敗したような気分だった。) 週末にいつも予定が空いているという保証がないという問題もあった。 それに、週末に2日間ぶっ続けでプログラミングしたくはないのだ(リラックスする時間、なにか楽しいことをする時間がなくなってしまう)。

コードにとって一週間というのは長いという問題もある。 いとも簡単に自分が何をやっていて、何が途中だったか忘れてしまう(気にとめていたとしても同じだ)。 週末を一度逃してしまったら2週間分のギャップを埋めなければいけないのは言うまでもない。 2週間もあけてしまうとコンテキストスイッチは機能していない。(私自身、このようなやりかたで多くのプロジェクトが餓死してきたことを見てきている。) Jennifer Dewaltが昨年行った、180日間に180のウェブサイトを作るという偉業に感化されて、私も毎日自分のプロジェクトに取り組むという似たような戦略を取ることにした。

そこで以下のようなルールを決めた。

  1. ブログ記事を書いたりすることは、コードを書いた上でのプラスアルファでなければならない(まずコードを書き、余裕があればそれに加えて他のことをしてもよい)

  2. インデントの修正やコードの見た目の調整は(書いたコードに)含めない。可能であればリファクタリングも含めない(これらの全ては、日中の仕事でなければ許可されることだ)。

  3. 必ずコードは真夜中より早い時間に書かれること。

  4. コードはオープンソースとしてGithubにアップすること。

このルールは全部そうしなければいけないというわけでもない。 コードは一日の中で真夜中より早い時間に書かれなればならないという技術的な理由はないが、夜ふかししてずさんなコードを書くことを避けたかった。 コードはオープンソースにしなければいけないわけでも、GitHubにアップしなければいけないわけでもない。 ただこうすることで自分が書いているコードに対してより深く考えることができる。(再利用性のしやすさを考えたり、プロセスの早い段階でモジュールを作成することを決定したりするようになる)

このルールはとてもうまくいき、もう20週間近くやっている。 ここで伝えたいことはコードの書きかたがまるっきり変わったということと、生活と精神に大きな影響があったということだ。

f:id:snowlong:20140418230355j:plain

たくさんの興味深いことが、これらの習慣の変化によって私の精神にもたらされた。

最小限の活きたコード 自分にコードを書くのに少なくとも1日に30分は費やすように課した。 (意味のあるコードを短い時間で書くのは難しい、とくに前の日どこまでやったかを思い出さなきゃいけなかったときはね) 平日はなんとかクリアできたって日もあった(1時間がせいぜい)けど、週末は時々丸一日コードをかけることもあった。

習慣としてのコード 大事な事なんだけど、Githubのチャートの見栄えを気にしてるわけじゃないってことは覚えていて欲しい。 こんな考えはどっかやってしまうのが一番だ。 人生において自分のためになにをしたかということ重視するようになる変化であって、自分の仕事を誰かに認めてもらうためことを重視することではない。 ダイエットとかエクササイズなんかにも言えるけど、自分自身を向上させないことには、本当の意味での成功はない。

不安との戦い この習慣を行うようになる前は、完成度は”十分か”とか、進捗度は"十分か"といったことを心配するようになっていた。 (自分のプロジェクトに納期はないから、これらを相対的に計量化するのは難しいんだけど。) 進捗があるという感覚は、実際の進捗と同じくらい重要だと気づいた。 これは目を見張るような発見だったと思う。 毎日一貫して作業が進むようにしてしまえば、不安なんてものは溶けてなくなってしまった。 自分のやった仕事量に対して平穏な気持ちでいられたし、なんとしてでもすべての作業を終わらせなきゃという横暴とも言える欲求を持つこともなくなった。

週末 週末に作業をすすめることは絶対的に重要なものであった。 (自分のプロジェクトの作業に当てたのはだいたいこの時間だけだった) 今ではそれほど重要でなくなっているし、それはいいことだ。 私は週末に1週間分の達成すべきことを詰め込んできたが、残念な結果に終わってばかりだった。 すべての作業が全て終わることなんて滅多になかったし、作業をするために楽しみにしていた他の予定をキャンセルするはめにもなった。 (飲茶を食べたり、美術館を訪れたり、公園に行ったり、パートナーと過ごしたり、etc) 私は自分のプロジェクトは生活を排除してしまうほど重要なものでないと強く感じている。

バックグラウンド処理 毎日自分のプロジェクトのコードを書くことの面白い副作用は自分の現在のタスクが常に頭の中の裏側で走るようになることだ。 散歩に出かけたり、シャワーを浴びたり、何か脳みそを使わない活動をしている時ならいつでも、コーディングしようとする内容について考えているから、問題を解決するいい方法が見つかったりする。 これは一週間に一度とか一週間おきにコードを書く場合には起こらない。 その代わりに、他のタスクについて考えることに消費されたり、自分のプロジェクトの作業が進んでいないことの心配に置き換わったりする。

コンテキストスイッチ 自分のプロジェクトの作業を再開しようとするときには、コンテキストスイッチを切り替えるコストが生じてしまう。 一週間別のプロジェクトにかかりっきりの状態で自分のプロジェクトに切り替えるのはとんでもなく骨が折れる。 日々作業に取り組めば思い出す間隔が短くなるので、何をしていたか簡単に思い出せるようになる。

ワークバランス 起こった変化の中で最も重要な側面は、簡単に言ってしまえば仕事/生活/自分のプロジェクト のバランスのとり方について学んだことだ。 自分のプロジェクトに毎日取り組まなければならないということは、自分の時間のバランスをよいものにしなければいけないことがわかった。 夜外出し遅くまで戻らないスケジュールを組んでいる場合、次の日早起きしてKhan Academyの仕事の前に自分の自分のプロジェクトに取り組む必要がある。 さらに、自分の自分のプロジェクトの作業が未完成で、夜遅く帰路についた場合は急いで家に帰って残りを仕上げるようにする(代わりの日なんてないのだ)。 私は趣味に費やす時間が少なくなっている(版画とか)が、それは生きていく上で必要なトレードオフなのだと自分に言い聞かせている。

外向きの知覚 この習慣はコミュニケーションするのにとてもとても役に立った。 パートナーは私が毎日コードを書かなきゃいけないことを理解してくれて、スケジュールをあわせてくれたりもしてくれた。 そのおかげで「うん、でかけよう/映画を見に行こう。(出かけてもいいけど)あとでコードも書かないといけないんだよ」 と言えるようになったし、理解や考慮も得られやすくなってすごく快適だ。

どれだけコードを書いた? 過去数ヶ月の間に書いてきたコードの量は自分でも信じられないほどだ。 自分は2つのウェブサイトをつくったし、いくつかのフレームワークを書きなおしたし、新しいモジュールは数えきれないくらい作ったのだ。 たくさん書くともう自分が何を作ったかなんて忘れてしまうことがある。 数週間前の作業がもう遠い記憶のことのように思える。 そこで自分がやった仕事の量で自分を喜ばせるようにしている。

この習慣の変化は大きく成功したし、ずっと続けて行きたい。 そこで、私は自分のプロジェクトをやり遂げたい人にこのやり方をお勧めしたい。 (あなたがやってみて)このテクニックがうまく行ったか、あるいはうまく行かなかったか、教えて欲しい。 いろんな逸話が聞けるのをたのしみにしてるよ!

Hacker News でこの話題を議論する

元記事 Write Code Every Day


2014/4/19 頂いたコメントのご指摘通りに本文を編集しました。 id:a666666 さん 、id:t-wada さんありがとうございます!


2014/4/19 追記その2

頂いたコメントのご指摘より本文を編集しました。 id:bicycle1885 さんありがとうございます!