みなさん、こんにちは。またディマ・ヴドヴィンです。Junsをチームに統合することに関する前回の 記事では、効果的な教育と学習の実践としてのペアプログラミングについて簡単に触れました。ここで、チームでのペアプログラミングの実践について詳しくお話ししたいと思います。さまざまなプロジェクトでさまざまなバリエーションを試しましたが、今日は、このアプローチの利点として私が見ているものを共有したいと思います。
ペアプログラミング
ペアプログラミングのしくみを簡単に説明するために、ラリーレースの例を使用できるように思えます。ドライバー(ドライバー)とナビゲーター(ナビゲーター)があります。ドライバーは運転に直接集中しています。ナビゲーターは、私たちが今どこに向かっているのかを制御し、パイロットに次のターンとジャンプについて伝えます。
ペアプログラミングでも同じです。
ドライバーは、今ここで、コードの記述に焦点を合わせています。このとき、ナビゲーターは全体像を目の前に持ち、ドライバーがミスを犯していないことを確認し、どこにどのように進むかを指示します。
ラリーレースとの唯一の大きな違いは、ペアプログラミングでは、ドライバーと共同ドライバーが定期的に場所を変更する必要があることです。機能の分布はほぼ完全に一致しています。
この方法を他の学習および制御方法と区別するのは、プロセスにペアプログラミングの両方の参加者が完全に含まれていることです。一方では、ドライバーが完全に独立してコードを書くことを許可せず、完成した「製品」を条件付きナビゲーターのレビューに渡しません。同時に、ドライバーは特定のコード行に焦点を合わせるだけでなく、ドライバーが作成する領域を広い視野で見る必要があります。同じことが私たちのナビゲーターにも当てはまります。
この古典的なペアプログラミングスキームに加えて、業界が存在する何年にもわたって、いくつかのより効果的なアプローチが作成されてきました。たとえば、ピンポンや後部座席のナビゲーターアプローチが人気があります。一部の人々は一般的に異なる技術を混合することを練習します。これは正常です。この方法またはその方法の有効性は、参加者の目標と構成(ペアに参加する人、達成したいこと、両方のコーダーの経験)によって異なります。ちなみに、ペアプログラミングは、前回の記事でお話ししたメンターとジュニアのペアだけでなく、ほぼ同じレベルの経験豊富な2人のコーダーのペアにも非常に適しています。
次に、ペアプログラミングの目的に応じて、ドライバーとナビゲーターのセットアップオプションについてもう少し詳しく説明します。
初心者トレーニング
ペアプログラミングは初心者を教えるのに最適で、そのために最もよく使用されます。ただし、junをトレーニングするこの方法を使用する場合、開発が実際のコードで行われると、即時機能の開発速度が犠牲になることを理解する必要があります。同時に、チームは長期的に真剣に勝ちます。経験豊富な同僚とのペアプログラミングにより、Junのオンボーディングと学習の速度が大幅に向上します。
しかし、「初心者トレーニング」の場合、6月が常に表示されるとは限りません。たとえば、ペアプログラミングを使用して、プロジェクトにすばやくオンボーディングする必要がある条件付きの新しく採用されたミドルをオンボーディングできます。この場合、速度はそれほど低下せず、メンターはスキルレベルの点でプロジェクトの新規参入者に匹敵する同僚になることができます。ここでは、プログラミングではなく、特定のプロジェクトに関する知識の伝達についてすでに話し合っています。
一方、2つのミドルのペアでコーディングすることは、6月+ミドルまたは6月+署名者のペアよりも少しリスクが高くなります。2つのミドルのペアのリーダーは、大きな責任を持ってプロセスに取り組む必要がありますが、すべての条件が満たされている場合、チーム全体のメリットは非常に明白です。
「タワー」の知識の共有と清算
多くのチームに共通する問題は、かけがえのないスペシャリストがいることです。これは、ほとんどの場合、いくつかの機能または別のプロジェクトを静かに見た新興企業または開発者の小さな孤立したグループのいずれかに当てはまります。かけがえのないスペシャリストとは、コード/プロジェクトの特定のセクションを完全かつ個別に理解しているか、すべてがどのように機能するかを完全に理解しているスペシャリストです。このような専門家のプロジェクトに関する知識プールは、「知識の塔」とも呼ばれます。
かけがえのないスペシャリストまたは「タワー」は危険なボトルネックであり、絶対に避けなければなりません。プロジェクトの戦闘部分への新機能の統合中(または移動中、または別の深刻な段階で)、平凡な病気が去り、チームの作業が麻痺するためです。そのような開発者の解雇は言うまでもありません。
このようなボトルネックを解消するには、不可欠なスペシャリストが他の開発者と知識を共有する必要があります。
すでに明らかなように、ペアプログラミングは知識を共有するのに最適です。この場合のみ、初心者向けの高度なトレーニングやオンボーディングは受けませんが、チーム内でプロジェクトの側面に関する知識を伝達します。ペアで機能を実行する場合、少なくとも2人がその機能をすでに知っていることに加えて、作成の過程で、ペアのメンバーの1人の背景が引き締められます。
「知識の塔」の清算には、多くの人には明らかではないもう1つの利点があります。プロジェクトの特定の機能や領域に関する知識を分散化するだけでなく、この「タワー」が最初に構築された開発者の負担も軽減します。実際、多くの場合、チームにかけがえのないスペシャリストがいる場合、彼は多くの場合、リリース期間中は週7日、残業を伴うウェアアンドティアモードで作業する必要があり、通常は24時間年中無休で対応できます。遅かれ早かれ、この一定の圧力はすべて、専門家の燃え尽き症候群、またはせいぜい、より静かな仕事を見つけたいという願望につながります。
ペアプログラミングを積極的に使用することも、突然の知識の塔の作成を回避するための優れた方法です。チーム内のプロジェクトの機能やさまざまな領域に関する知識の絶え間ない循環は通常のプロセスであり、残念ながら、主要な従業員が解雇された瞬間にのみ組織化され始めます。確かに、ペアプログラミングは「タワー」に対処し、チーム内のプロジェクトの理解度を高める唯一の方法ではありませんが、これはまったく別の話です。
複雑な問題の解決
ペアプログラミングは、ローカルのブレインストーミングツールのように使用できます。つまり、文字通り「1つの頭が良い、2つの頭が良い」という言葉を適用します。ペアプログラミングは、プロジェクトのビジネス要件に応じて複雑な機能やロジックを実装する必要がある場合に最適です。ここでは、リーダーからフォロワーへの知識の移転について話しているのではなく、プロジェクトの経験と理解が同等で、彼らの努力に参加する2人の開発者のシステムを作成します。
一部の開発者は、複雑な領域だけで作業する方が快適だと主張するかもしれませんが、実際には、ペアの2つの強力なコーダーは、別々に作業するよりも高品質のコードを生成する可能性が高いことが示されています。
このような状況でのペアプログラミングの長所は、コーディングプロセスのすぐ外にあります。むしろ、問題を解決するための可能な方法を対等な立場で積極的に議論する能力によって利益が達成されます-そのような場合のコードを書くプロセスは二次的であり、問題ではありません。しかし、どのように、そして何を正確に書くべきかが問題です。2人の専門家間の直接のコミュニケーション、議論、および実証された論争の可能性は、下された決定の質にプラスの影響を及ぼします。問題の解決策を見つけるのに必要な時間も短縮されます。
混合タスク
最後のケースは、上記のすべてのケースのチームです。ここには、異なる専門分野を持つ2人の経験豊富な開発者がいて、1つのタスクに取り組むために力を合わせています。おそらく、そのうちの1つはコードの記述に長けており、もう1つはプロジェクトの要件に完全に精通しています。さらに、これらが2人のプログラマーである必要はありません。これらは、コーダーとQAエンジニア、またはコーダーとアナリストのペアにすることができます。
ここで、純粋なWin-Winの状況が得られます。問題が混在している場合、ペアの各メンバーが他のメンバーを補完します。このようにして、両方のスペシャリストの可能性を最大限に引き出し、弱点を取り除き、強みのみを使用します。
同時に、混合問題の解決策は、前述のすべてのケースをカバーします。プロジェクト要件に関する不十分な知識について話している場合のオンボーディング、「タワー」の清算、および複雑なケースの解決の両方です。
合計
ペアプログラミングは特効薬ではなく、開発の問題や課題に対する答えではないことを理解することが重要です。ほとんどの場合、この方法では開発速度が低下するため、この方法は注意して使用する価値があります。
また、人的要因を忘れてはなりません。6月を教えることについて話している場合、ペアのメンターは、学習プロセスが殴打や嘲笑にならないように、適切なレベルで初心者と対話できる必要があります。「タワー」を清算しようとする場合、知識の伝達が正しい方向に行われるように、ペアの構成を適切に一致させる必要があります。同じことが複雑で混合した問題にも当てはまります。1台のコンピューターに2人のランダムな開発者を配置して待つことはできません。彼らは、N時間で既成のソリューションを提供します。
しかし、困難が表明されたとしても、ペアプログラミングは、新規参入者のオンボーディングと教育の問題を解決するだけでなく、他のチームメンバーのプロジェクトの知識のギャップを埋めたり、複雑な問題を効果的に解決したりできる優れた方法です。