ケロSE

ケロいSEが日々思う事を書きます

ペアプログラミングのやり方

この所ペアプログラミングをする機会が多く、よりよくペアプロするコツってなんだろうな〜と考えた内容を整理しようかと。

 

ペアプログラミングについて書かれた書籍というと、こちら。

ペアプログラミング―エンジニアとしての指南書

ペアプログラミング―エンジニアとしての指南書

  • 作者: ローリーウィリアムズ,ロバートケスラー,Laurie Williams,Robert Kessler,長瀬嘉秀,今野睦,テクノロジックアート
  • 出版社/メーカー: ピアソンエデュケーション
  • 発売日: 2003/03
  • メディア: 単行本
  • 購入: 6人 クリック: 36回
  • この商品を含むブログ (29件) を見る
 

 ま た ピ ア ソ ン (´Д⊂ヽ 。こちらの書籍には有能なペアプログラマの7つの習慣という章があります。「よりよくペアプロするコツ」に近しいものがあると思うので習慣部分だけを抜き出します。(こういうのってどこまでブログに書いていいものなのだろう)

  1. 休憩を取る
  2. 謙虚になる
  3. 自信を持つ・受容性に富む
  4. コミュニケーション
  5. 耳を傾ける
  6. チームのメンバになる
  7. 妥協と主張のバランスを磨く

と、ここまでは先達の有益な知識。 ここからは私の考えを整理する為の妄想になります。

ペアプログラミングって何?

1つのプログラムを、2人ペアで共同開発すること。ペアはドライバーとナビゲータの2つの役割を適宜交代して、開発を進めていきます。

ドライバーは、キーボードを操作して直近の課題を解決するコードを書く役割。

ナビゲータは、ドライバーが書いているコードが適切なものかをチェックする役割。

 

ペアプログラミングを始める前の心構え
  • 相手へのリスペクトを持つ
  • 自分へのリスペクトも持つ

「俺の方が圧倒的にすごいんだから、俺にだけコードを書かかせろ!」とか「相手のxxさんはすごい人だから、あの人の言う事に従おう...」は、1人がプログラミングしているのをもう1人が眺めているだけになっちゃうのでペアプロの旨みがないです。

ペアプロは、パートナからリアルタイムにフィードバックが得られる事に旨みがあるので、萎縮することなく自分の意見を言い、相手の言う事を聴く気持ちが必要です。

 

ペアプログラミングを始める時
  • パートナとの挨拶
  • ドライバ・ナビゲータの入れ替えタイミングを決める
  • コードを共有する為のリポジトリを作る

パートナとの挨拶は、さっき書いた心構えを再確認する為にもきちんと。「よろしくおねがいします」の気持ちを持ってペアプログラミングを始めるのが良いかと。

入れ替えタイミングは、開発がリズムに乗ってきて熱中しちゃうと自分がずっとドライバやってた、というのがあるので、事前に決めておくと良いです。目に見える交代契機(時間単位で交代とか、1つのテストケースを満たす実装を作ったら交代とか)にするとわかりやすいです。

コードを共有する為のリポジトリを作る目的は2つあります。まずは、リポジトリ本来の目的であるコードの共有です。TDDでは適宜リファクタリングもしていくので、安全に作業をすすめる為に、きちんと作業を記録するのが大事。もう1つはお互いに慣れた開発環境で開発をするためです。1台のマシンだと、OSからキーボード配列から様々な好みが違っていると開発効率が落ちてしまう(最悪宗教戦争に発展する)ので。

 

ペアプログラミングを行う(ドライバ編)
  • 自分がこれから何をするかをナビゲータに「宣言する」
  • 目の前の課題解決に集中する

何をするかを宣言するのは、ナビゲータの方が「この進路で間違ってないよね?」を考えやすくする為です。この宣言があるとナビゲータの方から有益なフィードバックが得られやすくなるはず。「このテストケースをパスするように、テスト対象クラスにxxxのような変更を加えます」とか。

目の前の課題解決に集中するのは、キーボードを持っている自分が「やります」と宣言した事を解決できるのは自分だけですし、プロダクト全体の処理を破壊しないか等の全体を見るのはキーボードを持っていないナビゲータ側の方が適しています。ナビゲータの方を信頼して、目の前の課題解決だけに集中しましょう。

 

ペアプログラミングを行う(ナビゲータ編)
  • ドライバに意見を言う時は、具体的手段ではなく目指すゴールを伝える
  • ディティール(コンパイラが指摘してくれるようなタイポとか)は見ない

目指すゴールを伝えるのは、さっきのドライバ編とも同じ気がするのですが――例えば、実装中のクラスがイミュータブルにできるのにミュータブルになってしまっているのを発見した時に、「インスタンスフィールド全部にfinalつけてください」というよりも「このクラスをイミュータブルにしましょう」の方が意図が相手に伝わりやすいですよね。

ディティールは見ないのは、遅かれ早かれ画面を見ているドライバが気づくような問題(IDEがコンパイルエラーを出すとか)に二人がかりでやるのは旨みがないので…。ドライバが見ていない全体的な部分を見ましょう。「intがIntになってますよ」とか言われたらイラッとする気持ちもありますしw。

#さすがに、変数名にhogeとか使いだしたらおいおいって言っていいと思いますけどw

お互いに相手を信頼して、別の役割を任せている、を意識するのが良いかと。

ペアプログラミングの終わりに
  • 最後の挨拶

ペアプログラミングの終わりには、相手とのご挨拶を忘れずに(今回のパートナーとまたペアプロしたいなーと思ってもらえるようなのがベストかも)。

 

まとめ

色々書きましたが、こういう辺りに気をつければよいのではの箇条書きを全部まとめ。

  • 相手へのリスペクトを持つ
  • 自分へのリスペクトも持つ
  • パートナとの挨拶
  • ドライバ・ナビゲータの入れ替えタイミングを決める
  • コードを共有する為のリポジトリを作る
  • 自分がこれから何をするかをナビゲータに「宣言する」
  • 目の前の課題解決に集中する
  • ドライバに意見を言う時は、具体的手段ではなく目指すゴールを伝える
  • ディティール(コンパイラが指摘してくれるようなタイポとか)は見ない
  • 最後の挨拶

10個か〜。もう少しコンパクトにまとめたかったような