Help us understand the problem. What is going on with this article?

ペアプログラミングのやり方

僕がペアプロを試す上で考えたことや、実際に試した結果からの反省点などを踏まえた上で、良さげなペアプロの方法をまとめた。今後の試行錯誤の結果も随時反映させていくかも。

まずは、一つ目。1-2時間おきに5-10分の休憩を挟む。ペアプロに集中していると、休憩を忘れがち。疲れを感じた時に休むのでは、休む時には既に疲れが溜まりすぎている場合が多い。

休憩中には、

  • 遠くを見たりして目の疲れを取る
  • 伸びをしたり歩き回ったりして体をほぐす
  • 近くの人と会話する

などをすると良い。ただし、

  • うたた寝する
  • 水を飲む
  • 軽食を取る
  • 音楽を聴く
  • SNSを見る

などは、再開した時に集中できなくなるので、避けた方が良い。

休憩を入れないと集中力が持たないし、時間を浪費しがちになる。だらだらと何時間も画面に向き合うよりは、1時間しっかりと集中するほうが幸せになれる。

前提

  • ペアプログラミングは二人で行う
  • 各自に一つのPC
  • TDD指向で開発する

Live Share

ペアプロをする上でとても役に立ったので、紹介しておく。Live Shareというのは、Microsoftが提供するサービスで、Visual StudioやVisual Studio Codeで使用できる。一言でいうと、同じファイルを複数人で編集できるようにするサービス。

無料で使用できるので、おすすめ。僕は、VSCode to VSCodeの組み合わせで使った。
vs-code-ls-session.png
(引用元: https://code.visualstudio.com/blogs/2017/11/15/live-share)

参考: https://docs.microsoft.com/en-us/visualstudio/liveshare/

相手とレベルが同じ時

ナビゲータとドライバに役割分担する。30分から1時間を目安に、区切りの良いところで役割を交代していく。こうすることで、ペア内に平等感を醸し出すことができる。さらに、スキルセットの偏りを防ぐこともできる。

前提

以下で説明する方式でペアプロを行う上で、ペアへの信頼は欠かせない。

説明

ナビゲータはドライバのサポートを行う。例えば、ドライバが実装中に調べたいことが出てきたら、ナビゲータに投げる。ナビゲータが調べている間、ドライバは他の作業をする。

ナビゲータはドライバが書いたコードをレビューする。レビューは(余裕があれば)実装と並行して行う。そうすることで、レビューで判明した改善点を早い段階でコードに反映できる。

役割

ナビゲータ

  • プログラムの大局的な構成を考える
  • テストを書く
  • ドキュメントを書く
  • ドライバの疑問をググる
  • ドライバが書いたプログラムをレビューする

ドライバ

  • 実装する
  • 実装する
  • 実装する

タイムテーブル

かける時間 ナビゲータ ドライバ
5-10分 プログラムの構成を考える プログラムの構成を考える
実装の準備(コードを読む等)
20-40分 テストを書く
ドキュメントを書く
ドライバの疑問をググる
コードレビュー
実装
実装
実装

意思決定(ie. 責任の所在)

ナビゲータは、

  • サブルーチンの名前
  • サブルーチンの機能
  • サブルーチンのインターフェース(シグネチャ)

等に関する決定権を持つ。

ドライバは、

  • サブルーチン内で使うアルゴリズム
  • サブルーチン内の変数名

等に関する決定権を持つ。

ナビゲータとドライバで合意形成ができないときは、決定権を持つ側の意見が優先される。このようにすることで、議論が平行線を辿るのを防ぐ。

相手が初心者の場合

プログラミングを学ぶ最も良い方法は、実際に手を動かすことだと思う。ペアプロを教育として用いると、相手は指導者付きの環境で手を動かして学べるので、上達が早いかもしれない。

役割の交代は行わない。1時間を目安に、区切りの良いところで休憩を挟む。

前提

以下で説明する方式でペアプロを行う上で、ペアへの信頼は欠かせない。また、教師と生徒という関係を受け入れてもらう必要がある。

説明

自分(教える側)がナビゲータ、相手(教わる側)がドライバをする。相手に手を動かしてプログラムを作ってもらうことで、単に見せるよりも、高い教育的効果があるかも。

無駄な時間をなくすために、相手には事前に文法書を一通り読んできてもらうことを勧める。文法から教えていては、全然実装が進まない(実体験)。

もしくは、文法を教えてからコーディングに入ると良い。その際、適当な入門書をテキストとして、それに従って教えていけば、順序立てて説明することができる。すでに他の言語を習得している人に教える時は、その言語と対比させながら教える。初めて見るであろう文法事項については重点的に教え、そうでない類推できるであろう事項については軽く流すといったように、緩急をつけて教える。そうすると、時間の短縮になる。また、教わる側も疲れにくいし、飽きにくい。さらに、文法を教える時には、自分の経験談やtipsを交えて教えると良い。

文法の学習は単調なものになりやすいので、一人で進めるには根気がいる。そこで、人に教わる機会を設けることで、短期間で効率よく知識を身につけることができる。そして、そのあとにペアプロを行うと、学んだ知識の定着を図れる。

役割

ナビゲータ

  • プログラムの大局的な構成を考える
  • テストを書く
  • ドキュメントを書く
  • ドライバの疑問をググる
  • ドライバが書いたプログラムをレビューする

(以上に加えて)

  • プログラムの局所的なアルゴリズムを考える
  • レビューを積極的に行う(付きっぱなしでも良い)
  • 関連するtipsを教える
  • (一緒にプログラムを書く)

ドライバ

  • ナビゲータの指示通りに実装する(文法の復習を兼ねて)

タイムテーブル

かける時間 ナビゲータ ドライバ
5-10分 プログラムの構成を考える
テストを書く
見て学ぶ
40-60分 ドキュメントを書く
ドライバの疑問をググる
積極的なコードレビュー
アルゴリズムの指示
経験や知識の共有
指示通りに実装
経験を積む

意思決定(ie. 責任の所在)

あらゆることについて、ナビゲータの意見を優先する。

注意

  • 簡単なサブルーチンの実装にもかなりの時間がかかるので時間と忍耐と覚悟が必要
  • 相手を置いきぼりにしてしまうことがよくあるので、付いてきてるかこまめに確認する
  • 自分よりも相手の方が疲れる(当然!!)ことを理解して、休憩を多めに取る
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away