プログラミングの本当の熟練度とはなんだろうか。
ドレイファス・モデルというのがある。熟練度が低い初級者はする事を細かく指図されないとできないし、応用が利かない。 達人は臨機応変に状況を読み経験を元に結果を出す。これを5レベルに分け、各レベルでのスキルや応用ができる能力を明確にしたものだ。
アメリカで看護業界の人手不足と熟練度の低さが問題になった時期がある。看護婦をただの機械的な作業職と捉えた結果だそうだ。現場はマニュアルに載ってない事だらけなのに臨機応変な達人になりにくく、そのレベルに達しても報酬が見合わず達人の人材が定着しなかったのだ。
ソフトやシステム開発で問題になるのが、開発プロセスのマニュアル化だ。 作業や運営の取り決めは必要だ。だが、マネジメントがプロセスのマニュアル化を要求するのには、マニュアル化すれば人間を交換できると言う考えが根底にあるからだ。
極端な話、きちんと作ったプロセス通りにできれば誰でも良い。人材の入れ替わりが激しいアメリカではよくある考え方だ。 もう一段進めればプロセスを人件費が安いオフショアに持っていけば良い。 インドでもエストニアでも賢い人材はたくさん居るから、マニュアル化して(仕様を作って)言った通りに作ってもらえばいい。
でも実際そうだろうか。ちょっとでも高度なシステムだったらユースケースが100パーセント定義された仕様なんかできない。仕様に無い事はどんどん出て来る。 そんな時ユーザーに詳しい達人が開発側にいればコンテキストに応じた判断ができる。だから細かい仕様はいらない。でもオフショアにそんな事を求めるのは無理だし、オフショア先はターゲット業界と隔離されているから人材が達人レベルに育つ道がない。
ソフト開発とは、同じ物をより効率よくより大量に生産するのとは違う。毎回違うビジネスの問題を解く(ソリューションを作る)のが命題だ。 デザインパターンをどれだけ知っていてもそれを実世界の問題に応用できなければ意味が無い。 達人レベルというのはプログラミングの熟練したスキルを、ビジネスニーズに応じて応用する事だ。 だからドレイファス・モデルの上の方の達人・上級者レベルの人材というのはソフト開発のどこかになければならない存在だ。 クォリティの高いソフトを作るためにはそういう組織を作るところから考えるべきだ。