軍隊とソフトウェア開発

greenteaさんも口をすっぱくして何度も云ってるでしょう(とトラの威を借りてみる)。

「たとえ話」は危険なんだけどね -ときどきの雑記帖 i戦士篇

きむら(K)さんにまた叱られてしまった..orz

私は議論のクリティカルな部分では、話を軍隊に写像しているつもりはなかったのだけど、つもりなだけで出来ていないってことなんだろうなぁ。


* * *


凪瀬さんのエントリを読んで私が思ったのは JavaBlack さんや vraven さんの突っ込みと同じです(月並みで申し訳ありません)。それに対する 凪瀬さんの回答が

からくりは単純で、初級者にはプログラミングをさせない。コーディングとプログラミングを分断してこれにあたっているわけです。
これは本稿の序章で主張している通りです。

静的オブジェクト指向は設計者が苦労を背負込むシステム

「炎上させるクラスタ」に所属する人に仕事をさせないわけにはいきませんから、どうにかそこにあてがうことのできる仕事を作らないといけない。
アーキテクトはあらゆる技能を駆使して、コーディングとプログラミングを分離する工夫をしてきました。

静的オブジェクト指向は設計者が苦労を背負込むシステム

です。「駄目なヤツにはプログラムを書かせるな。コーディングだけさせましょう」ということ。なのだけれど、その回答を受けても尚、「理屈はわかるけれどそれが上手く回るイメージが私の頭に描けない」という状況が変わらないため、したためたエントリが アレでした。


* * *


この凪瀬さんの主張「『初級者にはプログラミングをさせない』がプロジェクトのプラスになる」が、私の心に引っかかります。私が開発に対し常々抱いている考えは

  • あるレベル以下の開発者を増やしても、足を引っ張るだけでプロジェクトには貢献しない
  • プログラミングは設計である

なので、自分の考えとパッと見 矛盾するのです。

ここで注意したいのは、初級者(コーダー)の定義と、コーダーの開発者全体におけるボリューム。コーダーが十分にレベルが高い開発者であれば全然矛盾しないですし、コーダーの頭数が全体に対してそれほどでなければこれも矛盾しません。

コーダーの定義に関しては「クラスを使えるけど作れない」はいまいちピンとこなかったので、「凪瀬さんは過去にこんなコト言ってたな」と思い出して、コーダーを「自然言語で考えてから(プログラミング言語に)翻訳するレベル」の開発者として、考えてみました。

ボリュームゾーンについては、同エントリー中で、Java は「クラスを設計する側の立場に立つと非常に苦労するものなのですが、クラスを使う側には非常に楽」という風に最適化されていて、それが大規模開発の為ならば、大規模開発における開発者のボリュームゾーンは「クラス使う側」だ、と読みました。「中級者」は「クラスをつくって苦労する側」・・つまり Java で余計に大変にさせられちゃった側ですが、ここを楽にするよりコーダを楽にした方が全体としてはプラスになるという論調ですので、ボリュームゾーンにはなり得ないと解釈しました。*1


で、ここまで考えても、やっぱり私、vraven さんの「炎上させるクラスタ」になるような気がする。むー。

そこでひらめくのは、このボリュームゾーン「初級者」を「コーダー」と位置づけ、「初級者にはプログラミングをさせない。コーディングとプログラミングを分断してこれにあたる」のがこの手のプロジェクトを成功させるミソだけれど、このような戦略をとる場合「軍を率いる将軍の采配」が非常に重要になってくる、と言う部分。(将軍は「上級者であるスペシャリスト」を指すと思う)

私が、この戦略上重要になる「軍を率いる将軍の采配」にピンと来ていないのが、理解できないポイントじゃないかという疑念が浮かんでくるのです。


以上、あたしの脳内のまとめ。

上級者である    ← ・別名「将軍」
スペシャリスト     ・「采配」が重要な人。
                   ・この人が凄いと「常勝」

中級者 中級者   ← ・数は多くないらしい
 中級者 中級者     ・クラスをつくれる
                   ・Java で大変になった人たち

初級者 初級者 初級者 ← ・クラスを作る能力がない
初級者 初級者 初級者    ・たどたどしいながらも、
初級者 初級者 初級者      条件分岐とループを操れる
初級者 初級者 初級者    ・「大量の仕様を人海戦術で
初級者 初級者 初級者        捌かなければならない」
初級者 初級者 初級者      の人海?
         ・
         ・
         ・
???
 Ω < 常勝のイメージがわかないのは、私が
 私   「将軍の采配」を理解できてないから!?
                   ↓
                知りてぇ!


* * *


もう自分のポンコツさ加減に自分の言葉で話すのが怖くなってきたので、人の言葉を借りてしまいます。私が思う、大きな開発をうまく生かせるカギは、

だから、プロジェクトが長くなると、どうしたって
チームのレベルを底上げする必要が出てくる。ドメイン
よりよく理解する。システムをよりよく理解する。技術を
よりよく理解する。こういう学習が繰り返されないと、
やっぱりダメになるよね。

だから、プロジェクトを成功させるカギの1つは、こういう
学習をいかに仕事に自然に組み込むかなんだよね。

http://www.jitu.org/~tko/cgi-bin/bakagaiku.rb?bakaid=20080518

だと思います。

だから、「プログラミングさせない」は明らかに「レベルの底上げ」に対してデメリットですし、なによりそれ以前にボリュームゾーンが「コーダー」では、(私の思うやり方では)もう失敗が決まってしまう...と思いました。

蛇足なのですけど、「出来るはずがない」と言っているんじゃ無くって、「私のやり方とちがう」「この新しいやり方は私にはイメージがつかない・・具体的にどゆこと?」と言うだけのこと。まだ、「出来るはずがない」と言えるだけの経験もありません。

凪瀬さんの言われる大規模開発のコツは、私には未知のものであって、だから上手くイメージできないけれど、今の私では失敗プロジェクトにしか出来ない初期条件で成功させられるのなら・・・、ということ。きむら(K)さんの言葉を借りるなら

それは、「熟練した個人技」を埋め合わせたりあるいは凌駕してしまったりする 「なにか」

の「なにか」を私は知りたいナー、というエントリ・・のつもりでした。


* * *


凪瀬さんの「将軍」という比喩は、パッと頭に大規模なイメージと「采配が重要」のイメージが広がるとても良い比喩だと思い、私も調子に乗って軍隊の比喩(というか言葉遊び)を使い回していたのですが、比喩のまま議論を進めてはいけないのはその通りで、だから議論の本筋となる部分では具体的に書くように気をつけていたつもりでした。私としては比喩のまま話を進めているつもりは全くなかったので、きむら(K)さんのお叱りは、「あー、私ってば、気をつけて書いてもだめなんだ」と凹むことしきりです。...orz

適度に比喩を盛り込みつつ、本質が曖昧にならない、ウィットな文書に憧れるのだけれど、私にはムリみたいです。

蛇足

文章の書き様を見ると多分元ネタでは中国史の、 三国志とか唐代あたりまでの時代背景を念頭においているような気がするんですが

「たとえ話」は危険なんだけどね -ときどきの雑記帖 i戦士篇

そうなんですか!?あたしゃ近代戦だとばっかり...orz

デスマーチ(死の行軍)」から連想した言葉遊びだと思っていました。「何時の時代の軍隊?」なんて発想じたいなかった(から今の、だと無条件に連想)*2

なので当然一騎当千なんて全然念頭に無くって、「訓練した職業軍人ズで勝てるのは当たり前、なら学徒動員兵で勝つには?」が私の頭に抱いた凪瀬さんのエントリーのイメージだったりします。

そもそも軍に疎いのに軍の比喩を使うんじゃないっ!、ということでありますね..orz

蛇足2

これがホントの ジェネラリック・プログラミング?

追記

ちょっと自分に都合の良い解釈が過ぎますね。前回のエントリ作成時ののちゃんとした顛末は

???
 Ω<どんな「将軍」だって、ムリ、ムリ! 絶対ムリ!
     それより中級者をボリュームゾーンに出来ないの?
           │
           ├→ 途中、Java的特徴って中級者(の下の方)教育支援の
           │   役割もあるかも、と思いついて別エントリ作成
           ↓
 Ω<(書き終わってみて..)
     私が「成功する策」を思いつかないだけで、
     凄い「将軍」だと出来ちゃうのかも...(と思い直す)
           ↓
 Ω<タイトル変えて、文章ちょこっと手直しして、
     「将軍」への質問にしようか。
     (てか、マジで知りたいわぁ)

な感じ。「ダメ、ムリ、出来ない」のほうが主な主張なエントリでした。

*1:今考え返せば、ここの解釈がちょっと怪しいかな

*2:今の・・よりむしろスペースオペラの軍隊であるな〜、私の頭ン中。前回のエントリタイトルは「紅茶大好きなあの人の話を聞きたい」でも良かったかもかも...って、ダメじゃんorz