Global Day of Coderetreat 2018 in Osaka に参加してきたよ

こんにちはyoichi22です。coderetreatをご存知でしょうか?小さいけど小さ過ぎないサイズの一つの課題(コンウェイのライフゲーム)を、完成させることのプレッシャーから解放された状況で、作っては捨て、ペアとやり方を変えてまた作っては捨てるを繰り返す、プログラマ向けの一日がかりのワークショップです。一年に一度、同じ日に世界中でcoderetreatを開催するGlobal Day of Coderetreat というイベントがあったので初参加してきました。

connpass.com

仕事でのプログラミングとの違い

普段私がやっているシステム開発の仕事でも、答を知らない問いに立ち向かうので、試しに作ってみて壊して作り直すという事はそれなりにやっていると思っていました。しかしcoderetreatにおいては、

  • 書いたコードを本当に捨てる。記憶にある知識は使ってよいが、コードを見返すことはしない
  • 視点、やり方を変える事にこだわる。時間がきたら先に進むのではなくスタートに戻る
  • 一度や二度じゃなく同じものを三回、四回と作り直す

といった点が仕事でのプログラミングと異なっていると感じました。コードを捨てて振り出しに戻って何かをちょっと変えてやり直すことで、どういうコードを組み上げるか、どうやってコードを組み上げるかという過程の部分での様々な選択を、プログラミングの練習として楽しみながら体験できました。

私が特に面白いと感じたのは「if文の使用禁止」「配列の使用禁止」という、制約条件を加えてやってみたターンでした。プログラミング言語は当然備えていて、普通に実装するなら使うであろう機能を禁止したらどういうことになるかを実際にそれぞれ試してみて、出来たコードは当然ながら「仕事でこれ書いたら怒られるやつ」って感じになったのですが、制約を守るように解を見つけるパズルの要素を楽しめたのと、制約を加えたことで構成要素の役割分担が変わって、ある処理はとても面倒になったものの、もう一つの別の処理がとてもすっきり書けてしまうという発見がありました。この発見は極限まで制約で振り切ったことで得られたものであり、中途半端なやり方では得られなかっただろうと思いました。

自習でのプログラミングとの違い

普段プログラミングの自習(リハビリ?)で CheckiO をやっているのですが、それと比較した場合にも大きな違いがありました。ライフゲームを作るという課題は、小さいものの一気に作れるほど小さすぎないため、中間のゴールを自ら決めて進めることになります。一方CheckiOの課題では、最初にテストコードが与えられるので、それをパスするように「どう書くか」だけに集中します。coderetreatでは「何を書くか」という中間ゴールを自ら設定した上で書いていくので、書けたあとになってそのゴール設定が間違ってたということもあり得て、本当にその先に真のゴールがあるのか若干の不安を持ちつつも、進まないことには何もわからないので、えいやと進んでみる。そういう意味ではただのプログラミングの練習ではなく、チームでの仮説検証の過程の練習の側面もあると感じました。進んでみた結果、うまくいって次のステップが見えることもあれば、戻って別の手でやり直す事もあり、いずれにせよ時間がとても限られてるので急いで次の手を考えて、やってを繰り返す。短時間のセッションで非常にエキサイティングな体験ができました。

ごはん

開始時点からおかしとコーヒーが豊富に供給されていて、疲れたり眠気に襲われたときに救われました。 参加者からお金を取らない、ピザよりも豪華なランチを用意する、などがcoderetreatのレギュレーションとして存在しているとのことです。 お昼ご飯はお寿司を頂きました!カニ美味しかった!

スポンサーの各社さんと準備運営をしてくれた皆様には感謝です。すごく楽しめました!