Slide 1

Slide 1 text

ペアプログラミング 復習スライド やっとむ Copyright © 2022 やっとむ、合同会社やっとむ屋

Slide 2

Slide 2 text

ペアプログラミングとは "Write all production programs with two people sitting at one machine. ... Pair programming is a dialog between two people simultaneously programming (and designing and testing) and to program better." (Extreme Programming Explained 2nd) 「プロダクションコードはすべて、2人で1台のマシンに向かって書くこと。…ペアプ ログラミングとは、プログラミングしながら2人で会話することだ(設計もテストも同 時にする)。会話するのは、もっと上手にプログラムするためである。」

Slide 3

Slide 3 text

脳みそ2つ
 目だまは4つ
 1つの問題を
 解決する


Slide 4

Slide 4 text

よくある風景 ● 難しいクイズを二人で一緒に考える ● 二人で協力して研究し、論文発表する ● 二人でドライブ中に道に迷い(カーナビのない時代)、 運転手は風景や標識を、助手席は地図を見ながら 目的地へ向かう ● 夏休み最終日、親に助けてもらいながら宿題を片付ける ● バトルに強い人と作戦に強い人のコンビ

Slide 5

Slide 5 text

重要な仕事は2人組で臨む •捜査する刑事 •人命救助 •学術研究 •ペアプログラミング → ペアワーク https://anagileway.com/2017/02/17/digital-innovation-leadership-with-jeff-nonaka-and-takeuchi/ https://hominis.media/category/actor/post3925/ https://sandanoumesan.com/archives/9803

Slide 6

Slide 6 text

古くから知られているアプローチ ● 「エゴレスプログラミング」…書いたコードを 「自分のもの」扱いせず、書いたら人に見てもらう 習慣のあるチームは、バグが少なくコードも読みやすい   (『プログラミングの心理学』原書1971年初版) ● 「ゴムのアヒルちゃん:問題の原因を探し出すための 非常に簡単で効果的なテクニックとして、「誰かに 説明する」という手法があります」   (『達人プログラマー』原書1999年) ● 質問を受けたとき、答えを教えるのではなく 隣に座って一緒に問題に取り組む

Slide 7

Slide 7 text

エクストリームプログラミング(XP) ● 1999年に発表されたアジャイル手法 ● 12個のプラクティスのひとつが「ペアプログラミング」 「…コードはすべて2人のプログラマが1台のマシンに  向かって作成される」 ● 多くのプラクティスが、現在ではあたりまえになっている ○ 短期リリース ○ テスト自動化 ○ 継続的インテグレーション ○ コーディング規約

Slide 8

Slide 8 text

● 問題に
 切り込む
 ● 前進する
 ● やってみる
 ● 全体を見渡す
 ● 他の可能性を 探る
 ● 前進を助ける
 ● 情報収集する
 ● 試行錯誤する
 ● 一体となって助け合う


Slide 9

Slide 9 text

● 問題に
 切り込む
 ● 前進する
 ● やってみる
 ● 全体を見渡す
 ● 他の可能性を 探る
 ● 前進を助ける
 ● 情報収集する
 ● 試行錯誤する
 ● 一体となって助け合う
 2つのモードを
 激しく切り替える


Slide 10

Slide 10 text

ペアプログラミングの効果 ● 見落とし、勘違いのミスが減少 ● より創造的な解決に到達 ● 集中力が持続 ● 楽しい 「課題の突破」と「全体の俯瞰」の両立

Slide 11

Slide 11 text

ペアプログラミングの効果-ユタ大学の研究 プログラミング 工数は増えるが、 15%しか増えない (2倍にはならない) ペアプロだと 品質が高い (不具合が少ない) ペアプロのほうが 楽しい ペアプロだと同じ機能を 少ない行数で実現する (洗練された設計) “The Costs and Benefits of Pair Programming” Alistair Cockburn, Laurie Williams, 2000 https://www.researchgate.net/publication/2333697_The_Costs_and_Benefits_of_Pair_Programming

Slide 12

Slide 12 text

ペアプログラミングの効果-ユタ大学の研究 • 作業中に間違いを見つけて直せるので、後工程に残らない (常時コードレビュー) • 不具合が減る(常時コードレビュー) • 設計がより良くなり、コード行数が減る (常時ブレインストーミングとペアリレー※) • ※常に相談し、意見交換し、一緒に考えることで問題解決が早くなる様子が観察さ れた • 問題解決が早い(ペアリレー) • 学習効果が高い。対象システムについてもソフトウェア開発の 技法についても(“教師の目が届く”効果) • 終了時、各自の理解している範囲が広くなる • 協力して働き会話も増えるため、情報の流れとチームのダイナ ミズムが生まれる • 仕事がもっと楽しくなる

Slide 13

Slide 13 text

ペアプロの 具体的なやり方

Slide 14

Slide 14 text

ゴール設定とToDoリスト ● 30分~2時間程度の1セッションでなにを達成するか、 最初に決めておく ● どういう手順でどう進んでいくか、ToDoリストで共有する ゴールは手を動かす前に合意しておく ToDoリストは進みながら足したり並び替えたりする 方向が見えるなら最初にだいたい決めてもよい ナビゲーターは途中で思いついたことを追加

Slide 15

Slide 15 text

ドライバーとナビゲーター ● ドライバー: 入力操作をして先へ進む ● ナビゲーター: なにをしてどう進むかドライバーに指示する ドライバーはガシガシ前進する役割 ナビの指示で作業する、迷ったり悩んだら手を止める ナビゲーターは進路を見ながらサポートする役割 ドライバーの見落とし、勘違いなどをどんどんツッコむ 先のことを考えてドライバーを誘導する

Slide 16

Slide 16 text

しゃべる ● ドライバーへの指示は声(や文字)で明示する ● ドライバーはしゃべりまくって状況を伝える ペアプロ=2つの脳を混ぜ合わせる、なのでぜんぶしゃべる チャットなど文字を併用してもいい ドライバーは常に、自分の頭の中身を垂れ流し続ける いま考えてること、理解内容、引っかかりなどを共有する いつでも手を止めて、2人で話し合ってよい

Slide 17

Slide 17 text

役割交代 ● ドライバーは交代する ● 7分たったら交代 ○ 抵抗感なくできるようになったら、他のタイミングも試す それぞれの知識・経験・強みが生きるよう役割を入れ替える それぞれの考えを常に共有する 自分の判断で進みたい人はドライバーではなくナビになる

Slide 18

Slide 18 text

「わからない」と言う ● いつでも誰でも「わからない」と言う権利がある 全員が一緒に進むのがペアプロ。置いて行かれそうになったら 「わからない」と言わないと伝わらない 「ちょっと待って」「何してるんだっけ」なども わからないから様子を見よう……では遅い! 「あれちょっとわからな…あーわかった」と口に出す

Slide 19

Slide 19 text

「やったー!」と言う ● 小さな事でも、達成したり乗り越えたら「やったー!」 テンションを上げ、自信を増し、創造的になる 頭が良くなる 声を出し、胸部を広げ、酸素を肺と脳に供給する

Slide 20

Slide 20 text

ふりかえり ● ペアプロのやり方、進め方を見直す ● いいアイデアを思いつく、見つける ここで紹介しているのは、初心者向け基本セット 「自分たちに合ったスタイル」を模索する 何をどう変えるのも自由 ただし5~10回、合計40時間くらいは基本を身につける

Slide 21

Slide 21 text

やり方まとめ 1. 最初にゴールを決め、ToDoリストを更新しながら進める 2. 手を動かすのはドライバー、ナビの指示で進む 3. もう1人はナビゲーター、相談しながら指示を出す 4. 情報を共有するためとにかくしゃべる 5. ドライバーとナビゲーターは交代、1人7分間 6. 遠慮せず「わからない」と言う 7. 「やったー!」と言う 8. ふりかえりをする リモートでは できるだけ顔を出す

Slide 22

Slide 22 text

ペアプログラミングとは "Write all production programs with two people sitting at one machine. ... Pair programming is a dialog between two people simultaneously programming (and designing and testing) and to program better." (Extreme Programming Explained 2nd) 「プロダクションコードはすべて、2人で1台のマシンに向かって書くこと。…ペアプ ログラミングとは、プログラミングしながら2人で会話することだ(設計もテストも同 時にする)。会話するのは、もっと上手にプログラムするためである。」 「ペアプログラミングとは、プログラミングしながら 2 人で会話することだ(設計もテス トも同時にする)。会話するのは、もっと 上手 にプログラムするためで

Slide 23

Slide 23 text

Slide 24

Slide 24 text

良くない例

Slide 25

Slide 25 text

ペアプロのプロトコル 0. あいさつする 1. ゴールを決める 2. まず着手できるまでのToDoリストを作る 3. 役割を決めて作業を進める 4. 時間や区切りで交代する 5. 適宜手を止めて相談したり、ToDoリストを見直したり、 休憩したりする 6. セッション終了時に、簡単にふりかえりをする

Slide 26

Slide 26 text

ペアの組み合わせについて ● 相互に学ぶ気持ちを持つ ● 異なる得意分野の組み合わせ ● 教育効果を狙う ○ これだけを考えるのは不利 ※難易度の高い組み合わせ ○ 極端なスキル差、経験差 ○ 新米どうし ○ 人間的な相性、人間関係 ○ 立場や力関係のある組み合わせ

Slide 27

Slide 27 text

強みを生かし 弱みを補う 実 装 仕様 品質 実装 仕 様 実装 仕様 品 質 実 装 仕 様 品 質 組み替え

Slide 28

Slide 28 text

リモートで気をつけること ● 画面共有、共同編集 ● 顔が見え声が聞こえるようなコミュニケーションチャンネル ○ 文字、テキストも必要 ● オフライン以上に、しゃべらないと不安が高まる ● 交代方法 ○ 共同編集できると便利 ○ リポジトリ経由

Slide 29

Slide 29 text

レビューについて 問題を見つけるレビューは不要になるかも 共有したり強化したりレビューは残す

Slide 30

Slide 30 text

組織や会社から見た ペアプログラミング

Slide 31

Slide 31 text

組織へのメリット ● テストフェーズや障害対応まで含めた工数削減 ● トラックナンバーを大きくしレジリエンスを高める ● 知識、経験、スキルを組織内に環流させる トラックナンバー チームから何人欠けたら、仕事が継続できなくなるか? 「X人が交通事故に遭って仕事を急に休んだら」という意味 Xが大きい方が、情報共有ができていて、耐性がある 縁起が悪いので、ハネムーンナンバーと呼ぶこともある

Slide 32

Slide 32 text

多様性を結びつける ● いろいろなスキルがあり、いろいろな人がいる ● 分業ではなく協力することで、新たな知識が生まれる ● 効率<効果 ● 垣根を越えるペアプロ、ペアワーク ○ 組織を越える ○ 職能を越える ○ 役職を越える ○ 意識を越える

Slide 33

Slide 33 text

ペアの組み替え ● ペアを組み替えて情報共有を広げる ● 「これ知ってる」と言える人を増やす ○ 「あの人しか知らない」を減らす ● 個々人のスキル・知識・経験を組織のものとする ● 必要なスキルが変わってきたとき ● フレッシュな脳みそと目だまで仕事を見直す

Slide 34

Slide 34 text

ペアの組み替えの例 ● 毎週新しいペア ○ 週40時間みっちり ○ プロジェクトを越えることも ● 1タスク1ペア、だいたい1日ごと ○ 1タスクを担当するペアとなる ○ チーム内であれこれする ● 毎時新しいペア ○ タスクに付く人と、あちこちする人 ○ 必要なスキルで呼ばれたり ● いろいろ工夫する!

Slide 35

Slide 35 text

例1 フルタイムペアプロ1週間組み替え

Slide 36

Slide 36 text

例2 仕事を小さく、仕事毎にペアを組む

Slide 37

Slide 37 text

例3 90分単位、頻繁な組み替え、主担当が残る

Slide 38

Slide 38 text

やってみよう!

Slide 39

Slide 39 text

やり方まとめ 1. 最初にゴールを決め、ToDoリストを更新しながら進める 2. 手を動かすのはドライバー、ナビの指示で進む 3. もう1人はナビゲーター、相談しながら指示を出す 4. 情報を共有するためとにかくしゃべる 5. ドライバーとナビゲーターは交代、1人7分間 6. 遠慮せず「わからない」と言う 7. 「やったー!」と言う 8. ふりかえりをする リモートでは できるだけ顔を出す