jQueryの作者による「毎日コードを書く」習慣の効果と自分で半年やってみた感想
毎日コードを書くという習慣
jQueryの作者John Resig氏による「Write Code Every Day」というブログを読んだ。この記事は氏のブログの紹介と、自分もかつて半年ほどやっていたので軽い振り返りだ。
氏は、初めサイドプロジェクトで休日が消費され、しかもいいコードが書けなかった時の喪失感やプレッシャーを抱えていたそうだ。
ある日、Jennifer Dewalt氏が180日間もの間、毎日何らかのサイトを作るというプロジェクトを完遂したのに触発され、John Resig氏は毎日コードを書いてみようと決心した。
自分に4つのルールを課す
毎日コードを書くという取り組みのために、4つのルールを自分に課したとのこと。
- コードを毎日書く。ドキュメント、ブログやコードを追加すること
- 有用なコードを書く。インデントの修正やリファクタは加算しない
- 12時までに書くこと
- コードはGithubにアップしてOSSとすること
なるほど。これなら続きそうだ。3, 4は任意だが、夜遅くに雑なコードを書かないようにコードの質を意識するために入れたそうだ。
どのような効用があったか
この習慣を5ヶ月続けて、得た知見はざっとこんな感じらしい。
- 最小限で動くコードを書くようになった(Minimum viable code)
- 毎日進捗を生んでいるという感触を得たため、不安がなくなった(
the anxiety started to melt away
という表現が面白い) - 閃きの頻度が増えた(散歩やシャワーを浴びている時でも問題解決のいい方法を思いついた。これは週末にサイドプロジェクトをしていた時にはなかったそうだ)
- 毎日サイドプロジェクトのコードを読んでいるので、コンテキストスイッチのコストが減った
- 5ヶ月でいくつかWebサイトを作り、大量のnode moduleを作成した
中でも、**「過去数カ月間で自分が書いたコードの量が(あまりにも多すぎて)信じられない」**という感想が印象的だ。
驚くべきことに、John Resig氏の「毎日コードを書く」習慣は2013/11/23から2017/4/17まで3年半もの間続いている。氏のGithubアカウントのコミット履歴がその証拠だ。その意志の力に多大なるリスペクトを送りたい。
かつて自分も半年間やってみた
**実は私もかつて半年ほど「毎日コミットをする」ということをやってみたことがある。**その活動内容をまとめようとブログの下書きを作ってからもう1年がたってしまった。そのうち最後まで書いてして公開しよう。下書きを読み返して特に興味深いと感じた箇所を以下に抜粋する。
半年間のアウトプット内容
以下は、2018/10-2019/5の半年間のアウトプットの内容だ。プログラマ1年目の終わりから2年目の途中までだ。
- 10-12月中旬: 日本語ラップ好きのためのサイトHIPSTYの作成(Laravel・React・Material-UI・Nginx・MySQL)(現在は閉鎖した。初めてReactを触った)
- 12月下旬: 「Land of Lisp」(5章まで)、Reduxチュートリアルを1周。React Native FirebaseでHello, World。
- 1月: Elmチュートリアルを終えた後、Elmでポートフォリオサイトを作成(Elm・Tailwind CSS)
- 2月: Laravelでlaravel-mixを使わず、webpackを使ってTailwind CSSを導入するためのレポジトリLaravel-Tailwind CSS-Webpackの作成(初めてGithubスターを貰った)
- 3月: GatsbyJSチュートリアルを終える。自分の中国旅行のブログをWordPressからGatsbyJSに載せ替え、Netlifyでデプロイ。 **Rust Bookを一通り終える。**並行して「Google Apps ScriptでLINE Notify APIを動かしてみた(実装はTypescriptで)」をQiitaに投稿。
- 4月: Go言語のチュートリアル(Tour of Go)を終える。
Elmで作ったポートフォリオサイトは今でも自分のお気に入りだ。デザインは当時同じチームだったデザイナーさんにアドバイスを貰った。また、Tailwind CSSを2019年の頭にはもう使っており、その便利さは十分に理解していた。Tailwind CSSの存在は会社の先輩(もう退職してしまった)に教えてもらったのだ。最近Tailwind CSSの記事を書いた。
また、XServerで運用していたWordPressのブログサイトをGatsbyJS + Netlifyに載せ替えたのもこの頃だった。
そのほかはLispを触ったり、React Nativeを触ってみたり、Rust、Go言語を触ってみたりと、色々やっていたんだなと振り返っていて思う。
この時期(プログラマ1年目〜2年目半ば)は、業務で扱うPHP以外に何を学べばいいのかわからなかったため、興味のあるものに手当たり次第手を出していた。そうすることで、「自分は停滞しているのではないか」という不安を解消していた。
PHPだけでは生き残れないと思って個人開発でReactを使った結果、今では実務でReact/Next.jsを使ったフロントエンドの開発を任せて貰えるまでに至った。社内でも「パンダさんはフロント寄りの人だと思っている」というコメントをメンバーやマネージャーから貰っていた。上記の中では一番大きなリターンをもたらしてくれたトライだった。
また、このブログを立ち上げたのもこの時期だ。
6つのルールを自分に課す
このときルールを自分に課していた。
それは「GitHubに毎日コミットして、コミット履歴を埋める」というものです。方法はGitHubの自分のレポジトリに1日最低1コミットするだけ。ただし、あくまで自分の学習のためなので、以下のルールを設けました。
・ 1日最低1コミットでOK
・ プログラミング言語のコードを記述する
・ 仕事で書いたコードのコミットは除く
・ 設定ファイルの変更やREADMEはカウントしてOK
・ コードのフォーマットや改行などはカウントしない
・ チュートリアルは1章につき1コミット
1コミットでOKにしたのは、「人は少しのことなら格段に行動しやすくなる」という心理学の考え方を元にしているからです。人間は何かを始めることに対しては億劫になりがちですが、一度始めてしまえば容易に継続できます。
このルールはよかった。実際、机に座ってエディタを開いたら、コードを書き足したりリファクタリングする意欲が湧いてくる。そうなれば、あとは設計して手を動かすだけだ。
朝は「今日は何を書こうか」という意識から始まる。つまりそれは、「どのような課題を解決しようか」という問いと同じだ。問題意識を無意識下に追いやると、通勤中でも食事中でも脳はbackground taskとして処理を続ける。そして答えは右脳が教えてくれる。
また、この頃から、人が読まなくても自分が後で読むとわからないようなコードを書かないように意識していた。明日の自分はもはや他人である。ここからアプリケーションの設計に意識が向き始めた。
**そして設計方面の学習を続けた結果、最近MRのレビューでCleanな設計の視点からコメントを書いた時に、たまたまテックリードが自分のコメントを見てくれていて「とてもいいコメントをしますね」とフィードバックを貰えた。**これは努力の方向性が間違っていなかったことが確認できて安心したし、何より褒めて貰えたことが素直に嬉しかった。
毎日コミットするという習慣は半年で辞めてしまったが、今でも自分にリターンをもたらしてくれている。
まとめ
今日はブログを毎日書いて11日目だ。**正直、ブログに比べるとコードを書くほうがよっぽど楽だ。**コードはコンピュータに対する命令であり、プログラミングはコンピュータの力を引き出すことである。コーディングの上達はPCを自分がうまく操作できることであり、成長の実感があった。
しかし例えばブログがバズったり、SEOで流入数が増えたからといって、プログラミングスキルが上達したことにはならない(もちろん、モチベーションの維持と向上には繋がる)。
**なのになぜ自分が毎日ブログを書いているか。それは、かつて学んだこと、手元で試したことを再利用のために書き留めて置きたいからである。**個人開発で試したことを実務で本番環境に取り入れたことが何度もある。その時は、自分のGithubのレポジトリを参照して、「ああ、こう書いてたな」と思い出してた。
それをブログという、誰でも読みやすい形にリライトしているのだ。毎日ブログを書くのはキツいものがある(3〜6時間は取られる)一方、書きたいネタはまだたくさんある。React、Next.jsの使い心地、本の感想、チーム開発について、アジャイルと現場、プロダクトに対するオーナーシップなど。ただ、いつまで続くだろうか。それは自分にもわからない。
たとえ毎日ブログを書くのをやめたとしても、次は毎日コードを書く習慣を復活させているかな。
Happy Coding 🎉