ペアプログラミングをはじめるために
ペアプロ初心者の自分がペアプロやるための資料です
今回はAndroidのメンターとして初学者とペアプロする想定です
ペアプロに期待するポジティブなこと
1)技術知識の共有
初学者に新しい知識や効率的な開発方法を教えたり、教える過程で気づいたことなどの知識を互いに共有できる
2)属人化の防止
知識が共有されることでできるタスクが増え、作業の属人化を防ぐことができる
3)チームの技術力の向上
知識の共有化によってチーム全体の技術力が底上げされる
ペアプロによって予想されるネガティブなこと
1)一時的な開発速度の低下
開発速度を正確に測っているわけではないので全体的な速度までは自分にはわからないが、一時的に開発速度は遅くなるというのは一般的に言われていると思う
2)疲労
ペアプロは非常に神経を使うので自分自身疲れた経験もあり、同僚からも疲れるという話はよく聞く
ペアプロの準備
機材/環境
1)隣り合う座席
今回はリモートは想定してないです
2)ディスプレイ
二人の間に置く用。あまり小さいと見づらいかも
3)各自普段使っているPC/Macやキーボード
使い慣れてるキー配列のキーボードやIDEの設定が違うとストレスになる
4)開発環境
開発環境は予めセットアップしておき、すぐにペアプロできるようにしておく
Githubを使ってるのでリポジトリからcheckoutもしておく
このあたりの設定が複雑であれば一緒に行ってもよさそう
以下実際にやってみてあるとよさそうだったもの
5)(A3ぐらいの)ホワイトボードとペン
実際にやってみて言葉で説明するより図で説明したいケースとかメモを取りたいときに重宝しそうでした
6)タイマー
思いの外、時間が経つのが早いのであると便利かも
スマホのタイマー機能で大丈夫そう
心構え
1)相互尊重
人間は感情を持っているので言葉遣いや態度などから反感や萎縮を起こすことは容易に想像できる。そういったことを防ぐためにも相互に尊重し合うことが基本として大事な気がする
2)説明責任
コードを書く側も見る側もどうしてそうしたのか、そうしたほうがいいのかの理由を明快に説明すると互いの成長につながる
このあたりも読んでおくと良さそう
https://developers-jp.googleblog.com/2019/12/respectful-reviews.html
https://google.github.io/eng-practices/
https://www.contributor-covenant.org/version/2/0/code_of_conduct
ペアプロするタスクの用意
お互いの開発レベルにあわせて既存のIssueやプロダクトバックログから選ぶと仕事に対しても意義のあるペアプロとなるはず
プロダクトオーナーやスクラムマスターなどにはスプリント計画時など事前にペアプロすることは伝えておくとよさそう
ペアプロの流れ
ドライバーとナビゲーターとは?
一般的にコードを書く人がドライバーで、それを見る人がナビゲーターと呼ぶらしい
フロー
1)タスク/心構えの確認
タスクのゴールや作業範囲、影響範囲の確認をします
実際のコードを見ながら説明してもいいかもです
心構えに関しては互いに確認する機会を設けるとよさそう
2)最初のドライバーとナビゲーターを決める
初学者に一通りの作業を経験してもらいたいという目的があれば、ランダムではなく、全体をカバーできるように調整したほうがよいかも
3)コーディング
ドライバーはコードを書き、ナビゲーターはそれを見ながらレビューなどを行う
ドライバーは考えていることを発話しながらやるとコードの意図が伝わりやすいかもしれない
4)ドライバーとナビゲーター交代
作業が一区切りまたは一定時間(15分くらい?)経ったら、commitして交代する
5)作業が終わる
作業が終わったらPullRequestを作ってメンターがApproveしてマージしてしまってよい
6)ペアプロの終わり
初学者が作業に慣れてきたら、もうペアプロしなくてもよい気がする
最後に
ここはこうしたほうがよい、自分のところはこうしている、とかあればコメントなりいただけると幸いです