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

より協力的なペアプロを促すには どうするかを考える

Jun Nakajima
September 30, 2023

より協力的なペアプロを促すには どうするかを考える

XP祭り2023で発表したスライドです

イベント
https://xpjug.connpass.com/event/292794/

Jun Nakajima

September 30, 2023
Tweet

More Decks by Jun Nakajima

Other Decks in Business

Transcript

  1. より協力的なペアプロを促すには

    どうするかを考える

    2023/09/30
    #xpjug
    Jun Nakajima

    View Slide

  2. 自己紹介

    なかじま(@jnuank_)

    ● 前職でスクラムを実践

    ● 2年半前からUZABASEにJoinしてからXPを実践してます

    ● 普段からペアプロとTDDをフルタイムでやってます

    ● 社内で和尚と呼ばれます

    2

    View Slide

  3. みなさんのペアプロのモチベは?


    View Slide

  4. 自分がペアプロをやっている動機

    ● より良いソフトウェアの設計をするため

    ● レビュープロセスを無くしてより早く価値を届けるため

    ● ペアで知識・情報を共有することで、コーディングの大事なポ
    イントをチームで確立していくため

    ● 楽しいから

    4

    View Slide

  5. 私のペアプロ・モブプロの原体験

    ● 2018年XP祭りでTDDワイワイ会のワークショップに参加

    ○ 普段知らない人たちでも一緒に協力してコードを書くのが
    楽しかった

    ● 同年のTDDBCでペアプロ×TDDをした

    ○ お互いが設計に対して意見し合い、自分の想像以上の設
    計を考えられたのが楽しかった

    5

    View Slide

  6. 楽しいが、今はのびしろも感じてる


    View Slide

  7. いまのチーム状況

    自分と、4月に組織にJoinしたばかりのメンバー

    7
    私


    View Slide

  8. 最初の1週間

    8
    まずはテストから書い
    ていきましょう。
    ◯◯ファイル開いて、
    そこに追加しましょう
    はい
    (言われた通りにファイルを開く)
    OK。じゃあまずは落と
    す為に、こういう風に
    書いて…
    はい…はい…
    (言われた通りにコードを書く)
    私


    View Slide

  9. 約1ヶ月後…

    9
    よし、今日は◯◯のス
    トーリーをやります
    か。じゃあ△△のファ
    イル開いて
    はい
    (言われた通りにファイルを開く)
    じゃあ@Testって書い
    て次にfun hoge()っ
    て〜
    はい…はい…
    (言われた通りにコードを書く)
    私


    View Slide

  10. あれ?

    10
    ずっと一方的
    に喋っている
    な…。

    View Slide

  11. のびしろを感じた場面

    ● 一緒にやるメンバーに細かく伝え続ける事が多かった

    ● 私が喋る事を別の方にそのままアウトプットしてもらっている

    11

    View Slide

  12. ペア作業は仲間との協力だが、ベテラン開発者が経験の浅い開発者とペア
    を組むときもあるだろう。この場合、先生と生徒という立場になってはいけな
    い。2人のメンバーが一緒に学ぶ機会を作ることによって、対等なバランス
    を取り戻そう。

    12
    『アート・オブ・アジャイルデベロップメント』pp.80-81


    View Slide

  13. 先生と生徒の関係から早く脱却したい

    ● 前提として先生と生徒の関係が必要なときはある

    ● だけど、長く続けるべきではない

    ○ 先生役以上の意見が生まれにくい

    ○ 生徒役自身の創造性が押さえつけられる

    ○ ペアプロで期待する相互作用が生まれにくい

    13

    View Slide

  14. なぜペアなのか?


    本章のタイトルを考えることとした。それにもかかわらず、最初のプラクティ
    スをペアプログラミングにした。

    それはペアプログラミングが知力を高めることそのものだからだ。

    14
    『アート・オブ・アジャイルデベロップメント』p.77


    View Slide

  15. ペアプロの本質は考えること

    ● ペアプロは単に二人一緒に作業をするだけじゃない

    ● お互いが考えていることをぶつけ合い、そこからお互いが考
    えを深めて、コードを生み出していく

    15

    View Slide

  16. どうやって

    先生と生徒の関係から脱却するか


    View Slide

  17. よりよい協力関係を築く


    View Slide

  18. チームとして振る舞うためにペアになるのだ。チームメンバーは孤独に作業
    せず、秒単位で協力しながら作業する。

    ひとりのメンバーが失敗しても、他のメンバーがその穴をカバーしながら、
    ゴールに向かって進み続けるのである。

    18
    『Clean Agile』p.124


    View Slide

  19. 協力とは

    ● 協力(きょうりょく)とは、複数の個体が共同で行動し、特定の
    目標を達成するための行為を指す

    19
    https://www.weblio.jp/content/%E5%8D%94%E5%8A%9B


    View Slide

  20. ペアプロの文脈においての協力とは


    View Slide

  21. お互いの思考を刺激しつづけながら

    ゴールに向かって進み続ける


    View Slide

  22. 1. ペアプロはフィードバックループをつくる

    22
    2. ペアプロのスキルを磨く

    今日話すこと

    3. まとめ


    View Slide

  23. 1. ペアプロはフィードバックループをつくる

    23
    2. ペアプロのスキルを磨く

    今日話すこと

    3. まとめ


    View Slide

  24. ペアプロによるフィードバックループ
    24
    引用元:http://www.extremeprogramming.org/map/loops.html


    View Slide

  25. (頻繁な)会話のフィードバックループ
    25
    いやいや、こうした方
    が…。
    ここの実装はこうしたい
    なるほど…。あれ、待って。この
    エラーハンドリング考慮した方
    が…。

    View Slide

  26. 一方的に教える(極端な)例
    26
    ここの実装はこう書い
    てー。この言語の場合
    はこういう書き方があ
    り…。
    はい…はい…
    (言われた通りに書く)
    フィードバックループが途絶えてしまう


    View Slide

  27. なぜフィードバックループを作りたいか
    ● ペアの間でフィードバックループが作れれば、数秒ごとに相手
    の見方・考えが手に入る

    ○ 大体が自分では思いもよらなかった考えのはず

    ● 思考を深めるきっかけとなる

    27

    View Slide

  28. フィードバックループを作る

    →頻繁に会話をする


    View Slide

  29. 頻繁に会話をするためには


    View Slide

  30. 23. 10分から15分おきに、ドライバーとナビゲーターを 交代しています
    か? 頻繁にドライバーとナビゲーターを交代することに より、より自然に知
    識の共有・システムの理解度を深めることができます。

    30
    『ペアプロの心得』https://gist.github.com/j5ik2o/2970973


    View Slide

  31. 頻繁なドライバーとナビゲーターの交代


    View Slide

  32. ドライバー交代のパターン

    ● 時間による交代

    ● テストによる交代

    ● 自然な交代(キーボードを取り合う)

    32

    View Slide

  33. ドライバー交代のパターン

    ● 時間による交代

    ● テストによる交代

    ● 自然な交代(キーボードを取り合う)← オススメ

    33

    View Slide

  34. 34
    じゃあやりましょう。どのへんのコード
    触るか当たりつきます?
    キーボードを取り合うイメージ

    View Slide

  35. 35
    じゃあやりましょう。どのへんのコード
    触るか当たりつきます?
    ◯◯ユースケースのメソッドのとこ
    ですかねー
    キーボードを取り合うイメージ

    View Slide

  36. 36
    じゃあやりましょう。どのへんのコード
    触るか当たりつきます?
    ◯◯ユースケースのメソッドのとこ
    ですかねー
    OK。じゃあテストコード書きましょう
    キーボードを取り合うイメージ

    View Slide

  37. 37
    テストコードのアサーション書きま
    す…(止まる)
    じゃあやりましょう。どのへんのコード
    触るか当たりつきます?
    ◯◯ユースケースのメソッドのとこ
    ですかねー
    OK。じゃあテストコード書きましょう
    キーボードを取り合うイメージ

    View Slide

  38. 38
    テストコードのアサーション書きま
    す…(止まる)
    お、なんか悩んでます?
    じゃあやりましょう。どのへんのコード
    触るか当たりつきます?
    ◯◯ユースケースのメソッドのとこ
    ですかねー
    OK。じゃあテストコード書きましょう
    キーボードを取り合うイメージ

    View Slide

  39. 39
    テストコードのアサーション書きま
    す…(止まる)
    お、なんか悩んでます?
    …あーっと…Kotlinのユニットテス
    トってアサーションどうするんでし
    たっけ
    じゃあやりましょう。どのへんのコード
    触るか当たりつきます?
    ◯◯ユースケースのメソッドのとこ
    ですかねー
    OK。じゃあテストコード書きましょう
    キーボードを取り合うイメージ

    View Slide

  40. 40
    テストコードのアサーション書きま
    す…(止まる)
    お、なんか悩んでます?
    ああ、なるほど。ちょっとキーボード
    借りますね
    …あーっと…Kotlinのユニットテス
    トってアサーションどうするんでし
    たっけ
    じゃあやりましょう。どのへんのコード
    触るか当たりつきます?
    ◯◯ユースケースのメソッドのとこ
    ですかねー
    OK。じゃあテストコード書きましょう
    キーボードを取り合うイメージ

    View Slide

  41. 41
    このライブラリ使っているんで、こう書
    けば…(タイピングする)

    View Slide

  42. 42
    ああ、なるほど。そう書くんです
    ね。じゃあ続き書きます
    (キーボード取り返す)
    このライブラリ使っているんで、こう書
    けば…(タイピングする)

    View Slide

  43. 43
    はい
    ああ、なるほど。そう書くんです
    ね。じゃあ続き書きます
    (キーボード取り返す)
    このライブラリ使っているんで、こう書
    けば…(タイピングする)

    View Slide

  44. 44
    はい
    ああ、なるほど。そう書くんです
    ね。じゃあ続き書きます
    (キーボード取り返す)
    …よし、テスト期待通り落ちました

    このライブラリ使っているんで、こう書
    けば…(タイピングする)

    View Slide

  45. 45
    はい
    ああ、なるほど。そう書くんです
    ね。じゃあ続き書きます
    (キーボード取り返す)
    …よし、テスト期待通り落ちました
    ね じゃあ実装やっちゃいますね(キー
    ボード取る)……よし、通った
    このライブラリ使っているんで、こう書
    けば…(タイピングする)

    View Slide

  46. 46
    はい
    ああ、なるほど。そう書くんです
    ね。じゃあ続き書きます
    (キーボード取り返す)
    …よし、テスト期待通り落ちました
    ね じゃあ実装やっちゃいますね(キー
    ボード取る)……よし、通った
    あ、ちょっとそこリファクタしたいん
    でいいすか?(キーボード取る)
    このライブラリ使っているんで、こう書
    けば…(タイピングする)

    View Slide

  47. 47
    はい
    ああ、なるほど。そう書くんです
    ね。じゃあ続き書きます
    (キーボード取り返す)
    …よし、テスト期待通り落ちました
    ね じゃあ実装やっちゃいますね(キー
    ボード取る)……よし、通った
    あ、ちょっとそこリファクタしたいん
    でいいすか?(キーボード取る)
    確かに。そっちの方が良さそう。それ
    だったら、こっちのコードも直したい
    (キーボード取る)
    このライブラリ使っているんで、こう書
    けば…(タイピングする)

    View Slide

  48. キーボードの取り合いが会話を生む
    ● お互いがキーボードを頻繁に取るので、コードについてよく話
    し合うことになる

    ● 慣れると、どっちがドライバーかみたいなロールに拘らなくな
    る

    ○ スクラム現場ガイドでも、数分単位で交代するマイクロペ
    アリングという手法を紹介してる
 48

    View Slide

  49. じゃあ、キーボードを取り合うことを

    明日からやってみるぞ!


    View Slide

  50. それが難しい


    View Slide

  51. いきなりは難しい

    ● 慣れてない人に、いきなりキーボードを「いつでも取って」とい
    うのは難しい

    ● 様々な要因

    ○ 目の前のコードや仕様技術の理解

    ○ ペアプロ自体のスキル

    51

    View Slide

  52. いきなりは難しい

    ● 特にペアプロのスキルは

    相手がいる中で磨かなければならない

    52

    View Slide

  53. 1. ペアプロはフィードバックループをつくる

    53
    2. ペアプロのスキルを磨く

    今日話すこと

    3. まとめ


    View Slide

  54. ペアプロのスキル

    ● いろいろある

    ○ 自分の考えを口に出す、問いかける、相手の話を傾聴す
    る、自分の考えをいつでも変えるマインド

    ● 今回はペアプロに慣れてないメンバーが

    キーボードを取り合うことを促す方にフォーカスする

    54

    View Slide

  55. 相手に積極的にドライバーを促すスキル

    ● 場づくり

    ● ナビゲートの抽象度のコントロールする

    ● 問いかける

    ● パートナーの認知負荷を把握して助ける

    ● キーボードを奪わせる

    ● ペアプロのふりかえり
 55

    View Slide

  56. 場づくり

    ● リスペクト・信頼関係が無いとペアプロは成り立たない

    ● チームができたばかりなら、相互理解を深めるワークをする
    のがオススメ

    ● Joinしたてのメンバーや、新しくペアプロを取り入れるといった
    場合はペアプロの心得の読み合わせなどをする

    56
    『ペアプロの心得』https://gist.github.com/j5ik2o/2970973


    View Slide

  57. 経験の浅いメンバーへ伝えること

    ● ペアプロを楽しいと思う一方で、思うように書けないと自分は
    貢献できているのかと不安に思う人も少なくない

    ● ペアに一番貢献できるのは、質問することだと伝える

    ○ どんなに素朴な質問でもそれは相手の為になる

    ○ 無知をさらけだす勇気を出すことを讃える

    57

    View Slide

  58. ナビゲートの抽象度をコントロールする

    ● 最初はなるべく抽象的なナビゲートから

    ○ ◯◯のストーリーやりたいから、まずテスト書こう

    ● そこで手が止まるようであれば、何がわからないかを聞いて、
    それに応じて抽象度を下げていく

    ○ xxxClassを書いて、次にxxxメソッドを書いて〜という詳細
    にするのは最後
 58

    View Slide

  59. 問いかけをする

    ● パートナーの手が止まったり「わからない」と口にしたら、問い
    かけてわからないの解像度を上げていく

    ○ 言語知識が少なくて書けないのか

    ○ ソースコードが複雑で追いづらいのか

    ● なるべく相手本人が言葉にできるようにする

    59

    View Slide

  60. パートナーの認知負荷を把握して助ける

    ● コードベースや言語知識が少ないと認知負荷を起こしやすい

    ● 何度も手が止まる場合は、まずは一緒にコードを読んで理解
    するところから始める

    ○ 読んで図を描いてもらい、記憶の補助に使う

    60

    View Slide

  61. (余談)プログラマーがコードを書く際の5つ活動

    ● 検索:コード内を調べ、特定の情報を探す活動

    ● 理解:コードを読んで実行し、その機能を把握する活動

    ● 転写:単にコードを書く活動

    ● 増強:既存のコードに新しい機能を追加する活動

    ● 探索:目指すゴールが漠然としたまま探索する活動

    これらの活動を同時にやると認知負荷高まりやすいらしい

    61
    参考:『プログラマー脳』


    View Slide

  62. ある程度慣れたらキーボードを奪わせる

    ● キーボードを奪う経験は大抵は無いので積んでもらう

    ● 今日はキーボードは譲らないと宣言してペアプロする

    ○ 「ドライバーやります! …で、ここからどう書くんです
    か?」はアリと伝える

    ○ 「書きたくなったら、キーボード奪って下さい」と伝える

    62

    View Slide

  63. ペアプロのふりかえりをする

    ● 1日の終わりに15〜30分程度でペアプロのふりかえりをする

    ○ ペアプロ中に良かった行動をフィードバックする

    ○ ペアプロのやり方について改善できることはないか

    ○ ペアプロ中に質問できなかったところを質問する

    63

    View Slide

  64. いくつか試してみて


    View Slide

  65. 数か月くらいで効果は見えてきた

    ● 最近Joinしたメンバーに試してみた

    ● 2〜3ヶ月くらい経つと、特定のAPIの開発などは「じゃあ書きま
    す」と宣言してリードしてくれる姿が増えてきた

    ● まだ1人にしか試してないので、再現性があるかはもっと検証
    が必要

    65

    View Slide

  66. 自分の伝え方についてものびしろが見えた

    ● もともと私もJoinしたてはキーボード取って慣れよ。というスタ
    イルだったので、チーム立ち上げ時もそれで上手くいくと思っ
    てた

    ● 今回の経験を機に、もっと新しく入るメンバーに寄り添えるよう
    なペアプロができるかもしれない。という学び

    66

    View Slide

  67. まとめ


    View Slide

  68. まとめ

    ● ペアプロの本質は考えること

    ● ペアの相互作用により思考を深めてゴールを目指す

    ● 数分おきにキーボードを取り合い、

    自然に交代するのが理想のペアプロの1つ

    ● いきなりそこを目指すのは難しいので、経験者のサポートす
    るスキルは磨く必要がある

    68

    View Slide

  69. 参考文献

    ● Kent Beck, Cynthia Andres(著), 角 征典(訳) (2015) 『エクストリーム・プログラミング』オーム社 

    ● Mitch Lacey (著), 安井 力, 近藤 寛喜, 原田 騎郎(訳) (2016) 『スクラム現場ガイド』マイナビ出版 

    ● Robert C. Martin(著), 角 征典, 角谷信太郎(訳) (2020)『Clean Agile 基本に立ち戻れ』ドワンゴ 

    ● フェリエンヌ・ヘルマンス (著), 水野貴明 (著), 水野いずみ (著) (2023) 『プログラマー脳 ~優れたプロ
    グラマーになるための認知科学に基づくアプローチ』秀和システム 

    ● James Shore (著), Shane Warden (著), 木下 史彦(監訳), 平鍋 健児(監訳), 笹井 崇司 (訳) (2009)
    『アート・オブ・アジャイル デベロップメント』オライリージャパン 

    ● 『ペアプロの心得』


    69

    View Slide

  70. Thank you!

    View Slide