Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
より協力的なペアプロを促すには どうするかを考える
Search
Jun Nakajima
September 30, 2023
Business
2.9k
8
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
より協力的なペアプロを促すには どうするかを考える
XP祭り2023で発表したスライドです
イベント
https://xpjug.connpass.com/event/292794/
Jun Nakajima
September 30, 2023
More Decks by Jun Nakajima
See All by Jun Nakajima
許しとアジャイル
jnuank
1
320
アジャイルの知見の少ないメンバーの多いチームづくりの1年半をふりかえる
jnuank
1
1.1k
そのプランニングに意思、乗せていますか?
jnuank
1
2.5k
スクラムを実践していた私がXPの現場に来て感じたこと
jnuank
2
1.2k
エヴァンス本輪読会お疲れ様会を楽しむために / DDD輪読会での差分とこれから
jnuank
0
210
3つの概念で覚えるLinuxの世界
jnuank
0
22k
1週間ですら見積もれなかったからイテレーションを1日にしてみた
jnuank
0
830
正しくつくるための設計を学ぶ_最終報告
jnuank
1
210
Event Storming Big Pictureを試す
jnuank
0
1.1k
Other Decks in Business
See All in Business
今こそアナログスキルを磨こう
madai0517
0
120
dotcue採用ピッチ2606.pdf
dotcue
0
120
採用ピッチ資料_耳川広域森林組合
mimirin
0
330
CompanyDeck_v6.5.pdf
xid
3
27k
AI導入PJの勝ちパターン KPI設計&意図的な社内AI格差
okuwakim
1
870
今日から始めるセルフマネジメント/A Practical Guide to Self-Management
ikuodanaka
1
470
家族アルバム みてね 事業紹介 / Our Business
familyalbum
7
59k
AIを意識した経営・執行の設計と実行
kan
4
4.1k
捨てる、という判断 — エンジニアの役割の変化に向き合うConference
appleworld
1
710
株式会社SAFELY 会社紹介 / Company
safely_pr
1
7.2k
ブランディングサービス紹介資料《抜粋版》
brandingtechnology
0
330
SimpleForm 会社紹介資料
simpleform
2
54k
Featured
See All Featured
Joys of Absence: A Defence of Solitary Play
codingconduct
1
390
Information Architects: The Missing Link in Design Systems
soysaucechin
0
970
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
420
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
200
The Art of Programming - Codeland 2020
erikaheidi
57
14k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
2k
Making Projects Easy
brettharned
120
6.7k
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
180
Optimizing for Happiness
mojombo
378
71k
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
118
120k
Why Our Code Smells
bkeepers
PRO
340
58k
The Language of Interfaces
destraynor
162
27k
Transcript
より協力的なペアプロを促すには どうするかを考える 2023/09/30 #xpjug Jun Nakajima
自己紹介 なかじま(@jnuank_) • 前職でスクラムを実践 • 2年半前からUZABASEにJoinしてからXPを実践してます • 普段からペアプロとTDDをフルタイムでやってます • 社内で和尚と呼ばれます
2
みなさんのペアプロのモチベは?
自分がペアプロをやっている動機 • より良いソフトウェアの設計をするため • レビュープロセスを無くしてより早く価値を届けるため • ペアで知識・情報を共有することで、コーディングの大事なポ イントをチームで確立していくため • 楽しいから
4
私のペアプロ・モブプロの原体験 • 2018年XP祭りでTDDワイワイ会のワークショップに参加 ◦ 普段知らない人たちでも一緒に協力してコードを書くのが 楽しかった • 同年のTDDBCでペアプロ×TDDをした ◦ お互いが設計に対して意見し合い、自分の想像以上の設
計を考えられたのが楽しかった 5
楽しいが、今はのびしろも感じてる
いまのチーム状況 自分と、4月に組織にJoinしたばかりのメンバー 7 私
最初の1週間 8 まずはテストから書い ていきましょう。 ◯◯ファイル開いて、 そこに追加しましょう はい (言われた通りにファイルを開く) OK。じゃあまずは落と す為に、こういう風に
書いて… はい…はい… (言われた通りにコードを書く) 私
約1ヶ月後… 9 よし、今日は◯◯のス トーリーをやります か。じゃあ△△のファ イル開いて はい (言われた通りにファイルを開く) じゃあ@Testって書い て次にfun
hoge()っ て〜 はい…はい… (言われた通りにコードを書く) 私
あれ? 10 ずっと一方的 に喋っている な…。
のびしろを感じた場面 • 一緒にやるメンバーに細かく伝え続ける事が多かった • 私が喋る事を別の方にそのままアウトプットしてもらっている 11
ペア作業は仲間との協力だが、ベテラン開発者が経験の浅い開発者とペア を組むときもあるだろう。この場合、先生と生徒という立場になってはいけな い。2人のメンバーが一緒に学ぶ機会を作ることによって、対等なバランス を取り戻そう。 12 『アート・オブ・アジャイルデベロップメント』pp.80-81
先生と生徒の関係から早く脱却したい • 前提として先生と生徒の関係が必要なときはある • だけど、長く続けるべきではない ◦ 先生役以上の意見が生まれにくい ◦ 生徒役自身の創造性が押さえつけられる ◦
ペアプロで期待する相互作用が生まれにくい 13
なぜペアなのか? 本章のタイトルを考えることとした。それにもかかわらず、最初のプラクティ スをペアプログラミングにした。 それはペアプログラミングが知力を高めることそのものだからだ。 14 『アート・オブ・アジャイルデベロップメント』p.77
ペアプロの本質は考えること • ペアプロは単に二人一緒に作業をするだけじゃない • お互いが考えていることをぶつけ合い、そこからお互いが考 えを深めて、コードを生み出していく 15
どうやって 先生と生徒の関係から脱却するか
よりよい協力関係を築く
チームとして振る舞うためにペアになるのだ。チームメンバーは孤独に作業 せず、秒単位で協力しながら作業する。 ひとりのメンバーが失敗しても、他のメンバーがその穴をカバーしながら、 ゴールに向かって進み続けるのである。 18 『Clean Agile』p.124
協力とは • 協力(きょうりょく)とは、複数の個体が共同で行動し、特定の 目標を達成するための行為を指す 19 https://www.weblio.jp/content/%E5%8D%94%E5%8A%9B
ペアプロの文脈においての協力とは
お互いの思考を刺激しつづけながら ゴールに向かって進み続ける
1. ペアプロはフィードバックループをつくる 22 2. ペアプロのスキルを磨く 今日話すこと 3. まとめ
1. ペアプロはフィードバックループをつくる 23 2. ペアプロのスキルを磨く 今日話すこと 3. まとめ
ペアプロによるフィードバックループ 24 引用元:http://www.extremeprogramming.org/map/loops.html
(頻繁な)会話のフィードバックループ 25 いやいや、こうした方 が…。 ここの実装はこうしたい なるほど…。あれ、待って。この エラーハンドリング考慮した方 が…。
一方的に教える(極端な)例 26 ここの実装はこう書い てー。この言語の場合 はこういう書き方があ り…。 はい…はい… (言われた通りに書く) フィードバックループが途絶えてしまう
なぜフィードバックループを作りたいか • ペアの間でフィードバックループが作れれば、数秒ごとに相手 の見方・考えが手に入る ◦ 大体が自分では思いもよらなかった考えのはず • 思考を深めるきっかけとなる 27
フィードバックループを作る →頻繁に会話をする
頻繁に会話をするためには
23. 10分から15分おきに、ドライバーとナビゲーターを 交代しています か? 頻繁にドライバーとナビゲーターを交代することに より、より自然に知 識の共有・システムの理解度を深めることができます。 30 『ペアプロの心得』https://gist.github.com/j5ik2o/2970973
頻繁なドライバーとナビゲーターの交代
ドライバー交代のパターン • 時間による交代 • テストによる交代 • 自然な交代(キーボードを取り合う) 32
ドライバー交代のパターン • 時間による交代 • テストによる交代 • 自然な交代(キーボードを取り合う)← オススメ 33
34 じゃあやりましょう。どのへんのコード 触るか当たりつきます? キーボードを取り合うイメージ
35 じゃあやりましょう。どのへんのコード 触るか当たりつきます? ◯◯ユースケースのメソッドのとこ ですかねー キーボードを取り合うイメージ
36 じゃあやりましょう。どのへんのコード 触るか当たりつきます? ◯◯ユースケースのメソッドのとこ ですかねー OK。じゃあテストコード書きましょう キーボードを取り合うイメージ
37 テストコードのアサーション書きま す…(止まる) じゃあやりましょう。どのへんのコード 触るか当たりつきます? ◯◯ユースケースのメソッドのとこ ですかねー OK。じゃあテストコード書きましょう キーボードを取り合うイメージ
38 テストコードのアサーション書きま す…(止まる) お、なんか悩んでます? じゃあやりましょう。どのへんのコード 触るか当たりつきます? ◯◯ユースケースのメソッドのとこ ですかねー OK。じゃあテストコード書きましょう キーボードを取り合うイメージ
39 テストコードのアサーション書きま す…(止まる) お、なんか悩んでます? …あーっと…Kotlinのユニットテス トってアサーションどうするんでし たっけ じゃあやりましょう。どのへんのコード 触るか当たりつきます? ◯◯ユースケースのメソッドのとこ
ですかねー OK。じゃあテストコード書きましょう キーボードを取り合うイメージ
40 テストコードのアサーション書きま す…(止まる) お、なんか悩んでます? ああ、なるほど。ちょっとキーボード 借りますね …あーっと…Kotlinのユニットテス トってアサーションどうするんでし たっけ じゃあやりましょう。どのへんのコード
触るか当たりつきます? ◯◯ユースケースのメソッドのとこ ですかねー OK。じゃあテストコード書きましょう キーボードを取り合うイメージ
41 このライブラリ使っているんで、こう書 けば…(タイピングする)
42 ああ、なるほど。そう書くんです ね。じゃあ続き書きます (キーボード取り返す) このライブラリ使っているんで、こう書 けば…(タイピングする)
43 はい ああ、なるほど。そう書くんです ね。じゃあ続き書きます (キーボード取り返す) このライブラリ使っているんで、こう書 けば…(タイピングする)
44 はい ああ、なるほど。そう書くんです ね。じゃあ続き書きます (キーボード取り返す) …よし、テスト期待通り落ちました ね このライブラリ使っているんで、こう書 けば…(タイピングする)
45 はい ああ、なるほど。そう書くんです ね。じゃあ続き書きます (キーボード取り返す) …よし、テスト期待通り落ちました ね じゃあ実装やっちゃいますね(キー ボード取る)……よし、通った このライブラリ使っているんで、こう書
けば…(タイピングする)
46 はい ああ、なるほど。そう書くんです ね。じゃあ続き書きます (キーボード取り返す) …よし、テスト期待通り落ちました ね じゃあ実装やっちゃいますね(キー ボード取る)……よし、通った あ、ちょっとそこリファクタしたいん
でいいすか?(キーボード取る) このライブラリ使っているんで、こう書 けば…(タイピングする)
47 はい ああ、なるほど。そう書くんです ね。じゃあ続き書きます (キーボード取り返す) …よし、テスト期待通り落ちました ね じゃあ実装やっちゃいますね(キー ボード取る)……よし、通った あ、ちょっとそこリファクタしたいん
でいいすか?(キーボード取る) 確かに。そっちの方が良さそう。それ だったら、こっちのコードも直したい (キーボード取る) このライブラリ使っているんで、こう書 けば…(タイピングする)
キーボードの取り合いが会話を生む • お互いがキーボードを頻繁に取るので、コードについてよく話 し合うことになる • 慣れると、どっちがドライバーかみたいなロールに拘らなくな る ◦ スクラム現場ガイドでも、数分単位で交代するマイクロペ アリングという手法を紹介してる
48
じゃあ、キーボードを取り合うことを 明日からやってみるぞ!
それが難しい
いきなりは難しい • 慣れてない人に、いきなりキーボードを「いつでも取って」とい うのは難しい • 様々な要因 ◦ 目の前のコードや仕様技術の理解 ◦ ペアプロ自体のスキル
51
いきなりは難しい • 特にペアプロのスキルは 相手がいる中で磨かなければならない 52
1. ペアプロはフィードバックループをつくる 53 2. ペアプロのスキルを磨く 今日話すこと 3. まとめ
ペアプロのスキル • いろいろある ◦ 自分の考えを口に出す、問いかける、相手の話を傾聴す る、自分の考えをいつでも変えるマインド • 今回はペアプロに慣れてないメンバーが キーボードを取り合うことを促す方にフォーカスする 54
相手に積極的にドライバーを促すスキル • 場づくり • ナビゲートの抽象度のコントロールする • 問いかける • パートナーの認知負荷を把握して助ける •
キーボードを奪わせる • ペアプロのふりかえり 55
場づくり • リスペクト・信頼関係が無いとペアプロは成り立たない • チームができたばかりなら、相互理解を深めるワークをする のがオススメ • Joinしたてのメンバーや、新しくペアプロを取り入れるといった 場合はペアプロの心得の読み合わせなどをする 56
『ペアプロの心得』https://gist.github.com/j5ik2o/2970973
経験の浅いメンバーへ伝えること • ペアプロを楽しいと思う一方で、思うように書けないと自分は 貢献できているのかと不安に思う人も少なくない • ペアに一番貢献できるのは、質問することだと伝える ◦ どんなに素朴な質問でもそれは相手の為になる ◦ 無知をさらけだす勇気を出すことを讃える
57
ナビゲートの抽象度をコントロールする • 最初はなるべく抽象的なナビゲートから ◦ ◯◯のストーリーやりたいから、まずテスト書こう • そこで手が止まるようであれば、何がわからないかを聞いて、 それに応じて抽象度を下げていく ◦ xxxClassを書いて、次にxxxメソッドを書いて〜という詳細
にするのは最後 58
問いかけをする • パートナーの手が止まったり「わからない」と口にしたら、問い かけてわからないの解像度を上げていく ◦ 言語知識が少なくて書けないのか ◦ ソースコードが複雑で追いづらいのか • なるべく相手本人が言葉にできるようにする
59
パートナーの認知負荷を把握して助ける • コードベースや言語知識が少ないと認知負荷を起こしやすい • 何度も手が止まる場合は、まずは一緒にコードを読んで理解 するところから始める ◦ 読んで図を描いてもらい、記憶の補助に使う 60
(余談)プログラマーがコードを書く際の5つ活動 • 検索:コード内を調べ、特定の情報を探す活動 • 理解:コードを読んで実行し、その機能を把握する活動 • 転写:単にコードを書く活動 • 増強:既存のコードに新しい機能を追加する活動 •
探索:目指すゴールが漠然としたまま探索する活動 これらの活動を同時にやると認知負荷高まりやすいらしい 61 参考:『プログラマー脳』
ある程度慣れたらキーボードを奪わせる • キーボードを奪う経験は大抵は無いので積んでもらう • 今日はキーボードは譲らないと宣言してペアプロする ◦ 「ドライバーやります! …で、ここからどう書くんです か?」はアリと伝える ◦ 「書きたくなったら、キーボード奪って下さい」と伝える
62
ペアプロのふりかえりをする • 1日の終わりに15〜30分程度でペアプロのふりかえりをする ◦ ペアプロ中に良かった行動をフィードバックする ◦ ペアプロのやり方について改善できることはないか ◦ ペアプロ中に質問できなかったところを質問する 63
いくつか試してみて
数か月くらいで効果は見えてきた • 最近Joinしたメンバーに試してみた • 2〜3ヶ月くらい経つと、特定のAPIの開発などは「じゃあ書きま す」と宣言してリードしてくれる姿が増えてきた • まだ1人にしか試してないので、再現性があるかはもっと検証 が必要 65
自分の伝え方についてものびしろが見えた • もともと私もJoinしたてはキーボード取って慣れよ。というスタ イルだったので、チーム立ち上げ時もそれで上手くいくと思っ てた • 今回の経験を機に、もっと新しく入るメンバーに寄り添えるよう なペアプロができるかもしれない。という学び 66
まとめ
まとめ • ペアプロの本質は考えること • ペアの相互作用により思考を深めてゴールを目指す • 数分おきにキーボードを取り合い、 自然に交代するのが理想のペアプロの1つ • いきなりそこを目指すのは難しいので、経験者のサポートす
るスキルは磨く必要がある 68
参考文献 • Kent Beck, Cynthia Andres(著), 角 征典(訳) (2015) 『エクストリーム・プログラミング』オーム社
• Mitch Lacey (著), 安井 力, 近藤 寛喜, 原田 騎郎(訳) (2016) 『スクラム現場ガイド』マイナビ出版 • Robert C. Martin(著), 角 征典, 角谷信太郎(訳) (2020)『Clean Agile 基本に立ち戻れ』ドワンゴ • フェリエンヌ・ヘルマンス (著), 水野貴明 (著), 水野いずみ (著) (2023) 『プログラマー脳 ~優れたプロ グラマーになるための認知科学に基づくアプローチ』秀和システム • James Shore (著), Shane Warden (著), 木下 史彦(監訳), 平鍋 健児(監訳), 笹井 崇司 (訳) (2009) 『アート・オブ・アジャイル デベロップメント』オライリージャパン • 『ペアプロの心得』<https://gist.github.com/j5ik2o/2970973 > 69
Thank you!