ミスして当たり前のプログラミング

今や豊かな生活を送るために「プログラミング」は欠かせない分野となりました。

身近な家電製品からパソコン、スマートフォン、ゲームなど、様々なモノでプログラミングは活躍しています。

しかし、特にスマホアプリなどを利用していると遭遇しがちなのが「バグ」や「不具合」です。

バグなどの修正アップデートがされたりと、アプリが完成してリリースした後に発見されるバグや不具合は決して珍しいものではありません。

プログラミングという工程にミスはどうしても付き物で、完全に「ゼロ」にすることは非常に難しいということです。


ミスを少しでも少なくするために

とはいえ、デベロッパという立場からすれば、少しでもバグや不具合は少なくしてからリリースしたいのは当然のこと。

ミスを少しでも減らすために、様々な開発手法などを採用して試行錯誤しています。

今回の記事で注目していく「ペアプログラミング」もプログラミングにおける開発手法の内の1つです。

その名の通り「ペア」でプログラミングをしていきます。


ペアプログラミングに注目


今回はその「ペアプログラミング」とは一体何なのかという点を1つずつ解説していきます。

そして、ペアプログラミングを実践することによるメリットや効果、ペアプログラミングの「難易度」にまで注目していきましょう。

実際にペアプログラミングを実施するうえで必要となる準備まで解説いたします。


ペアプログラミングとは?

それでは早速、ペアプログラミングとは一体何なのかというポイントを解説いたします。


2人で1つのプログラムを作る

ペアプログラミングとは先ほどお伝えした通り、2人1組で取り組むプログラミングのことです。

1つのプログラムを2人で開発すると言い換えることもできるでしょう。

アジャイル開発で取り入れられる傾向にある手法で、エクストリームプログラミングのプラクティスの内の1つです。


パソコンを共有して行う

1台のパソコンを2人で利用して、共同で開発を行います。

ここで頭に留めておきたい注意点が、2人同時にプログラミングをするわけではないというポイントです。

1人は「ナビゲーター」、もう1人が「ドライバー」とそれぞれ役割を担い、取り組んでいくことになります。


ナビゲーターとは?

ナビゲーターは、まさにプログラミングの「方向性」を指示・アドバイスする役割です。

仕様に基づいてコード記述を行えるように指示をしたり、コードでミスを発見したら指摘するといった「サポート」的な動きをします。

そのため、ナビゲーターはパソコンを直接操作するわけではなく、基本的にはプログラミングしているドライバーの姿・パソコン画面を見ることになるでしょう。

リアルタイムにコードレビューを行っているような感覚ともいえ、いわばレビュアーを兼ねていると表現できるかもしれません。


ドライバーとは?

対して、ドライバーはナビゲーターの指示に従いながら実際にプログラミング・コーディングを行います。

ペアプログラミングで実際にパソコンを操作するのはドライバーです。

もちろん、ナビゲーターの指示などを全てを受け入れればよいというわけではありません。

要所要所で改善の提案を行ったりすることも、ペアプログラミングにおいて重要だといえます。

一方的に指示などを行うのではなく、双方でコミュニケーションを取りながら行うことで知識を共有できるというメリットがあるからです。


交代して行う

ナビゲーターとドライバーは、一度担当が決まった後はずっとその役割でい続けるわけではありません。

時間などで区切り、定期的に役割を交代して開発を進めていくのです。

おおよそ30分から1時間を目安になります。時間的なポイントも押さえておきましょう。

ペアプログラミングはどちらかが常にコーディングをし続け、もう一方がレビューをし続けるものではないということです。


ペアプログラミングを実践するメリットや効果

さて、一見すると1つのプログラムを2人で開発するというのは非効率的に思えるかもしれません。

しかし、ペアプログラミングには確かなメリットがあります。

実際にペアプログラミングを行うことで得られるメリットとして、5つ挙げてみましょう。

  • ミスを減らせる
  • 程よい緊張感が得られる
  • レビュー時間を削減できる
  • 学習速度の向上
  • 新たな知識を得たり、視野が広がる可能性がある

1つずつ簡単に解説を進めていきます。


ミスを減らせる

ペアプログラミングで最も大きなメリットとして挙げられるのが「ミスの削減に繋がる」というポイントです。

1人でコーディングをしていると、イージーなミスにも気が付かないことが少なくありません。

しかし、ペアプログラミングではナビゲーターが随時チェック(レビュー)してくれている環境下でコーディングすることになります。

そのため、仮にミスをしても指摘してもらえる可能性が高いです。

プログラムについて知識を持った人が2人で開発に取り組むことになるということになるため、ミスを起こす可能性を減らせるでしょう。

どちらかがミスを犯しても、もう片方のエンジニアがしっかりと気づき、指摘を行えればよいということになります。


程よい緊張感が得られる

ある種当たり前のことですが、プログラミングをしている姿、コードをリアルタイムで見られることをプレッシャーに感じる方もいらっしゃるでしょう。

しかし、これがペアプログラミングのメリットでもあります。

あえて緊張感を持ちながらコーディングを行うことで、やはりミスが減らせるからです。

また、コーディングという作業への集中力も増すでしょう。

ついメールをチェックしたり、他の業務・タスクに意識が逸れてしまうという事態を避けられます

他の作業に意識を向けず、ひたむきにプログラミングに集中し、自分のリソースを割くことができるでしょう。

しかも、そのコードをナビゲーターがリアルタイムでチェックしてくれるため、より質の高いコードを記述できるはずです。

結果的にコードの質や生産性の向上にも繋がるのが、ペアプログラミングだといえます。


レビュー時間を削減できる

ペアプログラミングで作ったプログラムは、先ほどまでに触れてきた通り比較的質が高く、ミスの少ないコードになっていることが予想されます。

そのため、第三者のエンジニアがレビューを行う際に所要時間を減らせる可能性が高いでしょう。

ペアプログラミングの最中に仕様にそぐわないコードを記述すれば、適宜指摘されて修正を行っているはずです。

コードレビューではそういったミスの指摘などが行われるため、結果的にレビュー時間の短縮にも繋がります


学習速度の向上

新しくプログラミング言語を習得するということは、言語にもよりますがやはり労力を要するもの。

そのため学習コストが高い言語、低い言語というカテゴライズもされています。

しかし、今回注目しているペアプログラミングの取り組み方次第では、新しい言語の学習速度を飛躍的に向上させることができるでしょう。

例えば、既にJavaを習得しているエンジニアと勉強中のエンジニアがペアプログラミングを行ったとしましょう。

そうすると当然後者のエンジニアは多くの知識を吸収できます

ナビゲーター・ドライバーどちらの立場であったとしても、確実に1人でのJava開発・勉強では得られない経験値を得られるはずです。

このようにエンジニアの学習という観点でも、ペアプログラミングにはメリットがあります。


新たな知識を得たり、視野が広がる可能性がある

先ほどお伝えした「学習」とも通ずる部分ですが、ペアプログラミングを行うことは新たな知識の習得や視野の拡大に繋がります。

自分1人では思い付かなかったような処理の方法や、記述の仕方などをもう一方のエンジニアから吸収できるかもしれません。

このように、ペアプログラミングはお互いがお互いを高め合うことができる開発手法だといえるでしょう。


ペアプログラミングを実施するうえで難易度が高い部分

さて、これまでペアプログラミングのメリットに注目してきましたが、やはり難しい部分も幾つかあります。

ここからは、ペアプログラミングを実施する上で難しいと考えられる要素について解説いたします。


ベテランにとっては退屈な時間

メリットで触れた部分に関連しますが、熟練のエンジニアがペアプログラミングを退屈に感じるというケースも少なくないようです。

先ほどメリットで、既にJavaを習得しているエンジニアと勉強中のエンジニアでペアを組めば学習速度が向上するとお伝えしました。

勉強中の立場からすれば間違いなく吸収すること、できることが多く貴重な時間・機会になります。

しかし、既に習得している立場からすれば、得られるものが少ないかもしれません。

1人で作業した方が効率が良いようにも感じられてしまい、かえって集中力が落ち、モチベーションも低くなってしまう可能性があります。

とはいえ、これは学習速度の向上というメリットと表裏一体になっているところ。

既に言語を習得していて、初心者のエンジニアとペアプログラミングをすることになった場合です。

気持ちを切り替えて取り組むことで、親身になってアドバイスをしながら取り組めるかもしれません。


ペア次第で起きる生産性や作業効率の低下

ペアプログラミングは、2人で取り組むものです。

人間同士ですから、当然「合う」、「合わない」が生じます。

ちょっとしたコードの書き方の違いで衝突・対立が起こる可能性も考えられるでしょう。

また、ペアプログラミングがそういうものだとはいえ、人にミスを指摘できない苦手と組むこともあるかもしれません。

逆にミスを指摘しづらい相手がペアになったというケースもあるでしょう。

そうなると、結果的に作業効率が低下したり、本来防げたミスが発生したり、生産性が低下してしまうという事態に陥る可能性もあります。

とはいえ、ペアを組む段階で周囲ののチームメンバーなどが上手い組み合わせをすれば防げる要素ともいえます。

ペアプログラミングを採用する場合は、いかに工夫してペアを組むかなど、対策を練る必要があるでしょう。


ペアプログラミングをするために必要となる準備

さて、ペアプログラミングを実際に採用することになった場合、準備が必要となってきます。

例えば、ペアで開発に取り組む場所を用意しなければなりません。


1台のパソコンに対して2台のキーボード・マウスが一般的

一般的には1台のパソコン・モニターに2台のキーボード・マウスを繋げるケースが多いようです。

キーボードとマウスという入力デバイスが1台しかなければ、その都度譲り合う時間などが発生してしまいます。

スムーズに開発を進めていくためにも、キーボードとマウスは2台あったほうが便利です。

理想としてはモニターも2台にできるといいでしょう。


モニター2台の意味

モニターを初めから2台準備しておけば、お互いにベストな角度や位置でモニターに表示されているコードをチェックできます。

モニターの角度などが要因となって余計な疲労を感じてしまうことにも繋がりかねません。

そういった事態を避けるためにも、2台モニターを準備する方が得策だといえます。


「ペア」だけど3人でもできる?

ペアプログラミングは「ペア」、つまり2人組で行うのが一般的です。

対して、原則3人以上でペアプログラミングのような開発を行う手法が存在しています。

それが「モブ・プログラミング」です。

まだ広く普及こそしていませんが、この「モブ・プログラミング」もペアプログラミング同様「ナビゲーター」と「ドライバー」に役割を分担して行います。

原則が3人以上となっているため、3人ではなく4人などで行われるケースもあるようです。

今後、普及していく可能性があるかもしれないのでモブ・プログラミングというワードだけでも頭に入れておくと役に立つかもしれません。


ペアプログラミングはプログラムのミスを減らし、コードの質を高くできる

今回の記事では、ペアプログラミングについて注目してきました。

メリットや実際に行うとなると難しい部分などまでみてきましたが、享受できるメリットはかなり大きいものだといえるでしょう。

「ナビゲーター」と「ドライバー」に役割を分担し、2人で1つのプログラム開発を行うことで、ミスを減らすことができます

程よい緊張感とともにプログラミングを行うことになるため、集中力が増し、結果的に質の高いコードを記述できる可能性も高いです。

ペアプログラミングは、1人だけが全力で取り組んでも意味がありません。

お互いに協力し合い良いコード(プログラム)を作るという意識を共有しながら取り組むようにしましょう。

ペアプログラミングを行う意味を考えながら開発に取り組んでみてください。