昨年の9月にこんな記事をアップしていました。
それ以降も順調に続け、Write Code Everydayがついに1年継続しました!(本当に毎日ではないですけどね。。。
連続じゃないけどWrite Code Everyday始めて1年経った pic.twitter.com/1pk5cySqkH
— expa / Shu OGAWARA (@expajp) 2018年7月2日
ちなみに、仕事で書いたコードは含まれていません。純粋に業務外のコードで草生やしを続けました。
せっかくなので、振り返ってみたいと思います。
自分流のWrite Code Everyday
もともと、Write Code EverydayというのはJohn Resigという人が始めて広まったもので、彼はこのようなルールを設けているとのこと。
ブログ記事を書いたりすることは、コードを書いた上でのプラスアルファでなければならない(まずコードを書き、余裕があればそれに加えて他のことをしてもよい)
インデントの修正やコードの見た目の調整は(書いたコードに)含めない。可能であればリファクタリングも含めない(これらの全ては、日中の仕事でなければ許可されることだ)。
必ずコードは真夜中より早い時間に書かれること。
業務外のコードを書く時間がゼロに近かった者がこのハードルを超えるのはつらいので、ルールを以下の2点に絞りました。
上記さえ守っていればなんでもよい というグズグズのルールにしたため、
- リファクタリングはもちろんOK
- 23:55と0:05にそれぞれコミットして2日分
- 前日に2コミット分コードを書いて1コミットだけし、翌日寝る前に残りを1コミットに変える
- コミット内容がファイル作成のみ
- コミット内容がコメントにアルゴリズムを日本語で書くだけ
という、なかなかひどい内容ですが毎日続けることはほぼ守れました。
特に、2017/12/24から今日にいたるまでに草生やしに失敗したのは4月15日の1日だけで、もう習慣になっているといって差し支えないと思います。
いつなにをしててどうだったか
気合入れ期(2017/07-09)
- Project Eulerをひたすら解く
- 転職活動が終盤で、必死になってやっていた記憶
- この頃は問題の難易度が控えめだったので平均2日に1問くらいは解けてた
- 主に出勤の電車内で取り組む
中だるみ期(2017/10-11)
- Project Eulerを50問解答したため、10/03からRails Tutorialに突入
- 10/6が前職の最終出社だったため、10月はほとんど有給
- 仕事はないはずなのに、引越の準備・地元で恩師や友人に会う等々しているとコードを書くのを忘れる
- 明らかに転職が決まって気がゆるんでいる
- まだこの頃は習慣化できていない
キャパオーバー期(2017/11-2017/12)
- キャパオーバーに陥りコードを書くのを忘れる
- 11月1日から新しい職場
- 12月頭と1月頭に趣味でやってる合唱の演奏会でバタバタ
- 通勤経路を上手く設定できて朝晩に電車での「座って30分」を獲得したのに、読書と睡眠を優先する
- 内容はRails Tutorialを継続
安定期(2018/01-)
- 完全に習慣として定着し、草を生やし続ける
- その傍らでブログ、外部プレゼン、PM試験の勉強をこなせるように
- キャパが上がった、残業減った、収入増えた、新しい職場でのリズムを作れた
- 草を生やせなかった4/15は昼間から酒を飲む系のイベントで、イベント前に生やすのを忘れていた
- これ以降、昼間に酒を飲む前夜は0時超えてから1コミット確保するように
- 2/12にRails Tutorialを完走しProject Eulerに出戻り
- 51問目から再開し、現在96問目を解答中
よかったこと
コードを書くことが習慣化できた
最大はやっぱりこれです。
- アルゴリズムを考える
- コードを書く
- commitしてpushする
これを日常的に繰り返すことで、ボーッとしてるときに気付いたらアルゴリズムを考えてたり、次やることを考えてたりするようになりました。
提唱者のJohn Resig も
毎日自分のプロジェクトのコードを書くことの面白い副作用は自分の現在のタスクが常に頭の中の裏側で走るようになることだ。
散歩に出かけたり、シャワーを浴びたり、何か脳みそを使わない活動をしている時ならいつでも、コーディングしようとする内容について考えているから、問題を解決するいい方法が見つかったりする。
これは一週間に一度とか一週間おきにコードを書く場合には起こらない。
と言っていますが、これを「言葉」でなく「心」で理解できた!という感覚になりました。
逆に、
- コードを書く時間が取れそうにもないとき
- 手詰まりになって強引に進捗を出さないといけないとき
- 夜中近くになってまだコードを書いてないとき
はソワソワするようになりました。
泳ぎ続けないと死ぬマグロになってしまったので、これに乗じてしっかりウデを磨いて行こうと思います。
Rubyのマイナーなメソッドをたくさん知れた
数学の問題を解く都合上、Rubyのマイナーなメソッドをたくさん知ることができました。
Rubyは組込オブジェクトのメソッドが本当に豊富。「こういうメソッドないかな?」ってググると大抵あります。
Project Eulerをネタに勉強会で喋ったりすると、腕の立つ方でも「そのメソッド知らなかった」っておっしゃることがあります。
例えば、
- Array#each_cons(n)
[0, 1], [1, 2]...
のように、配列の要素をn個ずつ順繰りに取り出す
- Array#repeated_permutation(n)
- 元の配列から重複を許してn個取ってくる順列をすべて返す
- Date#sunday?
- 日付が日曜日かどうか調べる
などですね。
自己肯定感が上がった
不思議なもので、自分のやりたいことを自分で決めて努力すると、自己肯定感が上がります。
努力した結果が目に見える形で残っていくので、自分の行動にプライドが持てるんだと思います。
おかげさまでメンタルが非常に健康で、それに連動して身体の方もすこぶる健康です。
最近伸びてたツイートにこんなのがありましたが、
「教育ってなんだろう……?」
— Marina (@marina_mimicry) June 13, 2018
って思った時のまんが。#教育 #漫画 pic.twitter.com/TtzPKdDRnX
学校生活で今にフォーカスして、自分のやりたいことをやるっていう経験、あんまりないんですよね。
しかも他人の評価に晒され続けるので、豆腐メンタルマンは他人やら世間様やらの顔色ばかり伺うことになる。
これに引きずられたままだと、うっすら後悔したまま日々を過ごすことになるのでおすすめできません。
数学の問題を解くことで、頭がスッキリした
いま、めちゃくちゃ頭がスッキリしています。
この感覚を味わったのは2度目で、前回は大学受験が終わった直後。
毎日それなりの難易度の問題を解くアルゴリズムを考えてるので、受験生のように脳みそが活性化しているのかも。
ただの感覚なので根拠は全くないんですけど。
よくないこと
習慣づいたあとは変化を与えないと惰性になる
まさに今この状態です。
Project Eulerは残り500問以上あるし難易度はどんどん上がるので無限に解き続けることが可能です。
ので、完全に習慣として定着した今、新しいことを意図的に始めなければエンジニアとしての幅が広がらないです。
フェーズとしてはProject Eulerはそろそろやめるべき。
また、新しいことを始めようと思うとどうしてもまとまった時間が必要なので、それも意図的に確保しないといけません。
毎日15分とかで新しいことを始めるのは無理です。
ハンズオンイベントとか、開発合宿とかで上手く作れるとよさそう。
実装以外の勉強に時間を割きづらい
毎日コミットという制約から、GitHubにアップできるタイプのコードを書かなくてはいけません。
ので、設計・マネジメント・ハードウェア・ネットワーク・OS・ミドルウェア等々の勉強時間が奪われます。
Write Code Everydayの文脈でこれらを勉強するにはひと工夫必要ですが、初学者はその「ひと工夫」がわからない。。。
AWSの各種インスタンス, Heroku, Docker, CIツール等々の勉強の必要を感じてるのですが、二の足を踏んじゃっています。
どうしていきたいか
今後の行動としては、
- Project Eulerは100問で一旦打ち止め
- 次のネタはVue.jsのチュートリアル
- その傍らで個人開発サービスの設計を終わらせて、Vue.jsの次はそちらにシフト
- 個人開発サービスが出来上がったら保守運用の勉強のために草生やしを止めるかも
を予定してます。
個人開発サービスは9月の連休に一気に軌道に載せてしまいたい。
ビジホ一人開発合宿とか良いかも知れませんね。
まとめ
- 草生やし1年で完全に習慣として定着
- 基本はいいことづくめ
- 工夫しないと惰性になる
まあ、どこまで続くかわかりませんが、できる限りは続けていきたいですよね。
メンタルの健康にも良いことですし。