Re: 従来のソフトウェアエンジニア人事工学が決定的に間違っている点

ダンコーガイ氏に反応されるとは、ワシもえらくなったのー。

まず一番の誤解が、これ。頭の悪い大人100人も、教育次第で頭が充分よくなる可能性があるし、実際そうなっている。

404 Blog Not Found:従来のソフトウェアエンジニア人事工学が決定的に間違っている点

うーん、可能性がないわけじゃないけど、かなり低いよね? 凶悪犯が刑務所で更生する可能性ぐらい低い。Dan氏のまわりは教育次第で頭が良くなった大人が多いのかもしらんけど。

しかし、これが「Ruby on Rails の開発」だったら、どうか。MatzさんやさきださんはDHHを上回る生産性を上げられるであろうか。そして「twitterの開発」だったら? DHHの方が twitter.com の中の人々よりも生産性が高いのだろうか。

回答としては「そんなのやってみないとわかんない」。DHHは十分すぎるぐらいsmartなんだから、彼の得意分野でまつもとさんやささだ先生が勝てるかどうかは分からない。つーかお二方ともWeb系はさほど興味なさげだし、負けるんじゃない? これはDHHが言語開発でまつもとさんやささだ先生を上回るかどうかわかんないのと一緒。
それよりも、この質問に何の意味があるのか知りたい。

なぜMatzやDHHといった人々の生産性が高い--ように見えるし実際そう--かといえば、好きな仕事をしているからだ。客の望んだものではなく、自分の作りたいものを作る。それがたまたま「みんなの望んでいたもの」だからこそ、彼らはそうしていられるのだが、しかしそれだけでは「客が注文した」ものは出来ない。「作ってほしいもの」と「作りたいもの」が常に一致していれば双方ハッピーなのだが、そうはよっちゃんイカを食べながら年収1億円とはめったにならない。

これはその通りですね。好きなことなら生産性は高くなる。
で、それがもとの趣旨とどう関係するの? という疑問が。


なんか、Dan氏は

にも関わらず、

ソフトウェア開発も同じような体制にしたほうがいいのではないか。生産性が 30 倍違うのであれば、バカプログラマー 30 人を雇うより、スーパープログラマー 1 人にサポートスタッフ 5 人つけたほうが安くていいものができるだろう。

とならないのはなぜか。

と言っていて、その理由として

  • 生産性は定数ではない
  • 生産性は何を生産するかで多いに変わってしまう
  • 「生産性が高い」プログラマーほど仕事を選ぶ

ということを上げているんだけど、なんでこれが理由になるのか分からない。「スーパープログラマーでもいつも生産性が高いとは限らない」ことの理由としてならわかるけど、体制が変わらない/変えられないことの理由としてはさっぱり分からない。誰か解説して。
#でもタイトルの『ソフトウェアエンジニア人事工学』はいい言葉っすね。これ、Dan氏の力でぜひソフトウェア工学の一分野にしていただきたい。


つうかさ、みんな「スーパープログラマー」とか「天才プログラマー」とか、大好きだね。こんな言葉が出ると、いちいち反応してんでやんの。もとのエントリは単に「個人の能力差はとても大きいのにそれを無視して属人性をなくそうとするのは間違ってる」というだけの話。スーパーで天才なプログラマーがいなくても、個体能力差が大きいことには変わらないでしょ? 別に 30 倍も違いがなくて 5 倍程度の違いだとしても、その違いを無視するのはおかしいでしょ? ただそれだけのことなのに、スーパーとか天才とかいう単語にこだわるよねー。
なんだろう、コンプレックスでもあるんかな。

確かに効率は悪いよ。でも実際問題、コーディングをしている時間なんて全体の三分の一にも満たないわけで、そこをスーパープログラマーに置き換えて削れる工数なんてたかが知れている。とても単純な話、量が多いだけ。

スーパープログラマのSIにおける限界 - novtan別館

これとかそうだよね。もとの趣旨を外してコーディングだけに限定している。個人能力差が大きいことや属人性のことは、別にコーディングに限った話じゃないことぐらいわかるだろうに。
「スーパー」とか「天才」とかに反応して書くと、こういう内容になるんだろうね。

北島が目指すのは一個の金メダルであるけれども、システムが目指すのは1000画面あるシステムかもしれない。一個の人間の持てる能力を搾り出すのが果たして効率的か。10000円の肉が1000円の肉の10倍おいしいわけじゃないのと同じくらい、1人の力の限界を引き出すことに価値はない。一人の人間が限界を振り絞る、という前提がある競技だからこそチーム北島に意味はある。システム開発においてそういった意味があるケースはごくまれだ。

こういう人ほどプロジェクトに人員を投入したがるんだろうなあ。『搾り出す』とか、なんでそんな言葉を選ぶかね。普通に、生産性の高い人の能力を引き出す、でいいじゃん。プロジェクトが佳境になっているのに生産性の高い人が雑用をしているような状況はおかしいから、サポートスタッフをつけてみてはどうか、という案がそんなにおかしい? 『一人の人間が限界を振り絞る、という前提がある競技』じゃないとサポートスタッフをつけるのは意味ないの?
もうね、『10000円の肉が1000円の肉の10倍おいしいわけじゃない』とか、はぁ? ですよ。月70万の人材より月140万の人材が4倍5倍の生産性を出すような世界で、何言ってるんだか意味不明ですよ。

普段から総工数1000人月を軽く超えるようなプロジェクト内で生活しているせいで、麻痺しているのかもしれないけれども、SIerの仕事ってやっぱり理解されていないなあと思うことはある。

麻痺してるでしょうなあ。人月が多いことに疑問を持たないような人は。

名もないベンチャーが億単位の案件を獲るには (Re: 真のソフトウェア工学はもう存在している)

手でコードを書くプログラマと、コードにコードを書かせるメタプログラマでは、 規模が大きな仕事になるほど差が開いていくと思う。

真のソフトウェア工学はもう存在している - Hello, world! - s21g

うむ、その通りです。最近ようやく Ruby でのメタプログラミングを使った DSL の作り方・使い方が分かってきたところなんですけど、これが分かってくると「今までの自分は何をやってたんだろう」と思うことがしょっちゅうです。何というか、今までの自分は Ruby の力を全然引き出せてなかったなーと反省しきりでした。

ただまあ、実際のプロジェクトで問題になるのはお客様に原因があったりするので、技術だけで解決するような問題ばかりではないのが頭の痛いところです。

真のソフトウェア工学は、もう存在している。それは、 タワークレーンを使った高層ビル建築 に似ている。 メタプログラマーの仕事は、タワークレーンを組み立てるために小さなクレーンを動かす事だ。 それを実現するための道具はもう揃っていると思う。 それを使いこなしてる人もそれなりにいる。 では何が足りないのだろうか。

それはなんと言っても、実績が足りない。というか無い。 例えば5人のメタプログラマーの会社が、500億円の案件を50億円で受注したというような事例は皆無だと思う。 経営者は、万が一プロジェクトが失敗に終わった時に、実績が無い事に手を出した事を責められる事になる。 しかしながら、これについては成功事例が生まれれば改善する可能性があると思う。 営利企業の経営者が、これほどの節約機会を見過ごすとは思えない。

海外なら、もしかしたら実績はあるかもしれませんね。LispSmalltalkを使って大きなプロジェクトを完遂したというのはあると思います。

日本で大きな案件を獲るのは、実績もそうですが、知名度がないと難しいですね。会社の知名度あるいは個人の知名度が必要だと思いますが、まつもとさんぐらいの知名度でようやく商談で有利になれるかどうかだと思います。

ただ500億円ほどのプロジェクトであれば、そのすべての金額を1社に任せるのではなく、保険のために金額の1割を小さいベンチャー企業に任せるというのはありだと思うんですけど、どうでしょうか。どんなに大手でも失敗するときは失敗するから、無名だが優秀そうなベンチャーにも同時に案件を任せてみるというのは、リスクを回避するという観点から十分にありだと思います。

そのアプローチで売り込んでみるのはどうでしょうか? もし大手による開発が順調に進むようなら、私どもを途中で切ってくださって結構ですよ、でももし大手による開発がコケた場合を考えると、そしてその可能性が決して低くないことを考えると、ウチを使ってバックアッププランを用意しておくのは経営的にも最善の手ではないでしょうか、とかなんとか。