Hatena::ブログ(Diary)

達人プログラマーを目指して このページをアンテナに追加 RSSフィード Twitter

2010-12-06

プログラマーの成長を考えないSIerの仮説は間違っている

Java EEや.NETはCOBOLやVB6よりも本当に生産性が高いか? - 達人プログラマーを目指してのコメントで

熟練者も居ることは理解しているが、開発をする上で熟練者ばかりを集めることはできない。このため初心者側にレベルを合わせざるを得ない。

というコメントをいただきましたけれど、これは実に典型的なSIer(の上司)の考え方ですね。SIerの仮説と呼んでもよいくらいですね。とにかく、この仮説の前提となっているのは

というモデルです。とにかく、この仮説がはびこっているから、いまだにSIerフレームワークは「初心者側にレベルを合わせざるを得ない」という思い込みで作られていることが多いのでしょう。

COBOL(の初期の)時代ならまだしも、少なくとも現在の開発環境において、上記の前提が成り立たないことは実際に現場で開発した経験のあるプログラマーなら実に明白なことだと思うのですが。

とっくの昔に

などの本でプログラマーは知的労働者であるということが書かれていますし、有名な

人月の神話

人月の神話

でも、プログラマーが交換可能なリソースであるという仮説は神話として否定されています。

私としては、プログラマースキルレベルが一定という仮説に特に疑問を持ちます。スキルが低いプログラマーがいるから初心者でもわかるようにオブジェクト指向は使わないようにするなどという発想は、ちょうどドラクエでずっとレベル3くらいで固定だからずっとスライムしかいないフィールドで戦わせているようなものであり、実に面白みもなく無意味です。ドラクエだとレベルの高いキャラクターと低いキャラクターでパーティーを組ませて、強い敵と戦わせることで、レベルの低いキャラクターのレベルは一気に上がって、最後には差がどんどん縮まっていくようになっているのですが、プログラマーだってハイスキルプログラマーとペアやチームを組んで、開発する機会を与えれば、多少敷居の高いツールやフレームワークでも難なく習得していくことが実際は多いと思います。実際、Javaオブジェクト指向もまったく初めてというプログラマーで最初はまったく戦力にならなかった人が1ヶ月後にはJUnitのクラスを一人で書き3ヵ月後にはSpring MVCで画面のコントローラを実装できるようになるといったようなことは何度も経験しています。基本的にプログラミングが好きでこの仕事をしている人が多いのですから、レベルの高いプログラマーと一緒に仕事をして、オブジェクト指向など正しい考え方を身につける機会を与えれば通常はぐんぐん実力が伸びていきます。*1もちろん、中にはどのように指導しても成長せず、非常にやる気もセンスもないプログラマーもいるかもしれませんが、私の経験上そのような人*2は20人に1人もいないくらいであり、そういう人にレベルを合わせる必要はぜんぜんないと考えます。どうしてもプログラマーに向かない人は、テストの打鍵とかドキュメント整理など他にもいろいろタスクは与えられますから、そのような人のためにわざわざオブジェクト指向を捨てることはないのです。

プログラマーの成長を考えるなら、既にプログラミングと設計は本来切り離せないものなのでは - 達人プログラマーを目指してで指摘したように

さらに、付け加えるとこのような事前開発は、技術リスクの軽減効果だけでなく、開発メンバーのスキルアップという教育面での効果も高いです。事前開発を通してツールの使い方やフレームワークの使い方をそのプロジェクトの文脈で学ぶことができるのですから非常に効果的な教育ができます。

アーキテクト(上級プログラマー)を中心とした小規模なチームで事前開発を行うというやり方をぜひお勧めしたいです。要件定義が完全に終わらなくても、システムの核となるユースケースは初期の段階からおよそ決まっているはずですから、この中心となるユースケースを実現するためのベースラインアーキテクチャーを構築するフェーズを設けて、ここでアーキテクトのスキルプログラマーにトランスファーします。このフェーズは比較的少数精鋭なのでアジャイル的に行うことができ、したがってJava EEや.NETはCOBOLやVB6よりも本当に生産性が高いか? - 達人プログラマーを目指してのグラフの領域②で仕事ができるはずです。そして、画面、帳票、バッチ、マスターメンテナンスなど一通りの仕組みを作ってまだ人手が足りなかったら多くのプログラマーを後から追加して横展開すればよいのです。この場合、事前開発に参加したハイスキルプログラマーが開発リーダーとして他のプログラマーペアプロやレビューを通して指導します。このような開発スタイルを行う場合、現状のSIerフレームワークはアーキテクトにとって実に邪魔になることが多いです。

このように事前のアジャイル的な開発と、大規模なウォーターフォール開発を組み合わせる手法は「改良型ウォーターフォール」とも呼ばれるようですね。どうしてもっと普及しないのでしょうか?この場合、ポイントはスキルも高くて指導力もあるアーキテクトの存在にかかっていると思います。そんなアーキテクトはいないという声が聞こえてきそうですが、きちんと評価して、また、若手の技術力も育てていくようにすればそういう仕事をしたいプログラマーはたくさんいると思います。

このエントリーをはてなブックマークに追加

*1:私の趣味ということもありますが、私がアーキテクトを担当した案件ではJPAやSpring MVCなどオブジェクト指向的で結構敷居が高いといわれるフレームワークを使った開発が多かったですが、最後まで技術力が問題になったという人はほとんどいません。むしろ、業務知識などがネックなることが多かったように思います。

*2:現在のスキルが低いという意味ではなくて潜在能力が極端に低いという人

とおりすがりとおりすがり 2010/12/08 02:32 プロジェクトマネージメントと経営の視点が抜けてる時点で見てられない。

ryoasairyoasai 2010/12/08 08:10 どちらもまったく不勉強なのでご指摘のとおり正しい視点で考えられないと思います。
プロジェクトマネージメントと経営の視点とプログラマーの視点が融合することで今後新しいシステム活用の道が開かれてくると思いますので、是非建設的なご意見をいただければと思います。

とおりすがり2とおりすがり2 2010/12/08 08:50 「お前の代わりなんていくらでもいる」等の言葉に晒され続けたプログラマーの視点からはプログラマーは容易に交換可能なリソースであると見なされているようにしか思えないかもしれないが、経営あるいはプロジェクトマネージメントの視点から見れば人材であるプログラマーはプロジェクトにおける容易には交換できないリソースの代表であり、それ故に開発する上で熟練者ばかりを集めることができず、初心者側にレベルを合わせざるを得ない。
容易に交換できないのは人材の流動性が低いからであり、この場合の流動性は経営あるいはプロジェクトマネージメントからの視点で簡単に雇用できて簡単にクビにできることを意味する。

とおりすがり3とおりすがり3 2010/12/08 15:41 「やる気もセンスもない人」というくくりが絶妙ですね。
問題なのは、やる気があってもセンスがない人が多いことで、傍からはその人たちは「やる気にあふれてまじめ」とか見られます。
大規模プロジェクトで100人集まれば、
・10人がやる気もセンスもない人
・20人がやる気があってもセンスがない人(この人たちが、鍛えれば伸びると思うのは楽観的過ぎるのでは?)
・50人がごく普通の人
・10人がやる気がないけどセンスがある人
・10人がやる気もセンスもある人
くらいじゃないかなと思います。

ryoasairyoasai 2010/12/08 22:48 >プログラマーはプロジェクトにおける容易には交換できないリソースの代表であり
なるほど。外国と違って日本では正社員は保護されており、簡単にクビにできないから流動性が低いということですね。これは日本の業界の構造を考える上で大切な視点だと思う。ただ、こういう事情があるから、アメリカと違って、インハウス(自社)のプログラマーというのがほとんど存在しなくて、大部分下請けになるからSIerというビジネスが成り立つ。さらに、そのSIerも流動性を高めたいから下請けに頼って、結局多重下請け構造にならざるを得ないと理解していますが。
流動性が低いというのは下請けの側の経営者の立場でということですか?
>それ故に開発する上で熟練者ばかりを集めることができず、初心者側にレベルを合わせざるを得ない。
ここがちょっとよく理解できないのですが、流動性が低いと時間をかけて育てることができるから熟練者ばかりにならないのですか?

ryoasairyoasai 2010/12/08 22:58 いくら育てて経験を積んでも伸びない人が大半ということでそういう人もクビにできないで会社に残っているからという意味ですか?つまりベテランであっても初心者の人がいるという意味ですかね。

anonymousanonymous 2010/12/09 13:49 本題とはすこしずれますが、軽量言語の世界では昔から、上級者の力をいかに発揮させるかに主眼を置いてます。
レベルが下の人に合わせると上級者の能力を削ぐことになるので、下に合わせることはあまりしません。
開発自体、素人を多数揃えるようなことはせず、少数精鋭で行うのが主流ですし、それでうまく廻ってます。
それに上級者が書いた軽量言語のコードは大変コンパクトになるため、大規模にならずに済むという利点もあります。
http://www.nicovideo.jp/watch/sm3820151
こういったことは昔から言われてますが、いつまでたっても受け入れられない、かたくなな人がとても多いですね。

ryoasairyoasai 2010/12/09 21:25 おっしゃることに対しては激しく同意で、動的言語ではJava以上にスキルの差が表れると思います。特にRubyのような型のない言語ではメソッド名などが正しくつけられることが最低限のスキルとなります。残念ながら仕事ではツールや試験用としてしか使ったことがありませんが。(ちなみに現在Programming Rubyの第3版でRuby1.9を勉強中です。)軽量言語としてはGroovyなどはJavaとの相性も非常によいのでもっと広まってもよい時期だと考えています。
ただ、残念ながらSI業界の世界は正しい考え方がまったく評価されない世界ということですね。私も今まで10年泥のように働いてきてよいプログラムを作ればきっと喜んでもらえると信じてやってきたのですが、最近になってよいプログラムが会社から評価されるのではないということがようやく分かってきました。下手なプログラムで10倍の工数をかけて構築し、OSのバージョンアップだけの原因で全面作り直しといったシステムの方が儲かって、評価されるというのが現実のようです。本当に悲しいことですが。
そういう意味で残念ながら日本のこの業界では海外であるようなJava vs Rubyなどという議論をする段階にまったく到達していないように思われます。

ryoasairyoasai 2010/12/09 21:43 >こういったことは昔から言われてますが、いつまでたっても受け入れられない、かたくなな人がとても多いですね。
竜馬の時代と違って、現在では書籍やネットで海外の情報が容易にたくさん得られるにもかかわらず、どうして従来のやり方を続けるのでしょうか。英語が読めないから情報が入ってこないのかな。
「とおりすがり」さんのコメントにあるように「経営的視点」ではできないプログラマーも食べさせていかなくてはならないといったような事情もあるのでしょう。ただ、プログラマーのような本来知識労働をするプロフェッショナルな仕事ならある優秀な人を高い報酬で評価する一方で、だめな人はくびにするといった面があってもよいと思います。野球の選手だってそうなのに、どうしてプログラマーは一般の会社員と同じ評価の仕方なのでしょう。この辺りの法律を整理するとだいぶ違うかもしれないと思いました。

namename 2010/12/09 22:35 プロ野球選手と一般の会社員を一緒にするのはムリだと思いますよ。
プロ野球選手は、ある意味契約社員でしょ?戦力外になるレベルだと代わりの人が存在するってのが大きいのではないでしょうか?スポーツ選手でも、社員の場合、チームが無くなった際に、会社に残って(全然ちがう仕事で)働くような場合もあるようで、社員は簡単にクビを切れないって言うのが現在の法律ですね。

ryoasairyoasai 2010/12/09 23:28 >プロ野球選手と一般の会社員を一緒にするのはムリだと思いますよ。
アメリカだとプログラマーは契約社員のような扱いだと聞いたことがあります。プロジェクトが終わって、無能なら直ぐにクビということです。その代わり優秀な人は年収何千万も稼ぐ人もいる。日本でもプログラマーを一般社員としてではなく契約社員のように扱うことで流動性が高くなって専門性がより発揮できるようにならないかと思うわけです。つまり、ハイリスク、ハイリターンの職業ということですね。これだと優秀な人が集まるだろうし、もっとがんばって本を読まないといけないということにならないでしょうか。日本はプログラマーが単純労働者と同じように保護され過ぎているから勉強する意欲もわかないし、先の議論にあるように流動性の低下から多重下請け構造を招くことになり、弊害が多いと思います。

ryoasairyoasai 2010/12/09 23:45 なお、本文でも指摘したように日本ではプログラマーは法律上も、実際の作業も単純労働者の扱いなのですが、ほとんどの外国では頭脳労働者として扱っているという前提の違いを理解しないと正しい議論ができないと思います。でも、そういう前提なので、とにかくJavaやRubyなどの最近の言語やFWはとにかく覚えることが半端でないほど多く、相当勉強しているような専門家をターゲットにしているとのだと思います。日本だとプログラミングの本は翻訳書を除くと入門系の物がほとんどなのに、洋書だとかなり専門的な本が多数出版されているというのもこういった背景の違いからくるのでしょうか。とにかく、(このブログのテーマでもありますが)洋書を勉強して海外のプログラマーと同じレベルを目指そうとがんばると待遇が割に合わないなあということになるのですが。日本でプログラマーとしてモチベーションを保ってやっていくには給料を他人と比べないという心がけが大切かもしれません。

nonamenoname 2011/01/11 23:51 あなたがいるところが底辺なだけなのに、それを「日本では」と一般化するのはやめていただきたい。

ryoasairyoasai 2011/01/12 02:41 この記事はタイトルにあるようにSIerのコンテキストで説明していましたので、「日本では」は「日本のSI業界では」という意味のつもりでした。また、例外はありますが、多くの場合くらいの意味でご理解ください。日本の全てのプログラマーとは言っていませんので誤解されませんよう。