プログラマが知るべき97のこと/ペアプログラミングと「フロー」
何かに完全に没頭している時(夢中で何かをしていて、時間が経つのも忘れてしまっている時)それはきっと人間にとって幸せな状態です。その状態は「フロー状態」と呼ばれます。しかし、1つのプロジェクトに関わるチームのメンバー全員が同時にフロー状態になり、それが長く持続するというのは難しいものです。フロー状態はいとも簡単に壊れてしまうからです。たとえば誰かに関係のないことを話しかけられ、それに返事をしたりすれば、すぐに集中力は途切れます。少しでも集中力が削がれれば、もうフローは維持できません。
経験のある人なら知っているでしょうが、実はこのフロー状態の維持には「ペアプログラミング」が非常に役立つのです。まだペアプログラミングの経験がない人は、これから書くことを参考に、是非すぐに試してみてください。ただし、ペアプログラミングを成功させるためには、チームのメンバーが個々に努力するだけでなく、チーム全体としての取り組みも重要になります。
ペアプログラミングをするにあたってまず大切なことは、ペアを組むパートナーが自分より経験が浅い場合、忍耐強く接することです。自分より技術のあるパートナーと組む人は、気後れすることなく接するのが大事です。人はそれぞれ違っています。その違いを尊重するのです。自分や他のメンバーの長所、短所がどこにあるのか、それを注意深く見るようにしましょう。気をつけて見ていれば、他のメンバーから学べることは驚くほど多いはずです。
チーム全体としては、各メンバーの持つ技術や知識が、できるだけ多くのメンバーに広まるよう考えてペアプログラミングに取り組むことが重要です。各メンバーはペアを組んだ人と協力し合って作業を進めるわけですが、チームとしては、ペアを組むパートナーや、各人の担当するタスクが頻繁に変わるような体制作りをすべきでしょう。ペアのパートナーやタスクのローテーションに関して、皆の納得できるしっかりとしたルールを定めておくのです。何か問題が起きれば、一時ローテーションを止め、調整をするようにします。タスクを完了させることなく次のペアに引き渡しでも大丈夫です。タスクを中断して次のペアに渡し、ペアのパートナーも変えて別の仕事を始めるのはとても上手くいかないように思えますが、後述する理由により、意外と上手くいくものです。
ペアプログラミングはフロー状態の維持に役立つのですが、それは以下のような理由からです。
不慮の事態の影響を量小限に抑えることができる: 縁起でもない話ですが、仮に開発チームのメンバーの何人かが、ある日突然トラックに際かれたとします。何人のメンバーが入院したら、プロジェクトの続行が不可能になるでしょうか?この質問は「チームが特定のメンバーに過度に依存する体制になってはいないか」と問うているのです。知識や技術が一部のメンバーの独占になってはいないでしょうか、共有できているでしょうか。ペアプログラミングで、ペアのパートナーと担当するタスクをローテーションさせていれば、誰かが急にいなくなっても、その人が担当していたタスクを引き継げる人はおそらくいるでしょう。滞りなくタスクが引き継がれれば、チームの全体としてのフロー状態は維持されるはずです。
問題解決が容易: 何か問題に直面したとしても、ペアのパートナーに相談することができます。1人で悩むより、誰かに相談した方が解決する可能性は高いでしょう。また、担当するタスクはローテーションされていくので、あとで誰かが同じ問題に直面し、以前の解決策について検討することもあり得ます。最初の解決策が仮に最善のものでなかったとしても、あとでより良い解決策を別のペアが見つけるかもしれません。
統合がスムーズ: コーディングにおいては、他人の担当しているコードを呼び出すということがよく起きます。その場合、メソッドの名前や、ドキュメント、テストなどが、見てすぐに機能や内容のわかるものになっていると非常に助かります。もしそうなっていない場合でも、自分かペアのパートナーがそのコードを以前担当したことがあれば、機能や内容がすぐにわかり、簡単に呼び出せます。ペアのパートナーや担当するタスクをローテーションしていれば可能性は高まるでしょう。そのタイミングでペアのパートナーと相談し、ネーミング、ドキュメント、テストの改善を図ることもできます。
割り込みの影響を緩和できる: 作業中には、誰かがやってきて質問をすることもあれば、電話が鳴ることもあります。メールの返事を急いで書かなくてはならないこともあれば、すぐにミーテイングへ出席しなくてはいけない場合もあります。そういう場合でも、ペアプログラミングをしていれば、パートナーに作業を引き継いでもらえます。作業を一時離れていても、その間にパートナーがフロー状態を維持していれば、自分もすぐにフロー状態に戻れます。
新人が早くプロジェクトに馴染む: 担当するタスクと、パートナーをローテーションしていれば、新人が入った場合でもすぐに色々な部分のコードとチームのメンバーに馴染むことができます。
フロー状態になれば生産性は驚くほど向上します。しかし、その状態は簡単に壊れます。自分をフロー状態にするため、またその状態を維持するために、あらゆる手段を講じましょう。