小規模企業でのペアプログラミング/コラボレーション


20

私は小さな開発会社で主任開発者として働いています。私たちには他に2人の開発者と、開発者である上司がいますが、実際のコーディングは実際にはあまり行いません。

私が克服しようとしている問題は多面的です。私たちは皆、私たちの間の多くのコラボレーションなしに、私たち自身のプロジェクトに取り組む傾向があります。実際のところ、私は(最も先進的な開発者として)他人の意見/助けを彼らが私のものよりも求めています。

私たちのコラボレーションを増やしたいと思い、彼らにそれを表明しました。大部分は、より良い開発者になり、より良いプラクティスに従う方法についていくつかのことを見せたいからです。しかし、他の開発者の性格タイプを考えると、彼らは単独で作業する方が快適だと思います。

私はペアプログラミングについて読んでいますが、あるフォーラムでは、ある開発者が他の開発者(私)よりも進んでいるとうまくいかないことを読みました。それでも、私たちの仕事がそれほどばらばらにならないように、私たちは協力し始めることが不可欠であると感じています。

私の質問は、誰かがこれまでに同様の状況にあったかどうか、そして何が彼らのために働いたのですか?

私はこれが万能の状況ではないことを理解していますが、複数のアプローチを試してみたいと思います。

私たちは皆、共通の領域で働いており、開発者は個々のオフィス/キュービクルを持っていません。


2
あなたと他の開発者は、個別のオフィス、キュービクルを持っていますか、それとも共通の場所に座っていますか?

@hatchet私たちは皆、共通の分野で働いています。
ライアンウィリアムズ

回答:


12

ペアプログラミングがなぜあなたの解決策ではないのかについては他の回答ですでに議論されているので、現在実験していることについて議論し、その結果に満足しています。

私の考えでは、コラボレーションを強化するためにできることは、各プロジェクトに2人の人を一緒に入れることです。それぞれがプロジェクトの異なる部分で機能しますが、これらの部分を統合する必要があるため、2人の開発者が協力する必要があります。これには、2人のプログラマーがプロジェクトのアーキテクチャー(レイヤーとインターフェース)について話し合い、異なる役割を引き受けることも必要です。

また、このアプローチにより、会社が一度に処理できるプロジェクトの数が制限される場合、このコラボレーションペアを2つのプロジェクトに同時に割り当てることができます。

私たちは最近、このアプローチを実験し、そのうちの1つがモデルを開発し、APIと他のプログラマーがビューコントローラーを処理する統合を行いました。この設定には次の利点があります。

  1. コード構造は、プロジェクトのすべての側面で作業しているのが1つだけの場合よりもはるかに優れた結果になります。
  2. リポジトリなどにコードをコミットすることを思い出させる必要はありません。
  3. 専用のQAだけに頼るのではなく、お互いのコードをテストするためにある程度の努力をする必要があります。

1
これについても考えます。ビューとコントローラーの開発をモデルから分離することが本当に好きです。なぜなら、開発者がモデル用の優れたAPIを考え出す必要があるからです。同時に動作するために、関連するテストの作成も強制されます。
ライアンウィリアムズ

1
私はこの答えを受け入れることにしました。なぜなら、それを調べて数人のチームメンバーと話し合った後、コラボレーションを誘発する最良の方法は同じプロジェクトの役割を分割することだと確信しているからです。うまくいかないかもしれませんが、私が聞いた限りでは最適なようです。
ライアンウィリアムズ

7

私の意見では、ペアプログラミングはあなたが提起する問題の解決策ではありません。

ペアプログラミングには2つの異なる役割があります。観察者はによって書かれたコードのレビューとフィードバックにそこにあるドライバ。ジュニアプログラマーが下している決定を改善するためのアイデアを伝えようとしている場合、ドライバーの役割を実行しているときに、書いているコードを批判的にレビューする能力をどれほど効果的に見つけることができるか疑問です。

この動的なしでは、ペアプログラミングの利点は失われます。

シニアプログラマとして、上司と一緒に従業員のトレーニングと開発を強化するプログラムを検討することをお勧めします。ジュニアプログラマには、スキルを向上させるためのフレームワークを提供する必要があります。通常、啓発、コーディング標準ドキュメントの作成、自己完結型のタスクを自分の作業から分離し、適切なコードレビュープロセスを確実に実施するなどの方法を使用できます。


あなたの考えを考慮します。私たちが現在行っていることに対して、精神的に分析して修正することは少しです。私が持っている正直な気持ちは、主任開発者としての私の立場に少し不安があることです。スキルの観点から私が不慣れだからではなく、むしろ私たちの他の開発者の両方が私よ​​りも年をとっていて(一方はそうではなく、もう一方はそうではない)、一人はさらに数年の経験さえ持っているからです。その場合、従来のコードレビューは厄介なように見えます。なぜなら、私は彼らの首を呼吸しているように見えたくないからです。それから、多分それは私がしなければならないことです。
ライアンウィリアムズ

もう一つ。私がドライバーである場合、プログラムをそれらとペアにする価値があるよりも利益が少ないと思いますか?それでも、ベストプラクティスを指摘する方法として使用できますが、それでも(関係が確実にアンバランスになる場合でも)私が何をしているかについての入力とフィードバックがあります。
ライアンウィリアムズ

ペアプログラミングの関係が1つの方法である場合、同僚に魅力的ではなく、おそらく少しでもひいきになることはないと思います。あなたがそれをどのようにモデル化するかにもよりますが、これは「これが私がプログラムする方法であり、それが最良のアプローチである」と非常に簡単に遭遇するでしょう。両方のコンポーネントがないため、実際にこのペアプログラミングを呼び出すことはありません。

それは本当に私が恐れていることだと思います。考えてくれてありがとう。私はあなたが最初だというあなたの答えを受け入れます。(他にも良いものがいくつかありました。)
ライアンウィリアムズ

@RyanWilliamsコードレビューは「首を突っ込む」ことではありません。あなたがそれらをコントロールすることではありません。私たちの場所では、ReviewBoardをプラットフォームとして使用し、お互いのコードについてコメントします。「階層」はありません。この場合の学習は「暗黙的」です。彼らはあなたと彼らのコードを読んで、あなたと他の開発者の質問とそれらの質問に対する答え/コメントから学びます。そして、彼らはコードベースの他の部分を知るようになります。これは非常に有益です。
ヨハネスS.

5

TL; DR:ペアプログラミングはうまくいかないと思います。代わりに、コードの長期的な品質を人々に心配さて、答えを見つけさせたい思うべきです。これは非公式に行わなければなりません。


文化と品質について

この問題はプログラミングの方法論ではなく、文化の問題だと思います。私の経験では、文化は監督することが可能ですが、めったにそれを人々に伝えることはできません。つまり、自然に進化していない人や、既存の慣行からあまりにも遠い人に特定のワークフローを強制しようとすると、マイナスの結果になります。

言い換えれば、あなたが最終的にあなたであっても、最新の流行語をぶんぶんぶん回ってくるスーツのようになりたくありません。私が知っているほとんどのプログラマーは、あなたを暗騒音としてメンタルにタグ付けします。企業の蜂にならないでください。

私の意見では、あなたが自問すべき第一の質問は「私の組織が出すコードの品質とビジネス価値に満足していますか?」です。そして、それに対する答えが否定的な場合、「どうやってこれを好転させるのですか?」と尋ねるべきです。

究極的には、品質と価値は人間の定義であり、あなたまたはあなたの組織内の他の誰かが考えることができます(そして考える必要があります)。

ペアプログラミングとマイクロ管理

そのため、少し前向きで耳障りな音を立てる危険性がありますが、ペアプログラミングについて読むことで、実際に何らかの形のマイクロマネジメントについて、またはその逆を考えるようになったように思えます。MMは、ほとんどの人を疎外するための確実なレシピです。

ペアプログラミングの防衛において:ペアプログラミングは、他の人の肩越しに見ている人のことではありません。それは、管理者が得るのと同じくらいミクロです。一人のお得な情報- PPは、同時に2つのレベルを考えるために2人の心を使用する方法についてであるハイレベル大きな絵の問題を他のの世話をしながら、ナットとボルト動作するコードを生成するために必要。私の謙虚な意見では、2人の参加者が場所を入れ替える立場にない場合、うまく機能することはめったにありません。彼らは、同様の専門的な概念の武器庫と専門的な専門用語を共有するのに十分な経験を積む必要があります(私たちは心にリンクしていません - まだ、はははは)。

あなたの状況については、あなたは小さなチームであり、あなたは実際の経験を持っている唯一の人だからです(あなたの投稿は私にとってはそうです)、ペアプログラミングまたはほとんどのコードをレビューすることはほとんどないでしょう動作しません。1日24時間しかありません。代わりに、考えられるいくつかのソリューション:

  • 適切な言語タグの下でSOに参加するか、Code Review SEでレビューするためにコードスニペットを投稿するように勧めます。誰が1週間あたりのSO担当ポイントを最も多く獲得できるかについて、少し非公式のコンテストを開始します。

    SOは、絶えずフィードバックを提供し、コミュニティの鼓動をたどるので、初心者の開発者にとって驚くべきことです。

  • 彼らがチェックインするコードのいくつかを見て、その長期的な進化に関するいくつかの質問で非公式に挑戦してください。ほとんどの初心者プログラマーは、コードを読みやすく保守しやすくすることを考えることに慣れていないだけです。これらの問題を頭に入れると、彼らはあなたや他の情報源から自分自身でより多くの情報を求めます。


他の皆として、私はあなたの入力に感謝します。これを投稿する際に気付いたことの1つは、肩越しに見ている人であることには多少の不満があることです。どちらも実際には私よりも年上で、どちらかというとかなり経験が豊富です。ですから、私は彼らをCEを巡回してコードレビューを求める人々とは思いません。彼らは初心者ではありません。しかし、それらは異なる言語と非正統的な慣習に由来します。
ライアンウィリアムズ

そうですか。あなたが彼らの肩越しに見ているのを快適に感じないのは良いことだと思う。誰も彼らが作るすべてのキーストロークを二度と推測することを望んでいません(誇張)。
idoby

4

ペアプログラミングは、あなたの環境で役立つとは思いません。それは、経験の浅い開発者のスキルアップに役立たないということではありません。さまざまなスキルレベルのエンジニアとのペアプログラミングに関するプログラマーの質問さえあります。知識の共有やエラーの減少などの利点がありますが、ペアプログラミングにはより多くの時間を投資する必要があります。3人の開発者のチームと、開発のバックグラウンド/経験を持っている4人だけのチームでは、ペアのプログラミングルーチンを維持するのは難しいようです。

あなたの状況におけるより良い代替手段は、特に適切に調整する場合、コードレビューだと思います。コードレビューは、1人の人がほんの少しのコードを見て、1〜2時間部屋の複数の人(チーム全体を含む)にフィードバックを提供して、コンポーネント全体の設計と実装を確認することで構成できます。これらは、特にチームの知識、経験、ニーズに基づいて、行われている作業に応じて変更できます。問題を見つけ、提案を提供し、レビューの出力を読んでコメントを自分の作品に組み込むことで知識を得るために、複数の人々がレビューに参加することにより、知識共有の側面を得ることができます。


一般的な意見のようです。コードレビューのアイデアが好きです。しかし、私の心では、彼らの性格とスキルレベルで、レビューをしているのは私であり、彼らはただ聞いているだけだと思います(ほとんど関与していません)。しかし、彼らをもっと関与させる方法があるかもしれません。私はそれを熟考する必要があると思います。
ライアンウィリアムズ

また、明確にするために、私はペアプログラミングについて、私たちがいつもやっていることとして話していませんでした。むしろ、より大きな、またはより複雑な機能のために、週の重要な部分ではあるがそれほど多くない部分をそれに費やしてください。(それは部分的に実用上の必要性から外れています。満たす必要がある私自身の要求があります。)
ライアンウィリアムズ

2

私の質問は、誰かがこれまで同様の状況にあったことがあるかどうか、そして何が彼らのために働いたのかということです。

あなたが経験を招待しているので、ここで私がやったことです。私は低リスクのアプローチを選択し、私よりも数十年若い人に協力して時間を過ごすように頼みました。アクティビティにラベルを付けませんでした。私以外の誰も、新しいテクニックを試していることを知りませんでした。

どの詳細を関連付けるべきか正確にはわかりませんが、プロセスは非常にうまくいきました。彼はメンターになりたかったのですが、それは私が事前に何も示唆していなかったものでした。そのため、非常に前向きな方法で双方向のコミュニケーションを開始しました。

実際のところ、私は(最も先進的な開発者として)他人の意見/助けを彼らが私のものよりも求めています。

これは、あなたが現在していることの論理的な進行としてフレーム化できるように思えます。


私が心配しているのは、彼らが「メンター」になりたいと確信していないことです。どちらも私よりも年上で、1人(かなり年上)は実際に私よりも数年以上経験があります。しかし、私はあなたのアドバイスの第二部が好きです。
ライアンウィリアムズ

そして、あなたが何かをする前に心配するのは自然です-あなたは情報を持っていないので。私の経験では、あなたがそれをやるだけなら、人々はあなたが心配していないと感じ、リラックスしていて一緒に行くと感じます。そして、それが動作する場合-続行し、動作しない場合-何か他のものを試してください。
dcaswell

たぶん私が自分でやるより大きなプロジェクトに彼らを巻き込むことで、それは少し緩和されるかもしれません。たとえば、CMSをすぐにやり直しています。ただし、このアイデアに慣れるには少し時間がかかります。
ライアンウィリアムズ

0

この質問を提起してから数か月後、私は結果に満足していると言わざるを得ません。しかし、それは私が最初に受け入れたものではありません。これは小さなチームであるため、このソリューションは全員に適しているわけではありません。

みんなに自分の仕事をさせるのが最善だと思いました。そして、時間が経つにつれて、私たちはお互いに信頼関係を築き、問題にぶつかった場合に、他の人たちを助けに呼びます。誰かが肩越しに見ている人と仕事をしたいとは思わない。私はときどき誰かの後ろに座り、ときどき頼まれることなく問題を手助けします。追加するものが何もない場合があり、少しイライラすることがあります。しかし、彼らは、私が彼らをハープするためにそこにいないことを理解しています。私は主に自分がやっていることから休憩を取り、少しのコラボレーションを紹介するためにそこにいます。

私が見つけたのは、時間の経過とともに(小さなチームで)右の人が他の人がやっていることに気づき、同期することです。常に自分が何を間違っているのかをミクロに管理したり、誰かに伝える必要はありません。

時々、誰かと一緒に座って、あなたが専門家であるか学習している人であるか、あるいはその両方であるかを問わず問題を解決します。別の方法ではなく、ある方法で何かをする、またはしない理由を説明してください。良いアイデアは通常は受け入れられますが、他のアイデアは取り残されます。そして、一日の終わりには、さまざまなことに取り組んでいるが共通の目的を共有している、生産的で結束力のある人々のグループができています。

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