kakakakakku blog

Weekly Tech Blog: Keep on Learning!

ペアプロって本当に効率的なの? / 論文「The Costs and Benefits of Pair Programming」を読んだ

2000年に発表された論文「The Costs and Benefits of Pair Programming(意訳 : ペアプログラミングのコストと利点)」を読んだ.個人的にペアプログラミングやモブプログラミングの経験はそれなりにあって,メリットとデメリットは理解しているつもりだけど,論文としてどうまとまっているんだろう?という点に興味を持った!

発表されてから20年以上も経過するけど,今読んでも内容は陳腐化してなく,参考になるし,納得感もあった.もし,現場にペアプログラミングなどのプラクティスを導入したくても「ペアプログラミング?単純にコスト2倍で非効率!ダメゼッタイ🙅」なんて言ってくる上司がいたらこの論文を使って説得しましょう!笑

(PDF) The Costs and Benefits of Pair Programming

開発時間は 15% 増えるけど...?

本論文を読んで,まず印象的だったのは「ペアプログラミングによって開発時間は 15% 増えるけど,設計品質が向上してバグが減ることで問題なく回収できる」と書いてあったことだった.当然ながら最初はペア作業に不慣れだと思うし,阿吽の呼吸になるまではコミュニケーション面でのオーバーヘッドも増えるだろうけど,中長期的に考えれば「QA 時間 : 6週間続く地獄の QA という話も載っていた💦」を減らせるなどメリットも多くある.僕自身の実体験と同じ内容が書かれていた.

  • 設計品質 : Up ↑
  • バグ : Down ↓
  • 人員配置リスク : Down ↓
  • 技術スキル : Up ↑
  • コミュニケーション : Up ↑

プログラミングを楽しめるように!

伝統的にプログラミングは孤独な作業であると思われているけど,ペアプログラミングに慣れると,何よりも「楽しい!」と感じられるようになったと書いてあった.さらに「コードに自信が持てるようになった」とも書いてあった.定性的なメリットではあるけど,チームの雰囲気が良くなるということは何よりも重要なことで,本論文で言及されていて良かった.

コードも短くなる!

ペアプログラミングをすると同期的にレビューを行うことになり,学びながら設計品質を向上できる.また本論文を読んでいて興味深かったのは「ペアプログラミングをするとコードも短くなった」と書いてあったことで,もしかしたらペアプログラミング中に相談しながら,DRY (Don't Repeat Yourself) 原則や単一責任原則を満たしやすくなったとも考えられる.そして,初心者がベテランに対してメソッド名の typo を早期に指摘して貢献するような場面もあったという話も良かった💪

食わず嫌い?

本論文に以下のコメントが載っていて面白かった!最初トウガラシを食べると嫌いだけど「食べれば食べるほど好きになる」ようにペアプログラミングも好きになっていくという話だった.

The adjustment period from solo programming to collaborative programming was like eating a hot pepper. The first time you try it, you might not like it because you are not used to it. However, the more you eat it, the more you like it.

まとめ

2000年に発表された論文「The Costs and Benefits of Pair Programming」を読んだ.一般的にマネージャーはプログラマーを貴重なリソースと考えていて「リソースを無駄にすること」に消極的ではあるけど,ペアプログラミングというプラクティスを取り入れることによって設計品質を向上できて,プログラマーは今以上に楽しく働けるようになるという結果だった.本論文では以下の「8 種類の観点」で評価をしているため,興味を持ったら読んでみると良いのではないでしょうか!

  • 経済性 (Economics)
  • 満足度 (Satisfaction)
  • 設計品質 (Design quality)
  • 継続的レビュー (Continuous Reviews)
  • 問題解決 (Problem solving)
  • 学び (Learning)
  • チームビルディングとコミュニケーション (Team Building and Communication)
  • スタッフとプロジェクトマネジメント (Staff and Project Management)