« 企業システムに現れるフラクタル構造 | トップページ | レファレンスモデルで社会貢献を »

2011.05.24

プログラマの地位向上のためにやれること

 プログラマが尊敬され高い給与を得るためにはどうしたらよいか。飲み会などでそんな話になることがある。私の答えは明快だが甘くない。

 プログラマの地位を確実に高めるための手段がひとつある。結果的にプログラマの参入障壁が高まるような変化を起こせばよい。

 もともとプログラミングの仕事はスキルや適性が求められるものだったのだが、IDEの発展や分業化の進展にともなって、それらが求められない(または求められなさそうに見える)コーディング作業が大量に切り出されるようになった。これが良くも悪くも業界への労働力の大量参入を許し、技術者の多くが安月給の過重労働にあえぐ状況が生まれた。

 その「工数地獄」とでも呼べる状況を、経営者のサクシュだの技術軽視の風潮が生んだものだとみなす考え方は、完全な間違いとはいえないにせよ短絡すぎる。ようするに、参入障壁が低い仕事は社会で尊敬され高給を得る職業にはなりにくいだけの話だ。

 では、プログラマの参入障壁を高めるとしたらどうしたらよいのか。方法は大きく分けて2種類ある。

1.簡単なプログラミング作業を高度化する
2.簡単なプログラミング作業を自動化する

 まず、「簡単なプログラミング作業を高度化する」という方法。簡単にやれる仕事をわざわざ難しくするなんて珍妙に思えるかもしれないが、けっこうマジメに検討されている。たとえば、品質や保守性を高めるといった効果を狙って、コーディングのスタイルやルールを高度に規格化するやり方だ。対応できるプログラマがある程度は限定されるゆえに、局所的には参入障壁が高まるだろう。狙った効果もそれなりに出るのだろう。

 しかし、話はそれほど単純ではない。従来の規格化されていないやり方がどこか別の開発企業でなされている限り、裁定取引によって契約単価は上昇しない。また、将来の保守性のために現在の高い開発コストを忍ぶという決断は、ユーザ企業はなかなかしてくれない。たちまち「わざわざ高度化したプログラミングをあいかわらず安価で請け負う」という状況を招く。それだけでも前途は多難であるが、次に説明するやり方が実現すれば多くの努力が徒労に終わる可能性がある。

 2つ目の「簡単なプログラミング作業を自動化する」は、ソフトウエアの発展の方向性として正統的だ。なにかの手作業をコンピュータの自動処理に置き換える――それはソフトウエアに課せられた基本的な役割のひとつだからだ。

 その方向に沿って、たとえば、外部委託されるコーディング作業の多くの部分を占める「個別案件においてパターン化可能なプログラミング」を不要にするような実装技術を開発する。そのあとに残るプログラミングの難易度は相対的に高まるので、プログラマの参入障壁が高まる。つまり、簡単な仕事をわざわざ難しくせずとも、それらを機械処理に置き換えてしまうことで、参入障壁を高めることは可能である。

 そもそも、何度も説明してきたように、個別案件において簡単なプログラムをふくめていちいち手作りしている状況が異常である。その意味では、コーディングを厳格に規格化するやり方も「異常なことを効果的に行うための工夫」でしかない。たとえば、単純なマスターメンテあたりを「ドメイン駆動」で緻密にプログラミングするなんて、私には冗談にしか聞こえない。

 工数ビジネスそのものは良いものでも悪いものでもないが、これが「簡単で膨大なプログラミング作業」と結びつくからおかしな話になる。だから、簡単にプログラミングできるモジュールまでをいちいち他人にプログラミングしてもらわずに済むような、たとえばそういうモジュールについては設計するだけで実装が終わるような開発基盤を、事前にプログラミングしておけばよい。結果的に、案件毎にプログラミングすべき対象を難しい領域に追い込める。

 「高度化」で行こうが「自動化」で行こうが、ようするにスキルと適性に恵まれたプログラマしか扱えないような仕事ばかりになればよい。もしかしたら、「自動化」で絞り込まれた手ごわいモジュールを「高度化されたプログラミング」で実装する、というやり方が理想なのかもしれない。いずれにしても、そんな状況で生き残っているプログラマならば、尊敬され高い給与を得ているだろう。続く問いは「じぶんはそれを望むか」である。

|

« 企業システムに現れるフラクタル構造 | トップページ | レファレンスモデルで社会貢献を »

コメント

私はプログラマーだけどプログラミング自体は「手段」にすぎないと思う・・。なんのためのプログラムかが重要なんじゃないかな。プログラマの地位向上にはそういう「目的」を持つこと、理解することが重要だと思う。誰かのためのものでもいいし、自分のアイデアでもいい。簡単なプログラミングをどうこうする、というアイデアも悪くは無いけども現実的には少しずれている気がする。

投稿: とおりすがりのSE | 2011.06.24 10:43

>(プログラマの地位向上には)なんのためのプログラムかが重要
発言の背景にプログラマ=業務要件や顧客マインドに立てない人
という仮定があるように聞こえました。

ブログエントリの趣旨の背景にあるのはプログラミング作業 != 知的仕事 という見方ゆえにプログラマー=低賃金になっている、という枠組みでしょう。

・だめなプログラマが多い → こうすればよいプログラマに
という話ではなく
・いいプログラマですら(知的な仕事ができず)地位が低い → プログラミングの仕事をより知的にする
という話と思います。


業務要件も顧客マインドも十分に分かっていも、プログラミングすることを仕事にすると低賃金になってしまう。知的仕事を良貨にたとえて言うなら「悪貨が良貨を駆逐している」のがプログラミングの仕事といえるでしょう。

プログラム生成装置などができるとそれが適用できないところについては「手作りだから高いんです」という主張はしやすくなるかもしれませんね。

投稿: SE | 2011.08.26 09:57

コメントを書く



(ウェブ上には掲載しません)




トラックバック


この記事へのトラックバック一覧です: プログラマの地位向上のためにやれること:

« 企業システムに現れるフラクタル構造 | トップページ | レファレンスモデルで社会貢献を »