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 full-size slide

  2. 自己紹介

    なかじま(@jnuank_)

    ● 前職でスクラムを実践

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

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

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

    2

    View full-size slide

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


    View full-size slide

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

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

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

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

    ● 楽しいから

    4

    View full-size slide

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

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

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

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

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

    5

    View full-size slide

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


    View full-size slide

  7. いまのチーム状況

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

    7
    私


    View full-size slide

  8. 最初の1週間

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


    View full-size slide

  9. 約1ヶ月後…

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


    View full-size slide

  10. あれ?

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

    View full-size slide

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

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

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

    11

    View full-size slide

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

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


    View full-size slide

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

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

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

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

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

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

    13

    View full-size slide

  14. なぜペアなのか?


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

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

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


    View full-size slide

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

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

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

    15

    View full-size slide

  16. どうやって

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


    View full-size slide

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


    View full-size slide

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

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

    18
    『Clean Agile』p.124


    View full-size slide

  19. 協力とは

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

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


    View full-size slide

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


    View full-size slide

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

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


    View full-size slide

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

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

    今日話すこと

    3. まとめ


    View full-size slide

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

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

    今日話すこと

    3. まとめ


    View full-size slide

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


    View full-size slide

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

    View full-size slide

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


    View full-size slide

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

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

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

    27

    View full-size slide

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

    →頻繁に会話をする


    View full-size slide

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


    View full-size slide

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

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


    View full-size slide

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


    View full-size slide

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

    ● 時間による交代

    ● テストによる交代

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

    32

    View full-size slide

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

    ● 時間による交代

    ● テストによる交代

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

    33

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

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

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

    View full-size slide

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

    明日からやってみるぞ!


    View full-size slide

  50. それが難しい


    View full-size slide

  51. いきなりは難しい

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

    ● 様々な要因

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

    ○ ペアプロ自体のスキル

    51

    View full-size slide

  52. いきなりは難しい

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

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

    52

    View full-size slide

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

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

    今日話すこと

    3. まとめ


    View full-size slide

  54. ペアプロのスキル

    ● いろいろある

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

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

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

    54

    View full-size slide

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

    ● 場づくり

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

    ● 問いかける

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

    ● キーボードを奪わせる

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

    View full-size slide

  56. 場づくり

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

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

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

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


    View full-size slide

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

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

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

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

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

    57

    View full-size slide

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

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

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

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

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

    View full-size slide

  59. 問いかけをする

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

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

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

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

    59

    View full-size slide

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

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

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

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

    60

    View full-size slide

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

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

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

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

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

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

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

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


    View full-size slide

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

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

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

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

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

    62

    View full-size slide

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

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

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

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

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

    63

    View full-size slide

  64. いくつか試してみて


    View full-size slide

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

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

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

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

    65

    View full-size slide

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

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

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

    66

    View full-size slide

  67. まとめ


    View full-size slide

  68. まとめ

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

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

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

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

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

    68

    View full-size slide

  69. 参考文献

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

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

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

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

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

    ● 『ペアプロの心得』


    69

    View full-size slide