概要
Web+DB vol.102の特集がペアプログラミング・モブプログラミングで、個人的に興味があるのにやったことが無い分野だったので衝動買い。将来的にペアプログラミング、モブプログラミングを業務で行う機会があったらふりかえれるように、ざっくりとその要約と所感をまとめる。
以降は個人的に勉強になった点のみ抜き出しており、特集内を網羅的にまとめているわけではないので注意。
目次
前提
理系卒Web系プログラマ3年目。
ペアプログラミングはそれなりに知ってるけど実務での経験無し。
モブプログラミングは言葉と概要程度は知ってるが経験無し。
ペアプログラミングってなんだ
- ペアプログラミングは二人ペアでプログラミングを行うこと
- コーディングに限らず、「目標定義」「タスク分割」「設計」「コーディング」「リリース」までの全ての作業をペアで行う
- 主にPCを操作する「ドライバ」と、それを補助する「ナビゲーター」に分かれる。役割は定期的に交代する
モブプログラミングってなんだ
- ペアプログラミングを大勢で行うように拡張したもの
- 「ドライバ」は引き続き一人、残り全員が「ナビゲーター」となる
- モブの人数は3〜5人が最適らしい
ペアプロ/モブプロで得られる効果はなんだ
- ペア内、モブ内の情報伝達効率を最大化すること
- 作業への集中度を高め、作業の質を向上させること
- 楽しくチームビルディングすること
ペア/モブで行うメリット
- ドライバがコードを書いてるそばから、ナビゲーターがそのコードをリアルタイムにレビューすることができるので、コーディングからレビューまでのスパンを最短にできる
- コードを書いてしばらくしてから指摘を受けるよりも精神的な苦痛が少ない(?)
- 現在の作業内容を声に出して会話することで、思考が整理され、プログラミングの質が向上する
- ナビゲータはドライバよりやや引いた視点で見ることができるので、ドライバが気づきにくいバグやミスに気づける
- ペア/モブ内で情報を共有できるので、属人性の問題を軽減できる
ペアプログラミングの進め方
- コードを書く前に方向付けをしよう
— 最終目標はどこか、いつまで行うかなど - コードを書きながら会話し、考えを共有する
— 言葉にして相手に伝えることこそ最大の思考整理法 - ロールを交代する
— 必ず定期的に交代する。交代タイミングは時間でも作業単位でも可
ペアプログラミングはいつ行うのがベストか
- チームに新メンバーが入ってきたとき
- デバッグや不具合修正を行うとき
- 長時間の改修作業になるとき
ペアプロは誰とペアを組むか
- ベテランと新人
— ペアプログラミングによる教育は最強の教育法 - ベテラン同士のペア
— 最も品質の高い開発を行う方法 - 新人同士
— 敷居が高く生産性は望めないが、コミュニケーションは促進できそう
モブプログラミングの特徴など
- ドライバの作業を複数のナビゲータがみんなで力をあわせて補助する
- 並行作業を行わずに、モブ全体で課題を一つ一つこなしていく
- モブ内だけで全ての問題を解決できるようなチームづくりをする
- 困難にみんなでハマって、成功もみんなで喜ぶ
- 非エンジニアにもモブに入ってもらって、エンジニアがどんなことをしているのかを肌で感じてもらう
所感
ペアプログラミングはレビューをリアルタイムで行うためにペアでプログラミングをするもの。モブプログラミングはペアプログラミングを多人数に拡張したもの。
ということは、ペアプログラミングをするにしても、モブプログラミングをするにしてもコードレビューの文化がしっかり根付いていないの難しいのかなと思った。
他人のコードを読んで、それに対して意見が言える人でないとナビゲータは難しいのかなと思う。そう考えると簡単にペアプログラミング、モブプログラミングを業務で導入するのはハードルが高そうだ。まずはコードレビューの文化から育てていかなければならなそう。