プログラマが知るべき97のこと/1人より2人
プログラミングには、じっくり物を考えることが必要、じっくり物を考えるには1人になる必要がある…。プログラミングは1人でする作業、というステレオタイプはそこから生まれたのでしょう。
しかし最近では、プログラミング作業の進め方は変わってきています。「一匹狼」風の方法ではなく、複数人で協力して進めるという方法が主流になってきているのです。協力して作業をする方が、品質も生産性も、自分の仕事に対する満足度も上がると私は思います。プログラマどうしの連携を緊密にするのはもちろんですが、プログラマでない人たち、たとえばビジネスアナリスト、システムアナリスト、QA担当者、ユーザなどとの関係も密にすべきです。
つまり、プログラマはもはや、技術が優れているだけでは十分でないということです。他人との連携でより大きな成果が上げられるようでなくてはならないのです。
ここでいう協力、連携というのは、単に人に何かを教わったり教えたりということではないし、また単に会議で話し合ったりすることでもありません。ただ他人の「手伝い」をするということではなく、1つの仕事を他人とともに進めるということなのです。
私は「ペアプログラミング」の信奉者です。ペアプログラミングは、協力の究極のかたちと言ってもいいでしょう。ペアプログラミングの利点は、プログラマとしてのスキルが確実に向上するということです。プログラミングの技術、あるいは問題領域についての知識が自分より上の人と組んだ場合には、間違いなくその人から多くのことを学べます。逆に自分の方が上だ、った場合も、パートナーに説明しなくてはならないので、すでに知っていたことをさらに詳しく学ぶことになります。その過程で、今まで知らなかったことも多く学ぶはずです。必ず両者がお互いから何かを学ぶことができるのです。
ペアを組めば、目の前の問題の解決に対して、2人分の知識、2人分の経験が活かせることになります。プログラミング、問題領域について2 人分の知識と経験があれば、1人では決して見えないようなことも見えてきます。その結果、より優れたソフトウェアをより効率的に開発することができます。両者の知識や経験に大きな差があったとしても、お互いが相手から何かを学びます。知識や経験が上の人間が、下の人間から何かを学ぶことも多いのです。新しいキーボードショートカットを覚えることもあれば、未知のツールやライブラリに触れることもあるでしょう。また当然、知識や経験が下の人間は、ペアを組むことで急速に力をつけることになります。
ペアプログラミングの支持者は、全員がそうではありませんが、多くがアジャイルソフトウェア開発の支持者です。ペアプログラミングに否定的な人がよく言うのは「仕事は1つなのに、どうして2人のプログラマに給料を払わなくてはならないのか」ということです。そう言う人には、私は「嫌ならやめればいい」と答えるしかありません。私が言いたいのは、1人よりもペアのときの方が、1つの仕事のために使える技術やテクニック(IDEを使いこなすコツなども含む)が増え、問題領域についての知識も増えるため、ソフトウェアの品質が向上する可能性が高いということです。また「宝くじのリスク(優れた知識、技術を持ったプログラマがある日、宝くじに当たって、急に会社を辞めてしまうリスク)」も緩和できます。
ペアプログラミングのパートナーから、今まで知らなかったキーボードショートカットを教わったとして、それによって得られる長期的な利益はどのくらいでしょうか。ペアを組むことによって、ソフトウェアの品質は全体としてどのくらい向上するでしょうか。それを評価する方法はあるでしょうか。難しい問題に直面した時も、2人であれば行き詰まらずに解決できることが多いですが、その効果が具体的にどのくらいか知ることはできるでしょうか。ある調査によれば、ペアプログラミングには、生産性、作業速度を40%向上させる効果があるという結果が得られています。ただし、効果を定量的に評価することは難しいようです。「宝くじのリスク」を緩和させる効果なども、具体的にどのくらいかを知るのは容易ではありません。
ペアプログラミングに向いているのはどういう人でしょうか。またペアの相手にはどういう人を選ぶべきでしょうか。もし開発チームに加わったばかりの新人なら、ペアの相手には、知識も経験も豊富な人を選ぶべきでしょう。またそれと同じくらい重要なのは、人間関係を円滑にできる人、また人にものを教えるのが得意な人を選ぶことです。問題領域についての経験が浅い人は、その領域についての経験が豊富な人を選ぶべきです。
誰がいいのか確信が持てない、という時は、まずはとにかく同僚のうちの誰かと組んで試してみるといいでしょう。そして、重要な問題、難しい問題の解決に共に取り組み、うまくいくか様子を見ます。何度か相手を変えて試してみてください。