[全員対象]コードリトリートのすゝめ　〜プログラマーのスキル向上への道〜

# [全員対象]コードリトリートのすゝめ　〜プログラマーのスキル向上への道〜

## はじめに

コードリトリート（CodeRetreat）というイベントを知ってますか？？
初めて聞くよって人が多いと思いますが、
コードリトリートとは、プログラマーのスキル向上を目的に世界各地で定期的に実施されているイベントです。

先日、自分もコードリトリートのイベントに参加させて頂きまして、普段業務では触らないような言語や開発手法を学ばさせていただきました！

久しぶりにエンジニアとして、技術力が向上したんじゃないか？？と感じることができました。

この記事では、コードリトリートの紹介と、活用方法を紹介して、コードリトリートを広めていきたいと思います。

## コードリトリートとは？

改めて、コードリトリートの紹介。

コードリトリート（CodeRetreat）とは、プログラマーのスキル向上を目的に世界各地で定期的に実施されているイベントです。
特徴としては、

* ペアプログラミングで進めて開発する
* 開発言語、開発手法、ツールは自由
* 45分で1セッション、複数回（通常は6回ほど）繰り返す
* 毎回ペアは変わる
* セッションが終わったら、書いたコードはrm
という特徴があります。

何をテーマにペアプログラミングして進めていくかは、そのときのイベントによって変わると思いますが、
結構テーマにされやすいのが、**「コンウェイのライフゲーム」**です。

[ライフゲームとは？](https://ja.wikipedia.org/wiki/%E3%83%A9%E3%82%A4%E3%83%95%E3%82%B2%E3%83%BC%E3%83%A0)
※ こちらはwikipediaを参照ください。
※ Googleで「ライフゲーム」と検索すると面白いですよ。

ちなみに、コードリトリートを開催するには、参加者に対して**「参加費無料！」「お昼ごはん無料！」「ドリンク無料！」「おやつ無料！」**をしないといけないというレギュレーションがあります。
なので、コードリトリートは、企業の協賛によって上記のものが無料になります！
*（プログラマーがスキルを向上するために、貴重な時間を使っているのに、プログラマーの成果によって稼いでいる企業がしっかりと協賛してくれます。）*

参加するプログラマーは、無料で1日スキル向上に集中することができるという仕組みになってます。

## よくあるスケジュール

コードリトリートでは、複数回45分のセッションを繰り返すため、下記のようなスケジュールになると思います。

| 時間    |       内容 | 
|:-----------------|:------------|
| 9:00 - 9:45   | ペアプロ #1 |
| 9:45 - 10:00  | 振り返り＆休憩 |                                                                                                                                      
| 10:00 - 10:45 | ペアプロ #2 |
| 10:45 - 11:00 | 振り返り＆休憩 |
| 11:00 - 11:45 | ペアプロ #3 |
| 11:45 - 12:00 | 振り返り＆休憩 |
| 12:00 - 13:00 | お昼ごはん |
| 13:00 - 13:45 | ペアプロ #4 |
| 13:45 - 14:00 | 振り返り＆休憩 |
| 14:00 - 14:45 | ペアプロ #5 |
| 14:45 - 15:00 | 振り返り＆休憩 |
| 15:00 - 15:30 | おやつタイム |
| 15:30 - 16:15 | ペアプロ #6 |
| 16:15 - 16:30 | 振り返り＆休憩 |
| 16:30 - 17:15 | ペアプロ #7 |
| 17:15 - 17:30 | 振り返り＆休憩 |

大体このようなスケジュールで、時と場合によっては、朝の時間が遅かったり、夜が早く終わったりします。
正直、かなり集中するので、めちゃくちゃ疲れます！

## 実際にやってみた感想

### ペアプロ1
**＜やったこと＞**
アルゴリズムの理解、言語はJavaScript、やったことないフレームワークjestで開発

**＜振り返り＞**
相手の実装方針を知ることで、自分の思ってもみなかった実装方法を知ることができました。
新しいフレームワークのチャレンジはとてもとっかかりとしては貴重。

### ペアプロ2
**＜やったこと＞**
アルゴリズムの説明、言語はPHP

**＜振り返り＞**
自分が理解したアルゴリズムを図を用いて説明することで、相手へ伝わるように説明する難しさがわかりました。
ちゃんと設計しないと、コードを書いている途中で不都合が起きたり、大幅な書き直しがあり非効率になることが改めて体感できました。

### ペアプロ3
**＜やったこと＞**
言語はRuby、TDDで開発

**＜振り返り＞**自分は普段からテストを書かないので、TDDを教えていただきました。
TDDは最初にテストを小さく作って、エラーを出して解決していくという流れで、最終的にはプログラムのロジックや機能が全部完成して動いているという流れだった。
普段テストを書かない自分では、とても貴重な学びだった。

### ペアプロ4
**＜やったこと＞**
言語はRuby、TDDで開発

**＜振り返り＞**
今度は、さっき知ったばかりのTDDを自分がコーダーになって実施した。
しかし、自分で設計しながら、テスト書きながらやると、さっきまで理解できてたはずのことが全然できなかった・・
見るより、書いて覚えることで成長するんだなと実感しました。

### ペアプロ5
**＜やったこと＞**
言語はRuby、TDDで開発

**＜振り返り＞**
最後もTDD開発でしたが、テストとしてRSpecをつかって開発しました。
先程つかったテストモジュールがRubyの標準で入っていたテストモジュールだったんで、RSpecよりもテストはシンプルでしたが、RSpecだと細かくテストが書くことができ、とても便利でした。

### 全体
総合として、自分がやったことないことを多く学ぶ機会になりました。
学びのきっかけとてしてはとても有効だし、相手の思考や考え方を教えてもらい、自分ではかんがえれなかったことも共有できるところは素晴らしいです。

あと、お昼とデザート、お菓子飲み物が無料なのはとてもありがたかったです！
ごちそうさまです！

## コードリトリート活用方法

### ケース①　社内教育として利用する
社内でエンジニアやっていると、おもったよりも普段の業務が忙しくて既存の言語やフレームワーク、手法しか使わなくなってしまい、
自分の技術向上の時間をしっかりと取ることが少なくなってしまうと思います・・

そこで、コードリトリートを利用して、社内で一週間に一回（もしくは隔週）とかで、コードリトリートDayみたいな日を作り、
数人で集まってセッション2、3回でやるといいかなと思います。
もし業務時間内に時間が取れなければ、業務後に集まってやってもいいと思います！

その時に、新しい言語やフレームワーク、開発手法を利用してコードリトリートで行うことで、
強制的に知らない言語等を触る機会を作ることができます！
普段業務で触らない言語って、自分だけで勉強するのに作るのは結構たいへんですしね・・
（みんなでやれば怖くない！）
また、アルゴリズムが単純なので、その言語のベストプラクティスを知りながらコーディングができたりします。

あと、**新卒教育**にも有効だと思います。
先輩が新卒に付いて、設計のやりかたやコーディングのやり方を教えて上げることもできます。
逆に、新卒の人にコードをかいてもらい、それをレビューして教えることも可能です！

### ケース②　採用時のテストに導入する

本来のコードリトリートのレギュレーションから少し外れてしまいますが、
ペアプロをやることで、相手のコードを書くときの癖ややり方を近くで見て感じれると思います。
お題は「ライフゲーム」で、45分1セッション勝負！
正直、完成しなくても、そのプロセスを見ることでその人のスキルレベルがある程度わかると思います。

## まとめ

結局、何が言いたいかというと、是非コードリトリートに皆さんも参加（もしくは主催）してほしいです！
実際にやるとわかりますが、本当にスキルアップに繋がると思います！
ただし、めちゃくちゃ疲れます！！

社外でコードリトリートやるときは、きちんと協賛企業の方々に敬意と感謝の心を持って参加してあげてください！