ペアプログラミング中にどのようにフローを達成および維持できますか?


17

Flowは、Mihaly Csikszentmihalyiによって導入された概念です。要するに、それは「ゾーン」に入ることを意味します。集中して仕事に没頭しているように感じます。このタスクは困難ですが、同時に挑戦的です。人々がフローを達成すると、生産性が急上昇します。プログラミングでは、頭の中でいくつかのことを一度に処理する必要がある場合が多いため、精神的に集中する必要があります。多くの人は、仕事に全力を注ぐことができる静かな環境で働くのが好きです。中断された場合、フローに戻るまでに数分または数時間かかる場合があります。

アジャイル開発には、ペアプログラミングと呼ばれる極端なプログラミングのプラクティスがあることを理解しています。つまり、コミュニケーションがシームレスになるように、ソフトウェア開発チーム全体を1つの部屋に配置します。ペアでコードを書くのは、この方法ですぐにコードレビューを取得し、バグが少なくなるためです。

絶え間ない中断のため、ペアプログラミング中にフローを達成するのに常に問題がありました。私は問題について深く考えており、突然誰かが私に別のペアから質問をします。私の思考の流れが失われます。

ペアプログラミング中にどのようにフローを達成および維持できますか?


4
私は、他のペアがいつでも割り込むことができることに同意しません。
JeffO

3
Flowの代替手段は、Ballmer Peakでの位置を特定して維持することです。これを実現するには、かなりの実験、時間、およびスコッチが必要になる場合があります。
ホバークラフトのうなぎいっぱい

コードを書くべきときに、この質問を読んで気が散ります。もし誰かとペアプログラミングをしていたら、この質問を読んで読むことはできなかったでしょうし、おそらくもっとやりがいがあるでしょう。
-TehShrike

回答:


15

編集:免責事項-これは、「ゾーン」を定義する方法です。 A state of extreme focus, in which one is able to understand how many intricate details connect together, regardless of whether these do so elegantly (or simply) or not.

私はこの状態を回避しようとします。なぜなら、私はゾーンで正しいコードを生成するかもしれませんが、私と他の開発者は後でそれを理解するのに苦労するからです。簡単に言うと、ゾーンで作成されたコードを読み取るには、多くの場合、リーダーがゾーンにいる必要があります。その制約が私の問題です。

The Clean Coderには素敵な章があり、ボブおじさんが「ゾーンに入る」ことが信じがたいほど悪い考えである理由を説得力をもって説明しています。

「ゾーンに入る」よりも良い方法があります。まっすぐ考えて、あなたがしていることを冷静にそして専門的に考えてください。通信します。考えをパートナーと共有します。実際の問題を特定します。可能な解決策について話し合う。あなたは超自然的に集中しているとは感じないかもしれませんが、良い決定を下し、親しみやすいデザインをする可能性があります。

あなたとあなたのペアパートナーが両方に集中することなく問題について話し合うことができれば、その問題をより単純な性質にまで煮詰めた可能性があります。これは、必要なときにいつでも再び理解できることを示唆しています。

に...頭をまっすぐにするのに一人で時間が必要な場合(私たちは皆そうすることがあります)、ただそれを取ります。考えをまとめましょう。最初に頭の中で問題を解決します。

しかし、もしあなたがそうするなら、その時間を量産コードを書くのに使わないでください。代わりに、サンプルコードとプロトタイプを試してください。解決策をまだ考えずに、問題を理解してください。すべてを書き留めて書き留めたら、チームやペアパートナー、または机の上のゴム製のアヒルと話し合います。それでもそれを明確にできない場合、または彼らがそれを理解できない場合は、アイデアを洗練させてください。そのすべてを打ち明けたら-その考えとサンプルコードをすべて、実際の実用的なソリューションに統合してください。


2
できれば、専門家は「ゾーン内」にいるかどうかに関係なく働くことを学びます。専門家は、質問をするために周囲の騒音を聞きながら、彼らが介入している人々と協力し、彼らが一緒に取り組んでいるどんな仕事をするかについて実際に会話している他の人々と一緒に働くことができます。集中するために特別な労働条件を必要とするプリマドンナとの仕事には興味がありません。
HLGEM

7
@HLGEM-必要なときに仕事に適した場所にアクセスできるとは思えない。
ジェフ

2
@HLGEM:もちろん、プロは平均的な労働条件下で平均的な生産性を持っているはずです。しかし一方で、生産性と品質を大幅に向上させることができるため、同じ専門職を非常に焦点を絞った方法で働かせることは雇用主の利益になります。
ジョルジオ

2
「人々は「ゾーン」を、思考の帽子のように、問題をうまく解決するための魔法の迅速な修正であるかのように扱うように思えます。」気を散らすことなく自分のタスクに集中しているからです。ゾーンはあなたを全能にするのではなく、生産性を高めるだけです。
ジョルジオ

2
@Yam Marcovic:これは、私が念頭に置いていた種類の生産性ではありません(低品質のコードをより多く生成します)。私にとってフローとは、混乱して大量のコードを書き留めることを意味するのではなく、他の無関係なタスクによって中断されることなく、特定のタスクを体系的に処理することを意味します。
ジョルジオ

5

ペアプログラミングでは、パートナーからの隔離期間が必要になる場合があります。

特定のクラスで一緒に作業していて、いくつかの複雑なロジックを深く考える必要があるが、さもなければ平凡な結果を返すメソッドを記述する必要があることに気付きます。そのメソッドの単体テストの作成に協力し、単独で作業している間はそのメソッドの記述を一定期間延期します。メソッドが完了すると、ペアとして一緒に戻り、結果を評価します。


ペアプログラミングで実装を行わないのはなぜですか?
try-catch-finally

5

ペアプログラミングが機能する小さなクラスの問題があることがわかりました。たとえば、クロスプラットフォーム製品に取り組んでいて、Winders guyがOS固有のコードを必要とする機能を実装している場合、Mac guyがドライブしている間にMac guyがMacコードに同じ機能を実装するのを助けることができます。

しかし、私の経験では、ペアプログラミングは通常、生産性の純損失につながります。1人の仕事をするために2人の開発者にお金を払っているような気がします。

はい、それは開発者が就業時間中にスタック交換の休憩を取るかもしれないという恐ろしい可能性を減らします。

私見では、開発者を警戒したい企業は、開発者の後ろに立つためにすべての開発者と民間の警備員をペアリングするだけで、彼が減速したり、本質的でないときにピークになろうとすると、警棒で開発者を攻撃する方が安くなりますウェブページ。


1
ペアプログラミングのポイントは、お互いが緩むのを止めることではありません。それも効果的ではありません。ポイントは、コードをリアルタイムでレビューすることです。
レフ

3
@Lev:コミットする前にコードレビューを行うと、はるかに効率的です。レビューは、1日全体ではなく、数分から30分かかります。
ジョルジオ14

@Giorgioまったくそうではありません。たとえば、バグを作成し、それをキャッチするのに時間を浪費して、コードをレビューしてコミットするだけの場合があります。ペアをプログラムしていた場合、パートナーはバグに気付き、デバッグ時間を節約できます。
レフ

1
@Lev:「ペアプログラミングを行っていれば、パートナーはバグに気付き、デバッグ時間を節約できたでしょう。」:ペアプログラミングまたはコードレビューのいずれかでバグに気付く保証はありません。たとえば、6時間のペアプログラミングの後は、疲れすぎてバグを見落とす可能性があります。
ジョルジオ14

明らかに保証はありませんが、役立ちます。
レフ14

3

ゾーンに入ることを試みる開発者として、あなたは快適で心をクリアにするために、できる限り自分自身を隔離しようとします。なぜペアプログラミングは違うのですか?

あなたとあなたのパートナーは、あなたのために働くゾーン誘導環境を見つける必要があります。これにはいくつかの点で妥協が必要になる可能性がありますが、私の主なポイントは、ペア環境がソロに似ている必要があるということです。外界をオフにします。ペアは一緒にプログラミングしています。他のペア(他の一般的な同僚)は中断しないでください(重大な、何をしているのかという問題を除く)。


0

問題を解決するための正確な手順を知っている場合、フローは素晴らしい状態です。すなわち、いくつかの未知の未知数。あなたは静かなコーナーに座り、解決策を打ち破ります。ただし、ほとんどの問題/ストーリー/機能は、プログラミングを開始したときにあまり明確ではありません。期待される最終状態と脳がどのように「計画」したかの間には、常に「ギャップ」があります。実際に「やる」とき、あなたは多くのことを学びます。あなたの脳はジャグリングします

  • コード設計

  • タイピング

  • ドメインとコードに関する新しいことを学ぶ

私が一人でプログラムするとき、私はこれらのことのバランスをとるのに苦労します。私は「ウサギの穴」に入る傾向があります。そこでは、沈没したコストの間違いにより、一歩踏み出して大きな画像を見てデザインを変更することができません。また、架空のゴム製のアヒルや本物のゴム製のアヒルと話をするのも難しいです。私は結局「フロー」にいます。

しかし、私が生産的にペアプログラミングをしている場合、タイピングの期間とそれに続く思考と熟考の期間が交互に繰り返されます。これは、多くの隠されたものが自分自身を明らかにし、異なるデザインが現れるかもしれない場所です。うさぎの穴に入ったら、ペアリングの相手が私を引き抜きます。本物の人間に何かを話す/説明することは、どういうわけかあなたの考えをより明確にするこの素晴らしい効果をもたらします。時々、「フロー」にいるのが恋しいですが、ソロでプログラムするときよりもペアリングするときのほうがチームに貢献できると思います。すべてのプログラミングの後!=タイピング。プログラミングは脳内で行われ、2つの脳が協力して互いに批判すると、より良いプログラミングが行われます。

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