流行りのモブプログラミングをやって分かった 個人の開発手法の違い

  • 15
    いいね
  • 1
    コメント

という偉そうなタイトルを付けた。

前提

僕は今の仕事では、アジャイル開発をやっている。
なので開発手法は、個人の裁量に任されるところが大きい。

(環境によっても話が違ってくるかもしれないんので、前提として書いておく)

モブプログラミング実践

チームで最近、流行りのモブプログラミングというものをやってみた。

そこで、ある一人のメンバーの開発手法を見た。その方法とは。

  • ドキュメントを読む
  • 「これで動くんじゃない?」という予想を立てて、コード例を貼り付ける
  • 動く

そのスピードがものすごく速いのだ。
「予想」→「実践」→「フィードバック」のループが超高速で回っている感じ。

僕は「え、それで動くんだ!」と驚きを感じた。
自分にはとてもできない芸当だ。

プログラミングの世界では、コピペコーディングはNGということになっているが、今回の問題はそこではない。
(とりあえず動くものを作って、理論は後から考えても良い)

それよりも、ドキュメントをさっと読んだだけで「各パーツが組み立てられた完成図」を、頭の中に描けているというのがすごいのだ。

自分の場合

ドキュメントを読みながら、分からないことに出会ったら、だいたい立ち止まってしまう。

「これってどういうことだろう?」と、例えごく短いコードでも、じっくりと読んでみたり、分からない行があれば、関連ドキュメントを調べてみたりする。
そこでまた分からないことが出てくるので、さらに関連情報を調べてみたりする。(そこで新しい発見もあるけれど)

果たして、

  • 立ち止まらずに、手を動かすの(タイプA)
  • 立ち止まって、考える(タイプB)

どちらが優れているのだろうか。

一長一短?

開発感覚を二つのタイプに分けてしまうのは極端だとは思うが、これは一長一短である。
少なくとも、全てのケースにおいてどちらかがどちらかより優れているということはないだろう。

実際に今のチームには「タイプB」でなおかつ「ものすごく出来る」メンバーがいる。

プログラミングのやり方においても、個人個人でかなり流儀に違いがある。
そして、例えどちらのタイプでも、優れた成果を出すことは可能だ。

長所を活かす

これは今までの人生において、どんなパラメータにポイントを割り振ってきたかによると思う。

「はやさ」にポイントを割り振ってきた人もいるし、「ちから」にポイントを振ってきた人もいる。

そして、今までに割り振ってきたポイントは、急には変えられない。ポイントのリセットはないのだ。
だから「今現在のパラメータ」で、最良の戦略を選ぶ必要がある。

もちろん、今後伸ばしていきたいパラメータがあれば、成長戦略を立て直せばいい。
(そういうことが出来るのならば)

システム開発はRPG

少年の頃、僕らはひとつのRPGで遊ぶにしても、人によってまるでプレイ手法は違った。

  • 何も恐れず、どんどん先に進む子供。
  • アイテムを全て集めようとする子供。
  • レベルを上げてからボスに挑もうとする子供。

だが、

  • 最速クリアを目指す子供は、最速でボスに負けるかもしれない
  • アイテムを全部集める子供は、ゴールドを浪費するかもしれない。
  • レベルを上げてからボスに挑む子供は、クリアがすごく遅いかもしれない。

このように、それぞれに短所もある。

そもそもの目的は何か?
最速でゲームをクリアすることなのか、多くのアイテムを集めることなのか、安全にボスを倒すことなのか。

「出そうとする結果」によっても、プレイ手法の一長一短は変わってくる。

重要なのは多様性

上に書いた、個人的なゲームの遊び方と少し話が逸れるが、もうひとつ。

システム開発はチームプレイである。

  • 勇者
  • 戦士
  • 僧侶
  • 魔法使い

というように、バラエティに富んだ職業がいた方が良い。

アンバランスなパーティー

RPGでも、

  • 戦士
  • 戦士
  • 戦士
  • 戦士

という組み合わせだと、回復が出来ない、魔法も使えない。
いつかパーティーは危機に陥るかもしれない。

これをシステム開発で言えば、

  • スピーディーに開発するメンバーばかりだと、重要な仕様を見落とすかもしれない。
  • じっくりと開発するメンバーばかりだと、なかなか開発速度が上がらないかもしれない。

という感じだ。

(ものすごく当たり前の話に落ち着いてしまったが)

最強パーティー?

ちなみに、

  • 賢者
  • 賢者
  • 賢者
  • 賢者

という組み合わせは最高かもしれないが、ルイーダの酒場に賢者はいない。

まとめ

  • 個々人のパラメータや、開発手法にバラツキがあるのは良い傾向だ。(それが有効に働く開発環境であれば)
  • 個人の能力は、今まで成長に割り振ってきたパラメータに依存する。これを有効に活用しよう。(長所を活かそう)

ところで

モブプログラミングでコードが上手く動いた時には、
「コロンビア〜!」と言いながら両腕を上げる掟です。本チームでは。

image

関連記事