読者です 読者をやめる 読者になる 読者になる

Programming log - Shindo200

イベント参加記録とプログラミング系の雑記

Ruby でペアプロしてみた

先日、@tendon0 さんとペアプロしてきました。

急なお願いに付き合ってくださって、ありがとうございました!

 

ペアプロの動機とお誘い】

普段は一人で何か勉強していることが多いですが、一人で勉強するよりも何人か集まって意見を交換しながら勉強したほうが身に付きやすいです。ただ、何人か集まって勉強したくても、大抵の人(特にぼっち技術者)は人の集め方が分からなくて諦めてしまいます。「人の集まる勉強会を探す」という解決策が浮かびますが、もっと手軽に、気になっている人に、好きなタイミングで誘うことが出来れば幸せになれそうです。気軽で、好きなタイミングで誘うのに良いツールって何だろう。そう考えたときに浮かんだのが Twitter でした。

東京ruby会議10で知り合って、気になっていた @tendon0 さんに「ペアプロしてみたい!」とツイートして誘ってみました。Twitter で気軽にペアプロのお誘いをするのは、僕が夢見るソーシャルコーディングの姿だったので、OKをもらえて嬉しかったです。

 

【お題】

@tendon0 さんは初めてのペアプロでしたので、定番の FizzBuzz とボウリングスコア計算の二つをペアプロ問題として用意しました。

f:id:Shindo_Masaya:20130305010615j:plain

FizzBuzz問題ペアプロの流れを掴んで、ボウリングスコア計算でいろいろ意見を交換しながら進められれば良いなと思っていました。FizzBuzz問題は実装するのは簡単ですが、「メソッド名を何にするか」など、ぼちぼち意見を交換できるところがあったので、ペアプロの練習問題として良かったと思います。

ボウリングスコア計算問題では、配列に入っている各フレームのスコアを足していく処理に each メソッドを使っていたのですが、配列の値を足していくだけならば inject メソッドがあるので、inject 使ってコードをリファクタリングしていきました。また、最初は9フレーム目と10フレーム目のスコア計算を、他のフレームとは違う処理で計算していたのですが、番兵を使う事で9フレーム目を8フレーム目までと同じ実装で処理することができるようになりました。できたコードは github に push しました。

 

ペアプロの流れ】

コーダーとナビゲーターはだいたい1つメソッドを作るごとに交代してました。時間を測って交代するやり方もあるみたいですが、僕は1メソッド作るごとに交代する方が良い雰囲気が作りやすくて好きです。

雰囲気は「車窓からのTDD」みたいな感じだったと思います。

「車窓からのTDD」ペアプロやったことない人でもペアプロのイメージがしやすくなる良い資料だと思います。この資料を先に紹介しておくべきでした。これからペアプロ始める人は読んでおくと良いと思います。ちなみに、この資料でフェイクという方法が紹介されていますが、これをやるかどうかは悩みどころです。親切だけど時間がかかるから、僕はやらないことが多いです。

 

【テスト】

「今から何を実装するのか」という目標を明確にするために、テストファーストで進めてみました。目標が決まっているとコミュニケーションが取りやすいので、テストファーストで進めて良かったと思います。

「入力の型チェックを行うべきか?」とか「どこまで細かくテストするか」とか、テストについて悩んだ部分があり、そのあたりはパートナーと相談して進めていきました。何をテストすべきかは、ペアプロしていていつも悩みますが、Rails勉強会@東京「テストにこだわり過ぎない」「プログラマが気になる部分を重点にテストする」という話を聞いたことがあるので、パートナーとコミュニケーションを取りながら、テストすべきことを決めていくのが良いのではないかと感じています。

 f:id:Shindo_Masaya:20130205020911j:plain

 

【まとめ】

・人と一緒に勉強したほうが、意見交換できて捗るし、楽しい。

・ボウリングスコア計算問題は初めてペアプロするのに良い問題だった。

ペアプロ初心者がペアプロのイメージを掴むには、「車窓からのTDD」を読むのがオススメ。

ペアプロテストファーストの相性は良い。