はじめてのペアプログラミング

 昨日ペアプログラミングid:viver(frsyuki)さんとやってみたので、それについて書いてみます。
 MacBookにモニタとキーボードを接続し、ターミナル上のVimという環境でコーディングをしました。2人ともターミナルとVimを使った開発に慣れていることもあり、エディタなどの環境を調整する必要がありませんでした。実装していたのはJavaアプリケーションで、とりあえず動いていたものを快適に利用できるクオリティへ改善することを目的にモジュールの再設計と実装を行いました(シングルスレッドだったクラスをマルチスレッド化)。

取り決め + スタート

 2人ともペアプログラミングが初めてということで、「30分くらいで交代しよう、あとは適当で」といういい加減なルールでペアプログラミングを始めました。最初にコードを書いたのはfrsyukiさんから。ちなみにコードを書く人が「ドライバー」、隣で見る(ツッコミを入れる)人は「ナビゲーター」というらしいです。作業はしゃべりながら進め、クラス名に迷ったらあーだこーだ相談したりしていました。コーディングスタイルは「Javaだから名前はコブ付き(hogeClassNameのように小文字大文字)にしよう」という意見が一致し、コードの美的感覚が近かったのか、スタイルに関して意見の衝突はありませんでした。

コードを書くペースが1人より圧倒的に速い

 ペアを交代するごとに、TODO項目のどこをやるか決めてからとりかかりました。何を実装するのか2人で意識を共有しています。1人でコードを書いてると「次なんだっけ?」と考えることがありますが、隣に聞けばすぐ答えが返ってくるため、手を休める暇がありません。また、悩む回数が少ないわけではなくて、2人だと簡単な問題は一瞬で解決できてしまいます。
 ドライバーがコードを書いたり修正している間、ナビゲーターは次に何に取りかかればいいか考えることができます。それをドライバーに伝えることで素早いコーディングサイクルを実現することができます。

つっこみとつっこまれたー

  • 変数の宣言忘れの指摘(激しくキーを叩いているため、その勢いを殺さずに指摘するタイミングが難しい 笑)
  • コードのミス、変更し忘れたものなどの指摘
  • クラス設計、関数の引数順番、変数名の相談
  • 関数を呼ぶとき、引数の順番、変数名などを読み上げる(書く側はコード書くペースが落ちない!)

まとめ, 感想

 ペアの片方はコードを書くことができないため、ペアはなるべく同等のスキルを持った者同士で組むのが好ましいそうです。スキルが高い人の時間を奪いすぎると、教育の結果よりもその過程にコストが高くつくわけですね。今回の場合、スキルは「suma <= frsyuki」と等号を混ぜても怒られないとして、コードを書く速さは確実に「suma << frsyuki」でした。私の感覚では、私がコードを書いているはずなのに、むしろナビゲーターに操られているように感じました(笑)。背中を力強く後押ししてもらったおかげで、速いペースでコードを書けたように思います。
 ちなみにペアプログラミングで書いたコードは、一部ミスがありましたが、もう1人の開発メンバーのyasuharu君に見てもらってすぐに解決しました。ユニットテストは実施していませんが、簡単な修正ですぐ動く質の高いコードを書くことができたと思います。3人のメンバーで開発しており、流れはエクストリームプログラミングに近い感じです。ユニットテストやビルドの自動化などはできていません。

 他にも利点はいくつかあるようですが、Wikipediaとかエクストリームプログラミングをまとめたサイトを見るとわかりやすいかもしれません。
ペアプログラミング - Wikipedia

おまけ

 隣でコーディングを見ながら参考になったことをひとつ。

  • Vim の検索文字列のハイライトを活用する

 ハイライトに注目すれば、変数の宣言忘れ、名前を変更しなおした部分をすぐにチェックできます。利用がちょっと複雑なツールを使う必要がありません*1

*1:Javaのコード書いてるのにIDE使ってないなんて、というツッコミはなしで! 個人的にはNetBeans + jviが全然快適じゃないです。Visual Studio + ViEmu に慣れすぎでしょうか