【インターン】世界各地で開かれるmeetup、coderetreatに参加してみた

【インターン】世界各地で開かれるmeetup、coderetreatに参加してみた

こんにちは、インドインターン中の木下です。
日本はだんだんと肌寒くなってきたでしょうか、僕たちが現在住んでいるPuneはまだ半袖で十分過ごせるほど暖かく快適です。

さて、PuneにはたくさんのIT企業があり、それに伴ってか技術系のmeetupもたくさん開催されています。そして先日の10/22にcoderetreatというイベントが開かれておりこちらに参加してきました。今回はこちらの様子を紹介したいと思います。

coderetreatとは??

img_20161023_105128_s-1coderetreatとはコーディングの上達を目的とした短期集中型のイベントです。
基本的には二人一組でペアを作り、出題されるコーディング課題をパートナーと協力して解いたり実装する、いわゆるペアコーディングと呼ばれる形式です。

そして他のイベントと違って特徴的なのは、何か具体的なプログラムを作り上げることが目的ではなく、あくまでコーディングのレベルを上げることが主な狙いだということです。そのため必ずしもプログラムをある水準まで完成させなければならないといったノルマのようなものはありません。そういう意味では幅広いレベルの開発者を対象としたイベントと言えるのではないでしょうか。

そして今年の10/22はGlobal Day of Coderetreatとされており世界各国様々な場所で同様のイベントが開かれていました。取り組む問題はどこの開催地でも同じなので世界中のエンジニアが同時に共通の問題に取り組むということになり、これもまた面白いですね。

コンウェイのライフゲーム

今回取り組んだ問題は「コンウェイのライフゲーム」と呼ばれるものです。とりあえず説明よりも見た方がイメージ湧きやすいので例をお見せします。

pulsator gospers_glider_gun

ピクセルが忙しなく変化を続けていますが、実はこれ裏で動いているアルゴリズムは非常に単純です。
これらの動画は各ピクセルに注目して、

  1. 現時点でのピクセルの色(黒なのか白なのか)
  2. 隣り合わせになっている黒ピクセルの数

この二つのポイントのみによって次のピクセルの色が決定されています。(詳しくはこちら
今回与えられた課題は、このアルゴリズムをパートナーと議論を交わしながら実装していくというものでした。

ペアコーディング、ディスカッションスタート!

今回扱ったこの問題、理論自体はそれほど難しいものではありません。
しかし問題はあくまで題材に過ぎず、いざこれを実装しようと議論を始めるとなかなか止まりません。関数はどこまで機能を分割して実装するか、テストケースはどのようなものにするか、アルゴリズムを可視化させるにはどうしようか、などなどです。

img_20161023_105136_s-1そして実際に議論してみると想像していた以上に想定しているプログラムの構造や構築手順が自分とパートナーでは異なることに驚きました。

自分は普段の実装では、大体の関数の仕様と全体の構成を決めた後はいきなり実装を始めてしまうのですが、特に普段システムの構築を普段されているようなエンジニアの方であれば、バグを防ぐために関数一つ一つに対して丁寧に単体テストを繰り返してから次の実装に移るなどの工夫をされている方が多かったのがとても印象的でした。

僕自身は単体テストについてほとんど何も知らなかったため、その考え方やノウハウが目から鱗でいい勉強をさせていただきました。(そのことと僕の未熟な英語が合間ってパートナーに質問責めしてしまい、非常に迷惑かけましたが、、)

パートナーチェンジ、再びペアワーク

そして1セッション45分が終了するとパートナーチェンジして、再度議論と実装を繰り返しました。
いろんなバックグラウンドの方がこのイベントに参加されていたため使用するプログラミング言語ももちろんそれぞれ違います。

C#、java、objective-C、swift、jsなど、自分にとってあまりなじみのない言語でのコーディングを目の当たりにするのはとても新鮮でしたし、勉強になることが多く感じられました。
自分は普段pythonをメインに使っていますが、今回の会場では逆にpythonを使っている人はほとんどいなかったように感じられます。

なので、僕がpythonでコーディングしている時はパートナーの人が食い入るように僕のコーディングを見ていたので、pythonエンジニアの代表のような感覚にもなりました(笑)。

振り返って見て

今回は5回ほどのセッションを通し、パートナーと議論、実装を繰り返してきましたが、結局アルゴリズムの実装はできたものの、それを上記の画像のように実際に可視化させたりするところまで実装することができなかったのが自分としては少し悔やまれました。今回のような即興で何かをコーディングする場合、特に可視化などにおいてはすぐに実装できるようにライブラリを使いこなせる状態にしておくなど日頃からの準備が大切だなと感じました

また今回の僕にとっては単一テストの実装方法がそうであるように、独学だけでは見逃してしまうこともあるような知識などをいろんな人から学ぶことができるいい機会にもなると思います。特にこのcoderetreatは特定のタスクが決まってなくコーディングの上達が目的であるため、非常に情報交換が行いやすいイベントのように感じられました。

coderetreatは日本でも開催されているので是非参加されてはいかがでしょうか?