8.3 ペアプログラミング

8.3.1 ペアプログラミングのメリット
8.3.2 どうやってペアを組むか
8.3.3 誰とペアを組むか
8.4 バディプログラミング
8.10.1 ペアプログラミングの7つの戦略

内容

ペアプログラミングへの誤解

まず、ペアプログラミングは非常にネガティブなイメージが、開発者でもマネージャーでも先行している。
しかし、それはただ単にやり方が間違っているため。

うまくやれば、1人でやるより、はるかに早く、高品質に高いレベルでタスクを完了することができる。

ペアプログラミングのメリット

  • メンバー間の高速な知識の共有。
    メンバー全員がある程度コードに親しんでいる状態は、ボトルネックになりにくいためチームにとっとかなり価値が高い。
  • ネーミングに有効。
    プログラミングでは至るところでネーミングするが、名が体をなしているネーミングが超重要で、しかも他の人とも共通で読めるものでなければならない。
  • コーディング標準がいらなくなる。
    コードに一貫性が生まれ、コード自体が標準化され、コーディング標準がいらなくなる。「コードはこうあるべき」というものを定義せずとも、チーム内で運用しやすいものが生まれやすい。
  • 新規参画メンバーの成長にも良い。
    経験者メンバーと1〜2週間ペアプロ(最初のうちはシャドーイング)することで、新規参画メンバーのスピードがつく。
  • 1人でやるよりも見られている緊張感のために変なコードを書かなくなるし、お互いが監視することでしっかりとした一日を過ごす。
  • 割り込み作業がほぼなくなる。
    2人で作業しているところに割って入りづらくなるため。
  • 時間の観点でも、生産性が半分になるわけではない。約15%増えるとされているが、高品質なコードとチーム全体がが総合的な運用コストをカバーする。

ペアプログラミングの注意点

  • ナビゲーター(指示する側)とドライバー(タイプする側)で分かれるが、両者の合意のもと進むことができるということをお互いが意識して、お互いが積極的に「そうやったのはなんで?こうやらないのはなぜ?」というような質問をして、それに対してしっかりと回答して、回答に対して耳を傾ける必要がある。
  • お互いが正直に意見を言えることが重要。
  • 良いものは積極的に褒める。
  • 休憩も両者のタイミングで取る。
  • 片方が退屈しているようであれば、退屈している方は機能していないため、役割を交代してみたりする。
  • おすすめの方法は、テストファースト開発で、片方がテストを書き、片方がテストを通すコードを書きCleanにする。
  • 役割の交換のタイミングは遅くて30分。
    忘れそうならタイマーを使うと良い。

ペアリングの方法

ペアプログラミングが本質的に期待するところとして「それぞれ違ったものが合わさり、新しいものが生まれる」「お互いに無いところを補いあう」というような考え方がある。同じような人とペアをしても学びは少ない。
その考えに乗っ取り、

  • 性格が違う人同士(強い性格、社交的な性格の人と、内向的な静かな人など)をペアにする。
  • 経験の豊富な人と浅い人をペアにする。
    教える側と教わる側という関係になることが多いが、結果的に教える側は教えながら自分も多くを学ぶことになる。
  • ランダムにペアする。
    知らなかった自分の一面が引き出され、新たな可能性が広がる。
    すべてのパターンでペアリングしてみよう。

その他の有効な手法

  • 自分の考えは他人の手でコンピュータに伝えなければならないという原則に則る。
    これによって当人たちの頭の中の問題解決空間が共有され始め、ペアフロー状態という桁違いに生産性の高い状態に入れる。

バディプログラミング

ペアリングが苦手なチームや、1人で作業したほうが効率が良いタスクの場合に有効な方法。
1日の最後に、やったことのレビューをお互いで行い、質問、回答、議論を行う。
ペアプロよりもエクストリームではないが、ペアプロの導入としては取り入れやすい。

進捗を追跡する

ペアリングが上手くいき始めたら、その効果、生産性を計測し、マネージャーに提示することで、さらにペアリングの運用が確固たるものになる。

学び

  • ペアプロを新人の教育の場合のみに使われることを見てきたが、ペアプロの目的はチーム全体のフロー効率を上げるためにあり、知識の共有はその1つの効果でしかない。その認識をまず持つことが重要。
  • ユダヤ学習方式でもペアで教え合うこと・議論しあうことをしているが、この人に教えるという行為は記憶の定着率が一番高い。(読書、プレゼン、体験、人に教える、の中で)
    ペアプログラミングにはそのエッセンスが入っている。
  • ペアプログラミングをトレーニングしたくなった。

学びを活かすアイディア・行動

  • 現場でペアプロの実践、バディプログラミングの実践。特にバディはやりやすい。

No responses yet

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です