Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ペアプログラミング復習スライド

yattom
January 25, 2022

 ペアプログラミング復習スライド

ペアプログラミングの基本とやり方について復習するためのスライドです

yattom

January 25, 2022
Tweet

More Decks by yattom

Other Decks in Technology

Transcript

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

    View full-size slide

  2. ペアプログラミングとは
    "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人で会話することだ(設計もテストも同
    時にする)。会話するのは、もっと上手にプログラムするためである。」

    View full-size slide

  3. 脳みそ2つ

    目だまは4つ

    1つの問題を

    解決する


    View full-size slide

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

    View full-size slide

  5. 重要な仕事は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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  8. ● 問題に

    切り込む

    ● 前進する

    ● やってみる

    ● 全体を見渡す

    ● 他の可能性を
    探る

    ● 前進を助ける

    ● 情報収集する

    ● 試行錯誤する

    ● 一体となって助け合う


    View full-size slide

  9. ● 問題に

    切り込む

    ● 前進する

    ● やってみる

    ● 全体を見渡す

    ● 他の可能性を
    探る

    ● 前進を助ける

    ● 情報収集する

    ● 試行錯誤する

    ● 一体となって助け合う

    2つのモードを

    激しく切り替える


    View full-size slide

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

    View full-size slide

  11. ペアプログラミングの効果-ユタ大学の研究
    プログラミング
    工数は増えるが、
    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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  22. ペアプログラミングとは
    "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
    人で会話することだ(設計もテス
    トも同時にする)。会話するのは、もっと
    上手
    にプログラムするためで

    View full-size slide

  23. 良くない例

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  26. 強みを生かし 弱みを補う


    仕様
    品質
    実装


    実装 仕様





    様 品

    組み替え

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  37. やってみよう!

    View full-size slide

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

    View full-size slide