Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
より協力的なペアプロを促すには どうするかを考える
Search
Jun Nakajima
September 30, 2023
Business
3k
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
350
アジャイルの知見の少ないメンバーの多いチームづくりの1年半をふりかえる
jnuank
1
1.2k
そのプランニングに意思、乗せていますか?
jnuank
1
2.5k
スクラムを実践していた私がXPの現場に来て感じたこと
jnuank
2
1.3k
エヴァンス本輪読会お疲れ様会を楽しむために / DDD輪読会での差分とこれから
jnuank
0
220
3つの概念で覚えるLinuxの世界
jnuank
0
22k
1週間ですら見積もれなかったからイテレーションを1日にしてみた
jnuank
0
850
正しくつくるための設計を学ぶ_最終報告
jnuank
1
220
Event Storming Big Pictureを試す
jnuank
0
1.2k
Other Decks in Business
See All in Business
TableCheck Inc. - Company Profile
tablecheckac
0
530
5 quotes that sum up recent trading in the travel sector - August 2026
marketingttc
0
130
malna-recruiting-pitch
malna
0
26k
KEEBHOLIC NAGOYA Vol.2
shakupan
0
170
01_全社_FLUX採用ピッチ資料_Ver.5.7
flux
12
230k
個人的に感動した サクラエディタの機能2026822 ゆるweb
mikikosaka
6
6.3k
プロダクトオーナーを「忙しい」から解き放つ!委任を促す言葉
kawanotron
0
130
株式会社アシスト_会社紹介資料
ashisuto_career
3
190k
AI × 型|FDE的な働き方を再現可能にする「判断の軸」
aictokamiya
0
120
OR Royalties Inc. - Corporate Presentation, September 2026
orroyalties
0
750
株式会社ジェーイーエル会社案内_簡易版202608
jelrobot
0
410
PdMからみた EMの役割の変化 / When EM Meets PdM
hirokiyamamoto14
PRO
1
180
Featured
See All Featured
What’s in a name? Adding method to the madness
productmarketing
PRO
24
4.2k
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2.4k
The Spectacular Lies of Maps
axbom
PRO
1
990
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
1.1k
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
1
1.6k
Between Models and Reality
mayunak
4
450
Building the Perfect Custom Keyboard
takai
2
870
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8.3k
Everyday Curiosity
cassininazir
0
320
YesSQL, Process and Tooling at Scale
rocio
174
15k
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.8k
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
330
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!