新人プログラマ注目!ペアプログラミングのメリットデメリットとは?

ペアを組んでプログラミングを行う事についてメリット・デメリットや詳細をあなたはどこまで知っていますか?

この記事では、ペアプログラミングの作業方法から、ペアを組んでプログラミングをすることによって自分はどのように成長することができるのか。良いところも悪いところも、徹底解析致します。

出典:pixabay

ペアプログラミングとは

0a89d21ab5da646bdc40cafbed22b391_s

出典:photo AC

2人のプログラマーで開発を行う手法

ペアプログラミングとは、2人のプログラマが1台のワークステーションを使い、共同でソフトウェア開発を行う手法で、相補的な作業を行うことです。
キーボードを操作してコードを書く方を「ドライバ」と言い、ドライバに対して助言や提案をする方を「パートナー」「オブザーバー」「ナビゲータ」と呼びます。

ドライバは、ナビゲータがやってくれることを踏まえてキーボードを操作し、途中でナビゲータと交代しても良いとされています。
ナビゲータは、エラーチェック・APIの検索・コードのより良い構造を考えます。
30分毎、あるいは単体テストを1つ完成させる度に役割を交代するのが良いとされています。
また、1日1度の頻度でパートナーを変えることも、作業効率化に良いとされています。
2人で行う事によって、規範意識が増え、個人の作業よりも怠けることなく作業を進める事ができる可能性も高くなります。
また、より良いコードを作れることや、相乗効果により設計の質が向上することも期待されます。

アジャイル開発(特にXP)でよく採用される

アジャイルソフトウェア開発とは、ソフトウェア工学において迅速かつ適応的にソフトウェア開発を行う軽量な開発手法群の総称です。

近年では、この開発法が数多く考案されており、主な手法例としてエクストリーム・プログラミング(XP)などがあります。

これまでは開発が進むにつれて変更コストが大きくなることを前提に開発手法が構築されていましたが、これに対してXPは、自動テストを導入するなど様々な対策をすることにより、開発が進んでも変更コストが大きくならないように工夫されています。

つまり、変更に対する柔軟性が実現されているのです。

また、XPは比較的少人数の開発に最も適用しやすくなっており、5つの価値と19の具体的なプラクティスが定義されています。

XPはドキュメントよりもソースコードを使用し、組織的開発の歯車となる事よりも、個人の責任と勇気を重んじる人間中心の開発プロセスであるとしています。
<h2ペアプログラミングの作業方法

ペアプログラミングとは、プログラミングスタイルの一つで2人のプログラマが共同で実装を行うことをいいます。

一人が実際のコードを記述し、もう一人はチェックしながらナビゲートします。この役割を随時交代しながら作業を進めていきます。

まず初めに、インデント括弧の付け方などの人の好みになる様な細かい事や、1~2時間で終わらせることのできる作業内容を決めます。

作業に入ってからは、コミュニケーションをしっかり取り、お互いの作業内容を確認し合いながら進めていきます。

それぞれが細かく伝え合う事で、作業ミスをなくすだけでなく、より良いプログラミングをつくることが可能になってくるのです。

相手の作業内容を5分確認しないだけで、一人でプログラミングを書いているのと同じことになってしまうのです。

そのため、お互いがお互いを頼りにし支え合いながら進めていくことがとても大切です。

また、ドライバの作業では集中力を使いますし、ナビゲータは観察力を必要とします。
30分以上保つことは難しいとされていますので、休憩を挟みながら作業は交代して行っていくのが良いとされています。

また、ミスに気づいてもすぐ指摘をするのではなく、その行を書き終わるまで待ちます
途中で話しかけてしまうと気が散って集中力が切れてしまう恐れがあるからです。

このように、ドライバになると、打ち込むことで作業を覚える事ができるので、経験の少ない方は数多くドライバの仕事をすると良いでしょう。

ペアプログラミングのメリット

d7169be8fa3729bda3fd38c420a54b41_s

出典:photo AC

新人がベテランからノウハウを学習できる

ペアを組むことによって、一人でプログラミングしている時と同じ状況を作らないようにするためにも、相手とコミュニケーションを取りながら作業を進めていくことが必要不可欠になってきます。

自分より経験があり技術力がある人に見てもらってペアプログラミングすることにより、一人でコードを書いているよりもコーディングの勉強になる上に、開発を行う際にもどのように実装されたかをリアルタイムで見ることができるので、情報共有がしやすくなります。

また、一人がコードを書いている時、もう一人はそのコードを同時に見ているので、問題点があればその場で指摘ができるうえ、解決もその場で行う事ができます。

以上のように、新人がドライバになってコードを打ち込んでいる時は、ベテランの方に確認してもらうことができますし、新人がナビゲータになって観察力を磨いているときは、ベテランの仕事の仕方を勉強することができるというメリットがあります。

作業効率アップ

ソースコードを確認する時間が短縮できるため、Gitでソースコードを管理しているときにもメリットがあります。

GitPull Requestを送って第三者にマージしてもらう場合、その第三者がリクエストした人とペアプログラミングをしていれば、リクエストされたコードを読むのに時間をかけなくてもどういう実装がされているのかがわかるので、すぐにマージをすることができます。

また、二人で作業することにより、コーティングコードレビューをほぼ同時に行う事ができますし、二人以上の人がコードを書いて確認することにより、自分の書いたコードに責任を持ちやすくなります。

その為、万が一障害などが起こった場合でも、責任を持ったコードならより対処がしやすくなります。

その他に「リモートペアプログラミング」といわれる作業の仕方もあり、テレワークと呼ばれる勤労携帯の一種で、情報通信機器等を活用し、時間や場所の制約を受けずに、柔軟に働く事ができる形態があります。

何らかの理由で遠隔地で作業する場合は、文字を入力する度に相手側のコンピュータに変更がリアルタイムで繁栄されるエディタや統合開発環境のフライングを使用したり、画面転送のためのソフトウェアを使用したりして行われます。

正確なコードを書ける

2人でプログラミングすることによって、一人がコードを打ち、もう一人が指示や確認を行う為、作業がより正確になり、手戻りが少なくなります。

ソフトウェア開発だけでなく、その他多くの分野における自明の理である「人は、自分自身の間違いに気付かない」という言葉があるように、自分の打ったコードの間違いに気づくことは難しいです。

しかし、ペアプログラミングなら、コードを打ち込んでいない方が常に迅速にタイピングミスを見つけることができます。

また、プロジェクトでペアプログラミングを行った場合に頻繁にペアを組みかえると、それぞれの知識を共有し、集団的なコード所有権が発生します。

知識の相乗効果

初心者であっても、それぞれプログラミングテクニックなどを持っているため、ペアプログラミングを行った場合には個々の知識をチーム全体で共有することができます。

また、2人以上の知識を出し合うことで、より良いコードを作成する事ができ、相乗効果により設計の質が向上することが期待されます。

その他、勤労意欲の向上も見られます。
チームの各人が互いをよりよく知ることができる為、結束力を生み出しやすくなり、一人で作業するよりも楽しいと感じる開発者もいるのです。

経験豊富なプログラマであれば、さまざまなアルゴリズムや実装のテクニックを思いつくことができますが、そのようなプログラマがチーム内に多く存在するケースは稀です。

ペアプログラミングは、どのようなコードを作成するか1人で悩みこんでしまうことをなくし、より良いアルゴリズム・コードにブラッシュアップしていくことが可能になります。

知恵を出し合うことがペアプログラミングなので、結果的にチーム内で「アルゴリズム」や「実装のテクニック」の共有が進み、新人プログラマはベテランプログラマから多くの事を学ぶことになります。

ペアプログラミングのデメリット

f84c04841f729a9bba01521deebe2158_s

出典:photo AC

ベテランは退屈

経験を積んだ開発者によっては、新人の教育要素が強い場合、ペアプログラミングを一種の退屈な指導と捉えることもあります。

一部の技術者は1人で作業することを好み、ペアでの作業を面倒と感じることもあるのです。

しかしこれは、上級者側のコミュニケーション不足指導不足であるとともに、そのような人物はリストラの対象となってしまうこともあると言えます。

また、ペアの組み合わせによっては、双方が相手に興味を示さずに「きっと大丈夫だろう」という考えの元に行動してしまい、2人でやるはずの作業が1人でプログラミングしている時と変わらない結果となってしまい、チェックが疎かになってしまうこともあるので注意が必要です。

プロジェクトリーダーや人事はお互いが「パートナーはあの人で大丈夫なのか」と思えるような人材同士で、険悪な関係にない者同士をペアにする必要があり、リーダーや人事の高い能力が求められます。

エラーやログの確認が習慣づかない

プログラミング言語のエラーメッセージや、ライブラリの出力するエラーメッセージは問題箇所を特定するために、人間が人間の為に記述した情報なのですが、成長しづらいプログラマは、それを読もうとしません。

もう一人に頼ってしまい、シンタクスチェックをしなかったり、エラーの確認を怠ってしまう場合もありますが、何か問題があったという情報として2値化してとらえてしまうのです。

IDEであれば、せめて該当モジュールの該当箇所まですぐさまジャンプできますが、これが生のvimWebブラウザ経由で出力されたログメッセージであれば、理解してジャンプするのは自分の仕事になります。

読まない」「該当箇所にジャンプしない」「エラー画面を表示する時間が極端に少ない」ということが目立ち、そういう方の場合、何をしているかというと、自分の先ほど書いた箇所をまじまじと見つめ「typoがないか」確認しながら、メソッド名のところをいったりきたりしています。

エラーメッセージを読まない場合、バグの修正箇所の可能性は無限に存在します。

エラーメッセージをきちんと読み、意味をひとつひとつ確認し、エラーメッセージと問題の対応関係を理解させる必要があります。
また、それを引き起こす最小のsnippetを作り、様々なケースについて想定させることが大切になってきます。

他にも、問題の探索の仕方を知らない場合があります。

printfデバックであれば、何がモジュールに入力されてどのように変化し、エラーを引き起こしたのかを調べることで問題の概要を理解し、コールスタッフを順番にあがっていくことで問題箇所の特定をすることができます。

しかし、探索の仕方を知らない場合は、正常に動いているだろうと予想されるところから確認を始めたり、コールスタックの順序関係を把握していない状態でやみくもに情報の出力をしてしまいます。

そのため、問題発生してから行動し始める前に、一呼吸おいて問題特定の戦略を話してもらう必要があります。

必要な情報収集はどのようにするのか」「現時点でどこまで正常なのか」などといった質問をしていく中で本人に戦略を立てさせ、情報を一つ得るごとに質問を投げかけながらしっかりと意思を持った探索に誘導していくことが大切です。

意見が衝突することがある

経験を積んだ技術者は、非常に正確なコードを書きます。

ペアプログラミングの目的は、正確性の向上だけではなく、知識や技術の共有という面もあります。

エクストリーム・プログラミングなどでは、コーティング・スタイルは統一すべきとしていますが、今はまだコーティング・スタイルの違いによっての意見の食い違いが生じる可能性があります。

また、2人で1つのプログラミングを行うため、作業の生産性が落ちてしまうことがあるようですが、一方でペアプログラミングにより生産性が大きく向上したという報告も多々あるため、自分たちのチームん適しているかどうかを見極めることが大切になります。

生産性が落ちてしまったとしても、教育的配慮は必要です。

難しい選択をしなければならない時もあるようですが、先輩がナビゲータをし、新入社員がドライバになって実践していくことで、スキルアップに繋がります。

まとめ

一人でプログラミングする場合とペアを組んでプログラミングする場合では、作業の進め方も違いますし、それぞれの好みや個性が出て意見が食い違うこともあるため、ペアプログラミングを苦手とする方もいらっしゃいます。

しかし、逆に自分以外のやり方や考え方から新たな発見ができたり、集中力や観察力が増してスキルアップに繋がることもあります。

自分がベテランになったとき、新人の教育をしてあげられる先輩になれる様、作業の仕方を身に付けておきましょう。

 

TECH::CAMP EXPERTについて

TECH::CAMP EXPERTは最短2ヶ月でプロのエンジニアになれる即戦力エンジニア育成プログラムです。

即戦力レベルのエンジニアになれる教育コンテンツから就職先の支援まで、どこよりも最高品質の教育体制であなたのエンジニアとしてのキャリアをお約束します。

対象は完全未経験者なので、異業種からの転職や全く違う職種からのキャリアチェンジが可能です。

もちろんエキスパートコース以外の授業コースもございます。学習にお役立てください。

expert_bannar_lg5

能戸麻沙美 能戸麻沙美が書きました
  • このエントリーをはてなブックマークに追加
  • Pocket
  • LINEで送る

プログラミングをもっと勉強してみませんか?

当メディアを運営しているプログラミングスクールTECH::CAMPの
お試しカリキュラムが、今なら無料でご覧いただけます!



    メールマガジン登録でTECH NOTEの最新情報とカリキュラムを受けることができます

SNSでもご購読できます。

このエントリーをはてなブックマークに追加
記事をシェア→

無料プログラミング体験会!×

日本最大規模のプログラミングスクールTECH::CAMPの説明会に参加! 無料体験会申し込み