ケロSEスマートフォン用の表示で見るケロSEケロいSEが日々思う事を書きますこの広告は、90日以上更新していないブログに表示しています。2013-11-15ペアプログラミングのやり方この所ペアプログラミングをする機会が多く、よりよくペアプロするコツってなんだろうな〜と考えた内容を整理しようかと。ペアプログラミングについて書かれた書籍というと、こちら。こちらの書籍には有能なペアプログラマの7つの習慣という章があります。「よりよくペアプロするコツ」に近しいものがあると思うので習慣部分だけを抜き出します。(こういうのってどこまでブログに書いていいものなのだろう)休憩を取る謙虚になる自信を持つ・受容性に富むコミュニケーション耳を傾けるチームのメンバになる妥協と主張のバランスを磨くと、ここまでは先達の有益な知識。ここからは私の考えを整理する為の妄想になります。ペアプログラミングって何?1つのプログラムを、2人ペアで共同開発すること。ペアはドライバーとナビゲータの2つの役割を適宜交代して、開発を進めていきます。ドライバーは、キーボードを操作して直近の課題を解決するコードを書く役割。ナビゲータは、ドライバーが書いているコードが適切なものかをチェックする役割。ペアプログラミングを始める前の心構え相手へのリスペクトを持つ自分へのリスペクトも持つ「俺の方が圧倒的にすごいんだから、俺にだけコードを書かかせろ!」とか「相手のxxさんはすごい人だから、あの人の言う事に従おう...」は、1人がプログラミングしているのをもう1人が眺めているだけになっちゃうのでペアプロの旨みがないです。ペアプロは、パートナからリアルタイムにフィードバックが得られる事に旨みがあるので、萎縮することなく自分の意見を言い、相手の言う事を聴く気持ちが必要です。ペアプログラミングを始める時パートナとの挨拶ドライバ・ナビゲータの入れ替えタイミングを決めるコードを共有する為のリポジトリを作るパートナとの挨拶は、さっき書いた心構えを再確認する為にもきちんと。「よろしくおねがいします」の気持ちを持ってペアプログラミングを始めるのが良いかと。入れ替えタイミングは、開発がリズムに乗ってきて熱中しちゃうと自分がずっとドライバやってた、というのがあるので、事前に決めておくと良いです。目に見える交代契機(時間単位で交代とか、1つのテストケースを満たす実装を作ったら交代とか)にするとわかりやすいです。コードを共有する為のリポジトリを作る目的は2つあります。リポジトリ本来の目的であるコードの共有です。TDDでは適宜リファクタリングもしていくので、安全に作業をすすめる為に、きちんと作業を記録するのが大事。1つはお互いに慣れた開発環境で開発をするためです。1台のマシンだと、OSからキーボード配列から様々な好みが違っていると開発効率が落ちてしまう(最悪宗教戦争に発展する)ので。目の前の課題解決に集中する何をするかを宣言するのは、ナビゲータの方が「この進路で間違ってないよね?」を考えやすくする為です。この宣言があるとナビゲータの方から有益なフィードバックが得られやすくなるはず。「このテストケースをパスするように、テスト対象クラスにxxxのような変更を加えます」とか。目の前の課題解決に集中するのは、キーボードを持っている自分が「やります」と宣言した事を解決できるのは自分だけですし、プロダクト全体の処理を破壊しないか等の全体を見るのはキーボードを持っていないナビゲータ側の方が適しています。ナビゲータの方を信頼して、目の前の課題解決だけに集中しましょう。ペアプログラミングを行う(ナビゲータ編)ドライバに意見を言う時は、具体的手段ではなく目指すゴールを伝えるディティール(コンパイラが指摘してくれるようなタイポとか)は見ない目指すゴールを伝えるのは、さっきのドライバ編とも同じ気がするのですが――例えば、実装中のクラスがイミュータブルにできるのにミュータブルになってしまっているのを発見した時に、「インスタンスフィールド全部にfinalつけてください」というよりも「このクラスをイミュータブルにしましょう」の方が意図が相手に伝わりやすいですよね。ディティールは見ないのは、遅かれ早かれ画面を見ているドライバが気づくような問題(IDEがコンパイルエラーを出すとか)に二人がかりでやるのは旨みがないので...。ドライバが見ていない全体的な部分を見ましょう。「intがIntになってますよ」とか言われたらイラッとする気持ちもありますしw。#さすがに、変数名にhogeとか使いだしたらおいおいって言っていいと思いますけどwお互いに相手を信頼して、別の役割を任せている、を意識するのが良いかと。ペアプログラミングの終わりに最後の挨拶ペアプログラミングの終わりには、相手とのご挨拶を忘れずに(今回のパートナーとまたペアプロしたいなーと思ってもらえるようなのがベストかも)。まとめ色々書きましたが、こういう辺りに気をつければよいのではの箇条書きを全部まとめ。目の前の課題解決に集中するドライバに意見を言う時は、具体的手段ではなく目指すゴールを伝えるディティール(コンパイラが指摘してくれるようなタイポとか)は見ない最後の挨拶10個か〜。Springに参加しました。#devtesting月別アーカイブはてなブログをはじめよう!uasanoさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。