パスワードを忘れた? アカウント作成
16731 story
ニュース

ペアプログラミング、実践してますか? 70

ストーリー by mhatta
どうなんでしょ 部門より

oldtype 曰く、

最近redditで議論になっていたのですが、/.Jの皆さんはペアプログラミングを仕事で実践していますか?
数年前からエクストリーム・プログラミングの一環として話題になり、2003年には解説書出版に合わせて/.Jのストーリーにもなり、一部研究によれば生産性が1人で作業した場合の2倍以上になるともされていますが、タレコミ子の周辺ではまだやっている人がいないのが現状です(私のいるところが遅れているだけかもしれません……)。また、「誰もが向いているわけではない」というような意見も見られます。
ペアプログラミングを職場で実践している/.Jerの感想を聞いてみたいです。

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
  • 先生! (スコア:5, おもしろおかしい)

    by Anonymous Coward on 2007年11月27日 8時42分 (#1256067)
    ぼくだけ余りました!
  • クマ (スコア:5, おもしろおかしい)

    by Tuatha D Danaan (32722) on 2007年11月27日 8時53分 (#1256073)
    熊のぬいぐるみに相談しながら開発する、まさにベアプログラミングな開発手法もw

    http://www.amazon.co.jp/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%... [amazon.co.jp]

    • Re:クマ (スコア:5, おもしろおかしい)

      by taka2 (14791) on 2007年11月27日 10時04分 (#1256142) ホームページ 日記
      絶望したっ! [google.co.jp]アプログラミングでぐぐっても アプログラミングのことばかりひっかかる社会に絶望したっ!

      えっと「ベアプログラミング」って言っちゃうとジョークか何かと思われそうですが、
      質問責めに辟易した著者が「まずこのぬいぐるみに相談しろ。それでも解決しなかった時には聞きに来い」ってやったら、実際に質問に来る人の数が減ったって話ですね。
      オカルトでもジョークでもなく「相談するためには状況を整理する必要があるが、その過程で問題点が見つかり解決するというのはよくあること」って話。
      親コメント
    • by digoh (17917) on 2007年11月27日 19時26分 (#1256469) 日記
      てっきり裸になってコード組むのかと
      親コメント
  • by sarusaru (35148) on 2007年11月27日 9時26分 (#1256106)
    あるグループで導入してみました。
    交友がある人をペアにしましたが
    全ペアで二人の関係が険悪になりました

    その後ペアの組み直しをしましたが
    それ以降はうまくいってるようです。

    KentBeckのペア分類を参考にするより
    自己主張が強い&プライドが高い人をどうやって扱うかが 重要と感じました。
    • by voices (16831) on 2007年11月27日 12時39分 (#1256230) 日記
      いわゆる俺様系プログラマがペアの片方にいると、うまくいかないようですね。
      もう片方が、間違いを指摘しずらい雰囲気になってしまうから。

      例えば航空業界で採用されている、ヒューマンファクター訓練
      (CRM訓練)のようなものが今後必要になってくると思います。

      ----CRMについて(抜粋)----------------
      http://www.jalcrew.jp/jca/public/cap-voice/cap-voice_1.htm [jalcrew.jp]

      私達の仕事は、機長、副操縦士、航空機関士が、チームを組んで一つのフライトを
      完遂します。チームで仕事をする時、どうしても権限を持った人、或いは経験を
      持った人が主導権を握りがちです。機長は航空法上、運航の最終責任を負ってい
      る反面、指揮、命令などの権限も持ち合わせています。一昔前の飛行機の世界で
      は、機長の言うことは「絶対」といった風潮がありました。たとえ、それが間違っ
      ていたとしても、なかなかそれを指摘しづらかったのです。本来、安全運航の為
      には「何が正しいのか」と言う視点に立った考え方が必要です。しかし、「誰が正し
      いか」と言う事でチームの判断が決まってしまった結果、本来起こらなくてもよか
      った事故が起きてしまい、多数の尊い命が失われていきました。

      そこで、人間関係に焦点を当てた訓練が必要、と言うことで、CRM訓練が始まりま
      した。人は、他人から自分の間違いを指摘されることにはとても抵抗があります。
      機長が、自分より年下で、経験も少ない副操縦士から指摘を受ける場合、素直に
      聞く事が出来ない事もあります。「聞く耳を持つ」と言うことがCRMの大切な要素
      の一つです。

      -----------------------------------ここまで------------

      親コメント
  • by baku3393 (32616) on 2007年11月27日 9時10分 (#1256089) 日記
    人間の数そのものが足りないだろ 常考(ry

    --
    ---- ばくさん!@一応IT土方
  • 理想のペア (スコア:4, 参考になる)

    by NOBAX (21937) on 2007年11月27日 9時21分 (#1256101)
    業務は精通しているがパソコンは苦手という人と
    操作は速いが業務はまるで分からんという人がペアで
    仕事するというのは3次元CADなどでよくあります。
    両方できる専門家を育てるのが結構大変なので。
    • by Anonymous Coward on 2007年11月27日 16時10分 (#1256364)
      財務の生き字引みたいなお爺ちゃんと一緒に、資料作った時はそんな感じだったな
      指示に従ってExcelマクロ駆使する俺みたいな

      それまでは
      「金の勘定も出来ない小僧が」「今時PC触れないなんて使えないジジイだ」
      だったのに、大仕事が終わったあとは

      「やるな、坊主」「爺さんもな」
      みたいな戦友気分
      親コメント
  • by Hatris (33732) on 2007年11月27日 10時56分 (#1256178) 日記
    日本のアレな現場では、人が足り無すぎで、
    本来、人がペアになるはずなのに、
    仕事がペアになってました。

    一つの案件の問い合わせの返事待ちの間に、別の仕事をやって・・・
    飽きてきたら入れ替えて。

    小物だと、ペアどころじゃないですね。
    人のケツ持ちまで含めたら何件平行線だったか、思い出したくも無い。

    今ではそんなこともなくなりましたけどね~
    4年前くらいが酷かったかなあ。

    #ほら、今じゃ/.jを読み書きする余裕すらあるw
  • by Anonymous Coward on 2007年11月27日 10時12分 (#1256148)

    ペアワーク・マニュアル [keio.ac.jp]が、参考になります。

    「分担」ではなく,「多重的作業」をするのだ,ということ

    パソコンは,必ずペアの2人で1台だけを使ってください.この授業の実習の時間内では, 1人1台の状態になることは許されません! (1人1台の状態になっているペアを見つけたら,閻魔帳に控えておきます)

    実習時間中は,ひとつの画面を見て,ひとつの作業内容について2人の意識を集中してください.2人のうち1人の理解が進んでいないときには,理解をしている方の1人は,相方が理解できるようになるまで説明をする義務を負うようにしてください.

    繰り返しになりますが,ペアでの作業をするときに,2人が,2台のPCを使うこと・異なる作業の「分担」をすることを,禁じます.このような「分担」をすることは,総合的に言って,2人それぞれの作業の集中力を損なう結果になります.「分担」ではなく「共同」すること,敢えて言うならば,「2人がお互いの足を引っ張り合いながら作業をする」ことのほうが,集中力が持続し,学びの効果を高め,より望ましい成果を得ることができるはずです(信じてください!).

    みなさんが社会に出たときには,肌合いの違う人ともノリを合わせて,いっしょに仕事をこなしてゆかなければならないことが多いだろうと思います.そういう日々の中に,自分なりのささやかな楽しみを見いだす努力が必要になったりもするでしょう.この「ペアプログラミング」の実習を通じて,みなさんそれぞれが,自分自身の対人コミュニケーションのモードを見つめ直して,いろいろ考えてくれるといいなぁ,と,ぼくは思っています.また,そういうモードを,自分で意識して,ちょっとだけ「協調を促進する側」にズラすことができるようになってほしいと願っています. …意外と,悪くないものなのですよ.

    何事も,ペアで学ぶ,コミュニティで学ぶというクセをつけましょう.一人で学ぶよりも,数人で励まし合いながら学んだほうが良いに決まっています.それに,大学は,知識や技術を習得するためだけの場ではありません.

    楽しみましょう.もしくは,楽しいフリをしましょう(そのうち,楽しくなりますよ).

    • by Anonymous Coward on 2007年11月27日 10時50分 (#1256174)

      さらに PairProgramming+TestFirstの導入に関する仮説 [keio.ac.jp]には、次のように書かれています。

      PairProgramming+TestFirstの正否は,「分担作業」ないし「多重的作業」を実践できるかにかかっていると思われます.つまり…

      • Aさんがテストコードを書く x Bさんがテストコードのことを考える
      • Bさんがテストコードを書く x Aさんがテストコードのことを考える
      • Aさんが実装コードを書く x Bさんが実装コードのことを考える
      • Bさんが実装コードを書く x Aさんが実装コードのことを考える

      の4つを切り替えながら作業する,さらには,

      • Aさんがテストコードを書く x Bさんが実装コードのことを考える
      • Bさんがテストコードを書く x Aさんが実装コードのことを考える
      • Aさんが実装コードを書く x Bさんがテストコードのことを考える
      • Bさんが実装コードを書く x Aさんがテストコードのことを考える

      という4つを含めて,ダイナミックに切り替えながら作業する. そうして初めて,2人で2人前以上の仕事ができるペアとして機能するようになると言えるのではないか.

      この,4+4通りを,特に,後半の4通りに比重を置いて,ドライバーとナビゲータを交替しながら作業をする場合に,TestFirstとPairProgrammingを同時に行なうメリットが生まれてくるのではないか.

      つまり…仮説としては,「一人でのプログラミングで「テストコード」と「実装コード」を行きつ戻りつして書くときには,アタマをコンテキストスイッチングさせている間には実際に手を動かす作業がブロックしてしまう. これに対し,ペアプログラミングで作業をするときには,ドライバがコードを書いている間に後ろでナビゲータがこっそりコンテキストスイッチングすればいい.この間,いずれかの者が手を動かし続けるわけで,作業はブロックされない(コンテキストスイッチしたくて作業がブロックされそうになったときに,相棒に交替を申し出るということ).」ということになります

      親コメント
    • by Anonymous Coward on 2007年11月27日 11時14分 (#1256182)
      うちの大学もそれだったんだけど、単に交代で使うだけになってたな。理念はあっても運用がダメならどうしようもない例ということで。おまけに学生側は単にパソコン代をケチったんだと思ってたし(笑)
      親コメント
  • by SNT (23129) on 2007年11月27日 9時00分 (#1256080)
    メッセンジャー使ってペアプロっぽいことをしたことがあります。
    疑問があると、相方に投げて、相方がその間に検索してメッセで答えを貼り付け。
    コードはビルドが通らなくても逐次SVNで共有。
    また、お互いに手が空いているときは、平行で開発。

    普通のプログラミングはソフトウェアの完成にたいして責任が発生するので、ルーズになってしまうんだけど、
    ペアプロだと、モジュールの完成にたいして責任が発生するので、高い緊張感を持って開発することが出来ました。
    • by Anonymous Coward on 2007年11月27日 10時28分 (#1256160)
      > コードはビルドが通らなくても逐次SVNで共有。

      一見、収集が付かなくなるような気がするんですが、
      よろしければ、これのメリット(や実践して初めて判るデメリット)を教えてもらえますか?
      親コメント
      • by SNT (23129) on 2007年11月27日 10時52分 (#1256175)
        人数が二人だと次のようなのが可能になる。
        「○○の部分、ビルド通らないけど送っておいた。悪いけど、直してもらえない?」

        一般にSVNにビルドが通らないのを突っ込んで何が問題かっていうと、
        何故ビルドが通らないのかが共有されていないことが多いため。
        だから、それさえ共有されていれば、特に問題ない感じでした。
        もちろん、平行開発に近い時にそれをやられると、自分もビルドできなくなって死にますが。
        親コメント
  • 告白 (スコア:2, おもしろおかしい)

    by Anonymous Coward on 2007年11月27日 9時18分 (#1256098)
    今度のクリスマスに夜景のきれいなレストランで
    僕とペアプログラミングしてください。
  • by Super KUMASAN (34209) on 2007年11月27日 9時58分 (#1256135)
    そもそもエクストリーム・プログラミング(XP)自身が行われているかどうかが疑問です。特にXPには現場のプログラマの思いつきで仕様が決まっていくような印象がありまして、日本には馴染まないのではないかと思います。
    • by Anonymous Coward on 2007年11月27日 10時28分 (#1256162)
      そもそもエクストリーム・プログラミング(XP)自身が行われているかどうかが疑問です。特にXPには現場のプログラマの思いつきで仕様が決まっていくような印象がありまして、日本には馴染まないのではないかと思います。

      自分はメーカー系のSEをやってます。環境的にXPのプラクティスの導入は無理と判断しました。しかし、XPの発想には感銘を受けたので、自分の裁量で可能な範囲内でウォーターフォール的発想を排除しています。

      • PGからの問い合わせを顧客からの苦情と同じ優先順位で取り扱うことにしました。(伝統的に、PGからの問い合わせの優先順位は、保険のおばちゃんと同じだったんです!)
      • 机上での設計よりも、コーディング時の思いつきによる設計の方が具合が良いと判断した場合には、「この部分の仕様は実装者に任せます、実装後に仕様書を書き換えます」という仕様を起こします。
      • PGへの仕様説明はPGからの意見を仕様に取り入れる機会だと位置づけるようにしました。

      そもそも、プログラミングを下働きだと考えるマネジメントレベルの物の考え方が癌なので、この手のある意味当然の改善しかできないのが歯がゆいです。

      親コメント
    • by debility (12901) on 2007年11月27日 14時08分 (#1256295) ホームページ
      実作業にXP的な要素がいくつかあったので、
      同じコンビで数年間やってきて、ある程度固まった開発スタイルです。
      まだまだこれから変化するとは思いますが、現段階はこんな感じ。

      ・ペアプログラミング
      本来は分業しているんですが、ここぞという時は同じコードに2人で向かいます。
      「なんで動かないんだーうがああああ!」的葛藤が圧倒的に減りました。
      一人だと解決できずに延々考えていたかもしれないと考えると、作業効率は上がっているのかなーと。
      ・YAGNI
      1日スパンで実装目標を立てて、それを遂行しています。
      1日でバージョン番号が10増えることもざらにあります。
      1日で完結しない目標は立てません。
      ・共通の用語
      2人の間でしか通じない造語が飛び交います。
      「犬問題」「待ちぼうけ現象」など、他から見たら何のこっちゃ造語集が出来上がってます。
      ・開けた作業空間
      常に手を動かし、常に喋っています。
      思いついた問題は即発言するようにしています。
      間に仕切りすらないので、密なコミュニケーションが可能です。


      他にも独特な部分が結構あるんですが、とりあえず思いついた範囲で書いてみました。
      --
      ... from rakehelly programmer.
      親コメント
    • by Anonymous Coward on 2007年11月27日 12時28分 (#1256225)
      >特にXPには現場のプログラマの思いつきで仕様が決まっていくような印象がありまして

      それは、ありがちですが大間違いですね。
      原典と言える、ケント・ベック、マーチン・ファウラーの本を読めば、
      計画性なんか無意味だ感性を信じろなんて事は書いていない事が解ります。
      むしろ、反復型開発を思いつきにしないためにどうするか、でも楽しくやりたい、
      出来たものが顧客が使ってくれるにはという事を、色々考えたからこそ、
      ペアプログラミング等の形にしたと言えます。

      ではどうして、思いつきの正当化という一面的な誤解が蔓延したのか?
      おそらく、新しい仕組みを取り入れやすいベンチャー企業の自由な風土の与える印象で、
      原典を読まないままXPなんだと早合点しちゃうからではないでしょうかね。
      要は、細かく目標を区切ってリリースする反復型開発の一種と思えば理解しやすい。
      ウォーターフォールが「丸投げ」「長期化」「出来たら要求と違っていた」
      という事故を起こしがちだった点に対して、改善策を具体化標準化したものです。

      もちろん、ウォーターフォールだって、要求フェイズと開発フェイズを
      きちんと行った上でやって実施すれば、オフショアに出せるなどメリットはあります。
      それが、しっかり出来ている人にはアジャイルとかエクストリームが胡散臭く見える、
      新しい価値観に必要性を感じないというのは当然理解できます。
      ただ、色々なSIerを見てきたけどパッケージ開発でないシステムの場合、
      要求が出来ていないのに設計に進み、設計が済まないのに開発を始めないといけない、
      そして手戻り多発になってる案件が少なくないですよね。
      請負が悪いとか派遣が悪いとか、責任を一個人に押し付けて、
      また同じ構造をイテレーションしていくエクストリーム・デスマーチ(笑)
      親コメント
      • by Anonymous Coward on 2007年11月27日 18時13分 (#1256425)
        単純に、XPは請負型の契約形態に合わないんですよ。
        (名目上でも)全貌が決まらないのに、お客側が予算を取れるわけがありません。

        なので、XPは社内プロジェクトや「なんでも屋」的人材派遣の時にお薦めです。
        親コメント
  • 必然的にペア? (スコア:2, おもしろおかしい)

    by sk (478) on 2007年11月27日 13時15分 (#1256249)

    昔は「人の数 > 端末台数」だったので、 大勢に取り囲まれて、衆人環視の中でヤジに耐えつつプログラミングってのが多かったが、 これはペアプログラミングとは呼べないだろうな。

  • by maoyam (16680) on 2007年11月28日 0時38分 (#1256624) 日記
    「お前に誰かを付けると、相方が壊されるんじゃないかと、心配だ」などと言われてしまうタイプの方がおりますよね?
    むしろ、そのような方の相方を頻繁に換える (日に2,3人?) ことで、ペア・プログラミングが実効的に実施されるのでしょう。
    それができないのならば、「レベルの揃った外注を使いまわす」という、
      “平均的な成果・現状”という名の“低いレベルに足並みをそろえさせることでマネージメント職務者 (だけ) がその場限りの安心を得る”
    先のない鬱屈とした停滞気味の国内産業全般に見られる
      “参加メンバの実感・実態としては、底なしの価値低減傾向”
    が、このまま続いていき、産業構造そのものが
      “はい、それまぁ~で~よぉ”
    となるのではないでしょうか?

    あるいは、こうも言えないでしょうか?

    プロジェクトのキックオフ時点で、まず、管理職にコードを書かせてみるのです。
    そして、「ここの大将は、この程度のプログラミング能力なんだ」ということについて、
    管理者自身から末端のテスタまでの全員のコンセンサスを確立するべきです。
    (多分)平均以下の技術レベルの者がマネージメントするという状況で、参加メンバそれぞれが
     「それでは、そこに何を提供できるのか」
    についてもプロジェクトの早期に明確化するでしょう。また
     「メンバ自身が関わった工程での品質に対する責任感」云々
    も育まれるのではないでしょうか?
    更に、「出来ない君・伸びないチャン」のままでヒューマン・スキルだけを身に付けた者のマネージメントを
    受けながら、何をどれだけの値段で提供できるのか?といった“自分の能力の真っ当な値段の感覚”というものも
    身に付けられるのではないでしょうか?

    「マネージメント」などという基本的には「接待業と同等のテクニック」でしかないものを無批判に「価値の高い能力」と前提することを、技術者全員が捨てるが先決かも知れません。
    そこから、生産性云々の課題も真っ当な取り組みが出来るのだろうと予期しています。

    市場価値を生むのは「モノを作っている」担当者なのであって、管理職はその価値が外部的要因でムザムザ損なわれないように配慮・対処するという「外向きの作業」での成果を事後的に測られるべき“二の次、三の次”な存在なのだということを広く技術者に認識させていくことが「エクストリーム」や「ペア」の最大の眼目ではないでしょうか?
    そうであってこそ、“開けた”開発空間で作業できるのではないでしょうか?
  • by Anonymous Coward on 2007年11月27日 8時55分 (#1256074)
  • うちの場合 (スコア:1, おもしろおかしい)

    by Anonymous Coward on 2007年11月27日 23時27分 (#1256597)
    一人ペアプログラミング状態です
    独り言で問題解決しています

    「間違った!」
    「しまった!」
    「OK!」
    「次はライブラリの修正だ!」
    「たのむぜ~!」
    「おいおい!」
    「俺って天才!?」
    「うわー、死ねばいい~」
    等と一人だけでも結構にぎやかで楽しいですよ

    いや、これは違うか・・・
  • by Anonymous Coward on 2007年11月27日 8時46分 (#1256069)
    日本でペアプログラミングを実践している会社があるかどうか自体を知りたいくらいかも。

    設計段階において、一人で悶々とするよりかペアで設計したほうが柔軟性がある気はします。
    その場その場で問題点を討論しながら、より良い方法を探って行けるのと、問題点に気が付き
    やすくなるという感じでしたね。
    3人以上になったとたんに細かい意見(好み?)の相違に終始しがちになる気がします。
    • Re:むしろ (スコア:5, 興味深い)

      by Anonymous Coward on 2007年11月27日 9時27分 (#1256107)

      現在,取り組んでいるプロジェクトでは, まさに,皆でホワイトボードを前に設計して, その後,ペアプログラミングを実践しています.

      設計を全員ですることによって,実装のポイントや問題点を事前に共有することができます. さらに,設計を全員が把握しているので,以後のペアプログラミングもスムーズに 進めることができます.

      誰かが書いた設計書をレビューするよりもずっと効率的です. 設計で議論した内容は,デジカメやWikiで記録しておき, お客さんに納める設計書は,これらの記録を参考にしながら, 実装が終わった段階,あるいはリリース直前に清書します.

      親コメント
  • by Anonymous Coward on 2007年11月27日 8時49分 (#1256071)
    すごく……いいコードです……
  • by Anonymous Coward on 2007年11月27日 9時13分 (#1256091)
    私自身はこういう体系を実践できる環境にないのですが、締切りが細かくある感じなので、序盤に怠けてデスマーチを繰り返す人or職場には良いかもしれませんね。
typodupeerror

普通のやつらの下を行け -- バッドノウハウ専門家

読み込み中...