Katsuyaのひとりごと。

怠惰で短期で傲慢なつぶやきを

Global Day of Coderetreat 2023 参加記〜forとifがなくてもライフゲームは実装できる!〜

 

イベント概要

tddyyx.connpass.com

↑こちらのイベントに参加してきました。

Coderetreat(コードリトリート)とは、ソフトウェア設計と開発の基礎に焦点を当て、丸一日かけて集中的に練習することを目的としたプログラマのためのイベントです。"retreat"には「避難所」「保養所」といった意味合いがあり、「期限内に完成させなければならない」というプレッシャーから離れて純粋にプログラミングや設計を練習することに集中できます。

11/3, 4は世界中でこのCoderetreatが行われます。(世界各地の開催場所は以下のサイトで確認できます!)

www.coderetreat.org

 

当日の流れ

09:00 - 09:30 開場

09:30 - 10:00 趣旨説明、準備

10:00 - 11:00 セッション#1

11:00 - 12:00 セッション#2

12:00 - 13:00 ランチ

13:00 - 14:00 セッション#3

14:00 - 15:00 セッション#4

15:00 - 15:30 おやつ

15:30 - 16:30 セッション#5

16:30 - 17:30 セッション#6

17:30 - 18:00 クロージング

全体説明を受けている様子

くじ引きでペアを組み、45分間ガーッと実装し、15分間休みつつふりかえりをしつつ次のペアを決める。これをひたすら繰り返します。

予め決まっているルールは以下の4つのみです。

  • 45分のタイムボックスを守る
  • お題はライフゲーム
  • 使うプログラミング言語はペアで決める
  • 用意されたアクティビティリスト(小さな制約)から1つ選んで取り入れても入れなくても良い

ja.m.wikipedia.org

 

当日その場でメモを取るのを忘れていたのでうろ覚えのところがありますが、私が参加させていただいたペアはだいたい↓こんな感じです。(使用言語 - アクティビティ)

  1. Java - 5分交代でペアプロ
    • まずはライフゲームのルールの1つである「誕生」を実装すべく、タイマーを設定して交代しながら実装しました。1セッション目だったのもあり、全然終わる気がしなかったですが、達成感はものすごくありました。
  2. TypeScript - 1人がテストを書き1人がコードを書くTDD
    • TypeScriptのコンソール出力で手間取ってしまい、実装完了はおろかTDDもできていませんでした笑。が、ペアで困難を乗り越えてルールを実装できた時は嬉しかったです。
  3. Python - for文禁止
    • まず一通りライフゲームを実装しきった後に、8近傍の生存セルを数える処理からfor文を消すリファクタリングをしました。Pythonだとスライスとmapを駆使することで実現できました。
  4. TypeScript - if文禁止
    • ライフゲームを愚直に実装すると、①フィールドの境界値判定と②4つのルール判定の分岐にif文やswitch分が現れるのですが、①はトーラスにする(剰余演算でフィールドの端っこを繋げてしまう)のと②は配列の"生存セルの個数番目"に次のセルの状態を保持することで実現できました。
  5. Ruby - マウス使用禁止
    • ペアの両方ともVimキーバインドに慣れていることもあって、そんなに苦労せずすんなりと実装することができました。(ときどき無意識にタッチパッドを触ってしまいましたが笑。)
  6. Python - 絶対完成させる!
    • ペア組んでくださった方がこれまでのセッションでアクティビティに全力投球しすぎてまだライフゲームの完成に至っておらず、とにかく完成させることを目標にしたいという意思を伝えてくださったので、完成を最優先目標にして取り組みました。こうした意思表示をしてくださったことにすごくリスペクトを感じましたし、私もそれに全力で応えようと思いました。時間ギリギリでライフゲームの4つのルールを全部実装できたので、めちゃくちゃ嬉しかったです!

ペアに分かれて45分間ライフゲームを実装する!

15分の休憩時間に直前のセッションのふりかえりをする

ふりかえりボード(Fun Done Learn)

お昼に提供いただいたハンバーガーとクラムチャウダー

美味しかったです!

参加して得られた学び

  • セッションごとに違う言語で実装することもあり、必ずしも自分が慣れ親しんでる言語で実装するわけではないので、お互いに情報を噛み砕きつつ、でも置いてけぼりにしないようなペースで進める必要があります。そのため、かなりコミュニケーション能力が問われるなぁ〜と思いました。
  • お互い知ってるお題で知ってる言語だとしても、進め方の違いも出てきます。いろいろな考え方があることを学べますし、勇気と信頼を持って部分的にタイピングの主導権を委譲することで、自分が想定していなかった成果が得られると思いました。
  • 3, 4セッション目はお題に慣れてきたのもあってやや難しめのアクティビティ(for文やif文禁止)を取り入れたのですが、最初はできるか不安しかなかったところからペア間の閃きをうまく融合させてなんとか制約下での実装を実現することができました。ゲームの完成よりも制約下で実装できることを実証するほうに重きをおいて一部の実装を諦める方針にしようと最初に合意したうえでちゃんと達成できたのが良かったです。お題はあくまでお題であって、ペアで楽しく実装することが一番の目標!

 

次のアクション

今回のイベントは自分自身ももちろん大いに楽しめましたし、知り合いにこうしたイベントの楽しさを共有できたので、とても満足のいく1日でした。普段の仕事だとなかなか楽しさに振り切ったプログラミングはできないので、積極的に同僚とかを誘って参加したいと思いました!