ペアプログラミング
ペアプログラミングとは、その名前の通り、1つのプログラムを2名で開発する手法であり、アジャイル開発(特にXP)で良く採用されます。今回は、このペアプログラミングの概要、特徴、さらに開発現場での具体的な適用方法を、事例をもとに紹介します。
ペアプログラミングとは
ペアプログラミングとは、1つのプログラムを2名で開発する手法です。1つのプログラムをどうやって2名で作成するのでしょうか。また、なぜわざわざ2名で作成するのでしょうか。詳細を見ていきましょう。
2名の役割: ドライバーとナビゲーター
ペアプログラミングでは、以下のように1つのモニタの前に2名が並んで座り、1名がキーボードとマウスを使い、もう1名がアドバイスを与えます。
- ドライバー
- ナビゲーター
キーボードを操作してコードを書く人。ナビゲーターの指示に従い、実際にプログラムを書いていきます。基本的には指示通りにコードを書いていきますが、レビュアーも兼ねているので、「それはおかしい」とか、「こっちの実装の方が良いのでは?」というコメントも行います。
仕様に合わせて、どのようなアルゴリズムを採用し、どのようなコードにするのかを具体的に指示します。コードを口述するイメージです。
この関係性は、自動車競技のラリーに例えるとイメージしやすいでしょう。ナビゲーターはレース主催者から与えられたコース図(仕様)をもとに全体のプランを構築し、それをドライバーに伝えていきます。レース全体のイメージ(プログラムの完成形)を常に頭に描きながら、局所的な具体化としてのルート・速度(アルゴリズム)を決定していきます。ドライバーは指示されたルート・速度を忠実に形(ソースコード)にしていく訳です。
ペアプログラミングではコード作成はもちろんのこと、テストの作成・実施も行うケースが多いようです。
「ペア」による効果
ペアプログラミングのメリット
ペアプログラミングの利点は、以下の通りです。
- 常にレビューされた状態になる
- チームワークの醸成・サボらない
- 知恵を出し合える
- 知識の底上げ・教育的配慮
- コードの共同所有
- ベテランが飽きる
- 生産性が落ちる
必ず2名でコードを書いていくことになるため、できあがったコードは結果的にレビュー済みとなります。複雑で分かりにくいコードを極力減らすことが可能です。
1人でコードを書く作業は想像以上に孤独です。気分が乗らないことや、頭が冴えないこともあるでしょう。2名の協働作業になることで、気分転換も含めながら着実に作業が進みます。また、ペアで作業することでチームの一体感が生まれ、ソフトウェア完成というゴールに向けて一丸となって進むことができます。
経験豊富なプログラマであれば、さまざまなアルゴリズムや実装のテクニックを思いつくことができますが、そのようなプログラマがチーム内に多く存在するケースは希ではないでしょうか。ペアでのプログラミングは、どのようなコードを作成するか1人で悩み込んでしまうことを無くし、より良いアルゴリズム・コードにブラッシュアップしていくことが可能です。
上述の通り、知恵を出し合うことがペアプログラミングなので、結果的にアルゴリズムや実装のテクニックのチーム内共有が進みます。特に、新人プログラマがベテランプログラマから学ぶことは多いようです。
常に2名が同じコードを見てコードを書いているので、どのコードを取り上げても、誰か1人しか知らない・見たことがないという状況を回避できます。ソフトウェア開発の仕事は、実はコードを書いた後、リリースした後のメンテナンスが非常に重要なため、コードを理解できる人が多いほど、より良い環境であると言えるのではないでしょうか。
ペアプログラミングのデメリット
一方、欠点としては、以下が挙げられます。
経験豊富なベテランにとっては、部下の教育やチームの一体感よりも、自身がたくさんの質の良いコードを書き、それが短納期・高品質なソフトウェアを作ることにつながると考えることがあるでしょう。プロ野球やプロバスケットボールのような「オールスターチーム」を作ることができているのであれば、ペアプログラミングは不向きかもしれません。
2名が1つの作業を常に行うため、1人あたりの生産性が落ちることがあるようです。一方で、ペアプログラミングにより生産性が大きく向上したという報告も多々あるため、自分たちのチームに適しているかどうかの見極めは重要になりそうです。
当社内でも、ペアプログラミングのもたらす教育的配慮と生産性のどちらを取るべきか、という議論がしばしば起こります。当社では毎年数名の新卒学生を採用し、エンジニアとしての教育を開始します。こういった環境においては、単なる教育を繰り返して実戦投入を考えるよりも、ペアプログラミングを前提にすぐに実践投入して、先輩がナビゲーター・新入社員がドライバーになることで、新入社員はどんどんとスキルアップしていきます。教育的配慮を重く見る例ではないでしょうか。