バイドゥ(百度)株式会社で働くR&Dエンジニアとして、世界一楽しい検索エンジンを作っています。情報系大学院生が、腕一本で「世界で一番アツい会社」に就職するまで&してからの記録。
26 2月
2人のプログラマが同じ画面を見て、色々と議論しながら同時にプログラミングを進める「ペアプログラミング」もすっかり市民権を得た感がある。
最近、共同で研究をするときに、2人で研究の各フェーズ(議論、実装、検討)を同時に進めていく「ペア・リサ-チング」的な事をやったら思いのほか良かったのでちょっと書いてみます。
プロセスはこんな感じ:
1. タスクを決めて、関連研究を調べて、だいたいこういう手法で行こう、というのをまず決める。
2. ベースラインでも提案手法でも良いけど、「まずこれをやってみよう」というのを、少なくとも数式レベルではフィックスする。ここまでは相談して行う。
3. 同じ手法を2人で別々に実装する。
4. 入力データを共通にして、動かした中間結果もしくは最終結果を付き合わせる。
5. 結果に食い違いが出たら、食い違いの無い中間結果までフォールバック。実装を直す。これをバグが取れるまでやる。
ポイントは、二人でわざわざ同じ実装を作るというところ。普通の共同研究(共同開発)では、モジュール分けして実装を分担すると思うけど、ここではあえてこの車輪の再発明をしよう、というわけ。これには以下のようなメリットがある:
メリット1:バグがすぐ取れる — モジュールごとに分担するとお互いの出力を無条件に信頼してしまい、最終的にうまく行かなかった時に、お互いに「俺のほうに間違いは無いはず・・」的な状況になってしまうことも。同じものを実装して結果を比べれば、どっちが、どこで、どのぐらい間違ってるのかが分かりやすい。
メリット2:手法に関する理解が深まる — モジュール分割してると、自分の担当外のところは話が分からなくても進んでいってしまうが、これはけっこう危険。論文では分かったつもりでも、いざ実装してみると「あれ??」となることがあるし、実装してみて初めて分かる直感的な理解、っていうのは計り知れない。このメリットが大きいかも。
メリット3:実験のスループットが上がる — 論文の締め切りに追われている時なんかは特に、実験のスループットが重要になってくる。この時に、手法の微調整などの「手戻り」が発生すると、モジュール分担している場合、修正の必要なモジュールの担当者がボトルネックになってしまう。同じ実装を別々にやる場合、自分の実装に対しては完全に主導権があるので、独立に修正を進めることが可能。
研究のプロセスはプログラミングよりも時間スパンが長いので、IMとかでゆるーくつながりながらやるのが良いかも。同じ実装してデータを見ながらあーだこーだ言い合うのはけっこう楽しい。新しいアイデアというのはこういう時に生まれてくることも多い。
もちろん、ペアプログラミングと同じで、ペアを組む2人の実力が同じぐらいで無いと、実力の高いほうが一人でやったほうが早い(比較優位の原則が働く)ことになってしまうので、共同研究は良いパートナーを見つけることが何よりも大事である(と、どちらかと言うと足を引っ張る側の自分が言ってみる)
人がたくさん居る研究室や研究所では当たり前のことかもしれないけど、自分にとっては新鮮だったので紹介してみました。
3 Responses for "ペアプログラミングならぬ「ペア・リサーチング」のススメ"
ペアプログラミング、私も職場で実践してみたいのですが
どうしても目先の工数削減が優先されてしまうSIの現場では
なかなかかなわないのが現実です。
最終的には工数削減・品質向上に繋がると思うんですけどね・・・
>目先の工数削減が優先されてしまうSIの現場
果たしてそうでしょうか?
現場によっては、見かけの人月・工数を水増ししている例もあります。
「SIだから」と言っても、下請け元請け親会社の考えで大分異なります。
ユーザ企業とその顧客の景況感によっても左右されるでしょう。
ただ、一般的SIer社員にR&Dは不要というのが現実ですからね。
R&D部門以外はデジタル土方、理系の墓場、最底辺階層です。
求められるのは「目先の工数」というよりも、「資材転がし」の収支。
目先かどうかは関係なく、帳尻合わせに最大の関心があります。
「百年に一度の不況」なんて言われていますが、今までやってきた
事を着実にこなして守りに入るのか、新しい収入源を模索するのか、
トップの決断により生死が分かれる状況にきています。
R&Dの中身、成果がこれまで以上に求められると考えられます。
矢野経済研究所のSI子会社/親会社に関する調査結果をご覧下さい
ttp://www.atmarkit.co.jp/news/200902/26/yano.html
客観性が説得力を生むならペアリサーチも悪くないでしょうね。
ただし、成果が見えにくい、ビジネスにつなげにくい題材を選ぶと、
ダメージも大きくなるリスクもありそうです。
コメントありがとうございます。ちょっとトピックがずれてる感じもしなくはないですが(僕はペアプログラミングが効率化につながるかどうかということについて意見を言うつもりはないです)、ペアリサ-チングは、研究者でもペアで研究を進めることで効率化できる可能性がある、ということを示したかったということです。
研究というのはそもそも客観的に工数や成果が見えにくいので、実際企業のR&Dとかで採用するにはその辺りをもう少し詰めていかないと導入は難しいでしょうね。まず、研究成果をどのように評価するかというところから始めないといけません。
一方、大学の研究室というのはコストにはものすごく無頓着なのですが、やはり、役に立つかどうかよく分からないような基礎研究というのに対する風当たりが強いのは確かなので、こういうことでもっと客観的・意識的に「研究プロセス」を進めていけらればいいかなと思ってます。
Leave a reply