ペアプログラミングの理由


13

私は、管理者がペアプログラミングのアイデアを私または別のマネージャー/開発者に引き継いだいくつかのショップで働いてきましたが、まったく後れを取ることができません。開発者の観点からは、このコーディングスタイルへの移行が有益である理由を見つけることができません。また、小さなチームのマネージャーとして利益を見ることもありません。

私はそれが基本的な構文エラーに役立ち、何かをハッシュする必要がある場合に役立つことができることを理解していますが、プログラミングループの外にいるマネージャーは、デザイナーよりもFacebookやRedditに行くのを防ぐ方法としてそれを見続けているようです設計ツール。

開発フロアの近くにいる人で、明らかに私のやり方や主題に関するwikiページからはまったく理解できない...高レベルの管理職から、スクラムやアジャイルを扱う際のペアプログラミングの利点は何ですか環境?


2
非常に特定の状況で役立つと思います。しかし、一般的な開発モデルとしては、まったく役に立たない。
ライアンキナル

4
それはあなたのビューを彩る可能性のあるソフトウェアに依存するかもしれません。たくさんの小さなウィジェットがあり、毎日異なる小さなカスタムソフトウェアで作業している場合は、おそらく役に立たないでしょう。開発者が実装する機能によって作られたシステム全体のカスケードを開発者が考慮する必要がある大規模なエンタープライズシステムを扱う場合、非常に価値があります。一般に、30以上の異なる場所で使用されるデータに影響を与える1つのクラスを書くことは、さまざまなメンタルプロセスを持っている2人の人々が考えることができます。欠陥を事前に見つけるためのモンテカルロ法のようなものです。
ジミー・ホッファ

@JimmyHoffaそれで、主要な思考プロセスは、受け入れテストに進む前にバグを見つければ、コードレビュー/ラインテストで失われる時間を大幅に減らすことができるということですか?
ジェフランゲマイヤー

3
@JeffLangemeierそれは実際にはそれ以上です。サブシステムAの実装中に2人の開発者の間で発生する自然な談話のためにA1が書かれる前に、サブシステムAのセクションA1の設計に欠陥がある場合、セクションの修正に費やす時間を節約するだけではありませんA1、およびA1に依存するセクションA5およびA7(またはA1の修正からのカスケードによる依存セクションのバグの発見)、その不良セクションを完全に記述しないことで時間を節約できます。はい、テスト時間は短縮されますが、この方法で開発時間はさらに短縮されます。
ジミー・ホッファ

@MartinWickmanこれは重複ではありません。あなたのリンクされたものでは、タイトルが長所と短所を求めていたにもかかわらず、彼らは本当に短所を探していました。また、プロのより徹底的な答えがこの1つで与えられました。要するに、この1つが近くにあるとしても、それがコミュニティにとって有益です。
ジェフランゲマイヤー

回答:


25

部分的には、ペアプログラミングの方法によって異なります。場合によっては、ペアのドライバーがコードを書いている間に、ペアの2番目のメンバーがシステムの設計と実装の詳細を観察し、議論しています。ペアプログラミングのもう1つの例では、両方の人が同時にコードを記述します。1人は実装された機能を記述し、もう1人はユニットおよび統合レベルでテストコードを積極的に開発および記述し、システムの設計と実装の詳細について議論します。

ペアプログラミングのタイプに関係なく、継続的なコードレビューとして効果的に機能します。あなたはコードに2人の目を向け、エラーが後のシステム/受け入れテスト環境またはフィールドに逃げる前にエラーを監視します。また、システムの特定の部分を非常によく理解し、バスファクターを最小限に抑えるための冗長性を提供する2人のユーザーがいます。。欠陥を早期に発見し、システムの知識をチーム全体に広めることで、システム構築のコストを削減できます。

知識の普及は、チームの技術的な知識だけに限定されません。ペアが誰であるかによって、コーディングスタイル、企業文化、期待など、プロジェクトを超えた他の事柄について、会社の上級メンバーから新しいメンバーに情報が流れるようになります。また、技術やツールに精通している人が、実際の環境でその技術やツールの知識を共有できるようにすることもできます。

あなたが述べたように、それはまた、開発者に集中し、 流れ。流れに加えて、多くの個人は、何かに取り組んでいる単一の個人よりも、何かに取り組んでいる複数の人々を中断する可能性が低い。誰かの机のそばを歩いていて、彼らが一人で働いているが、彼らと話をする必要がある場合、ノックして話をするかもしれません。これは、2人以上の人々が共同で作業している、またはディスカッションしているのを見た場合に起こりにくくなります。中断することはありません。中断には時間がかかり、より多くの時間を費やすことはより高いコストを意味します。従業員の生産性を最大化することは、ビジネスの最大の利益になります。

ただし、ペアプログラミングを実行可能にするには、克服しなければならないいくつかの課題があります。性格の衝突や知識の適切な配布のためのペアの選択などを考慮してください。ペアを回転させるタイミングを正確に考慮することもあります。偶然に行われたペアプログラミングは、おそらく計画されているものとしては効果的ではないでしょう。チームの構成によっては、人をペアにすることはまったく効果的でない場合があります。


+1がすばらしい答えです。私はまだこの考えを強く嫌っていますが、あなたはその利点をうまく示しています。

私はあなたのジブサーのカットが好きです、この説明は実際にこれを実行可能に感じさせます。
ジェフランゲマイヤー

9
現在のニーズに基づいて、ペアリングがよりアドホックなハイブリッドモデルを好みます。また、単独で作業する方が効率的である場合や、パートナーと一緒に作業する方が優れている場合があります。永久的なペアに強制されることは、私にとってarbitrary意的で柔軟性に欠けるようです。
jfrankcarr

非常に良い答えです。私はアジャイルチームのプログラマーでもあり、多くのペアリングを行っています。最初は懐疑的でしたが、単独で働くことが最善の方法だと考えました。チームの進化のある時点で、ペアプログラミングを課しました。ペアでプログラムされていない場合、製品コードはコミットされません。これは、ペアリングの概念を人為的に実施することでしたが、チームを大いに助けました。最後に、全員がテクニックとお互いに慣れた後、スタイルを変更し、アドホックでチーム化し、ほとんどの場合、実装がより複雑であるか、エラーが発生しやすくなります。
パトコスチャバ

@jfrankcarr、永続的なペアを提案する人さえいませんでした。どこでそのアイデアを思いついたのかわかりません。(この回答では「ペアをローテーションするタイミング」について具体的に言及していることに注意してください。)私たちのチームは、同じ2人を1日または2日以上ペアにしておくのは本当に悪い考えであることに気付きました。あなたはわだち掘れを始めます。一部のチームは1時間半ごとにローテーションします(PDFリンク)。
ジョーホワイト

3
  1. 最終的なコードでのエラーの削減(効率)
    コードレビューを完全に置き換えるのではなく、早い段階で物事を正しく行うために非常に効果的です。その方向を指す研究がそこにあります。

  2. より迅速な完了(効果)
    これを指摘するいくつかの研究があります。複雑な機能に関しては、2つのヘッドがより効果的です。これにはペアリングの経験が不可欠です。

(注:これはマネージャーのセールスピッチです。より少ない数のバグでより効率的であり、より迅速に完了することでより効果的になるので、財政的には健全な決定です)

  1. ジュニアの指導
    経験豊富なプログラマーにジュニアを直接追加できます。絶対的な初心者のグループがいる場合、簡単に動き回り、ペアとして基本を理解させることができます。周りに固執し、アドバイスを与えます。コンセプトは明らかに非常に古く、職人技に由来しています。

3

クイックアンサー:ほとんどの利点と費用はウィキペディアに掲載されていますが、少し異なる角度から見てみましょう。

ブログ投稿から取られた、アジャイル/スクラム開発環境に適用されるペアプログラミングの利点の特定のケースに言及したいと思います。

ソフトウェアの成功または失敗はその品質に依存し、ペアプログラミングはさまざまな方法で品質を直接向上させます。2人の開発者が一緒に作業すると、ペアが短く、シンプルで、より少ないバグで簡単に保守できるコードを開発するため、設計パターンの品質が向上します。バグは、ソフトウェア開発における主要な品質の懸念事項です。2つの目でコードを記述することで、より多くのミスがキャッチされ、開発コストが削減されます。開発プロセスの後半で見つかったバグは、多くの場合、修正に費用がかかります。ソフトウェアの欠陥を早期に発見することで、今後の困難な問題を防ぎ、阻止することができます。プログラミングでは複雑さがしばしば発生し、問題を一緒に解決するために働く2人の心は、1つよりも多くのオプションを見つけ、より迅速に結論を導き出すことができます。

要約すれば:

  • チームのコミュニケーションを促進する
  • 効率的なアプリケーション知識の伝達を促進します
  • 設計アプローチの説明責任を促進する
  • 優れた、保守しやすいコードが得られます
  • 初期段階でバグのあるコードを削除するのに役立ちます
  • チームメンバーはコーディング中に細心の注意を払うため、チームの生産性が向上します。
  • チームメンバーのコミュニケーションとコラボレーションのスキルを向上させる
  • 職場で友情を築く
  • 仕事をもっと楽しくする

When two developers work together design pattern quality improves->そのフレーズはまったく意味がありません。少なくともWhen two bakers work together wheat quality improvesまたはよりも意味がありませんWhen two race drivers work together asphalt quality improves
フレネル

それはあなたが調べるかもしれないブログからの引用です。ただし、私の開発者は、各開発者が作成されたコードを誇りに思うよう努力しているため、技術的な設計とコードの品質に重点を置き、何らかのアカウンタビリティを導入することを強調しました。
ユスボフ

2

ペアプログラミングにはいくつかの利点があります。

  • 2人のプログラマーは、設計で協力して、より優れたアーキテクチャ/コードを作成できる可能性があります-2組の目で間違いを見つけることができます
  • 教育機関の知識はより良く保持されます-あるプログラマーが退職したり、利用できなくなったりしても、他のプログラマーは生産性を大きく損なうことなく作業を継続できるはずです
  • これは、新しい開発者を迅速にトレーニングする1つの方法です-開発チームの経験豊富なメンバーとペアにすると、チームのベテランの観点からコードベースを体験できます
  • より良い規律-ペアのプログラマーは、どちらか一方が活動のバーストを引き継ぐことができるため、長期間にわたって生産性が高い可能性があります。単体テストなどの退屈なタスクは、単独の開発者の場合よりもスキップされる可能性が低くなります。

ウィキペディアには、ウィキエントリのコストと利点の概要もあります

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.