プログラミング能力で生産性なんて大して変わらない
ある界隈では「プログラマーによって生産性に10倍、100倍差が出る」とかいう風説が流布されてるけど、それって具体的にどういうシチュエーションを想定して言ってるのかがあまり話されないのってどうなのって毎回思う。
たぶんプログラマーという職種やプログラミングという営みはもっと評価されるべきであり、不当に貶められているという意識が根底にあって、その裏返しとしてそういう話が持て囃されやすいんだと思う。
で、それとは対比する形でディレクションとかマネジメントとかいわゆる上流工程の能力を評価するような声はまるで聞こえてこないし、むしろそういうプロマネ的な立場の人に対しての軽蔑やら怨念ばかりネットでは目にする。
自分はプログラミングもプロマネ的な仕事もどっちもやるけど、生産性という観点で言えばぶっちゃけプロマネとしての能力の方が遥かに大きな差を生むことを色んな現場で実感してきた。
逆にプログラミング能力で生産性に大きな差が出る場面ってそんな見たことない。
まあ派遣で実務経験無いのに経歴盛ってプロジェクトに紛れ込んだ人とかは例外としても、それなりの経験値を持った人同士で比較した場合、せいぜい2倍か3倍程度の差が出るのが良いとこだと思う。
だけど、上流工程のスキルは、同じぐらいの経験値でも人によって生産性に10倍以上の差が生まれることがザラにある。
理由は単純で、そもそもクライアントの要件を取り違えていたら、どれだけ早く高品質なコードを書いたところで全て無駄になってしまうからだ。
プログラミングとマネジメントの決定的な違いは、プログラミングは具体的に作るものが決まっている状況で、それをどう作るかを考えるのに対して、マネジメントは何を作るべきか、本当に作るべきものは何かを考える点にある。
そもそも何を作るべきかの情報が不足してたり、正しく認識できていない状況下で、どれだけ早く正確にプログラミングしたところで、ギアの外れた自転車と同じでペダルは空転し続けるだけ。
これは至極当たり前の話で、プログラミングというのは、要求分析や要件定義や設計やクライアントとのネゴシエーションといった諸々の土台の上に乗っかっているものであり、そういう意味ではSIerにおける「下流工程より上流工程の方が上である」という考え方自体はあながち間違ってはいない。
生産性ってのはペダルを早く漕ぐことよりも、漕いだら漕いだだけ車輪に全ての力が伝達し前に進んでいく状態にギアをチューニングすることで決まる。
逆にそれができるプログラマーはプログラミング能力が平凡でも、他のプログラマーの10倍の生産性を時に発揮する。
つまり、本当に10倍の生産性を発揮しているプログラマーがいたとしたら、それはプロマネ的な役割を兼務しているからに過ぎない可能性が高いということ。
でもこういう話は、技術志向のプログラマーには絶対に受け入れられない。
論理的にモノを考えるクセが付いているはずのプログラマーも結局は人間なので、自分が見たい現実を見ようとする性には抗えない。
実はマネジメント能力で生産性がほぼ決まる、という見たくない現実はフタをされ、ネット上にはある種の技術信奉だけが広まることになる。
1点補足しておかないといけない点として、上で「プログラミングは上流工程という土台の上に乗っかってくるもの」だと言ったけど、"上流工程のスキル"に関しては逆にプログラミング能力という土台の上に乗っかってくるという点。
ちょっとややこしくなってきたので要点を整理すると、
・プロジェクトにおける生産性や成否は、上流工程の良し悪しでほぼ決まる
・上流工程で失敗すればどれだけ高度なプログラミングスキルを駆使してもリカバリーできない
・ただし上流工程を正しく導くためにはプログラミング能力が必須である
SIerの最大の間違いは、下流工程と上流工程は分業可能であり、それぞれに必要な能力は異なっているという前提で、プロジェクト体制を組んでしまう点にある。
技術的な判断と、要件定義のような上流工程における判断というのは相互に関係していてるものなのに、それを無理やり断ち切ってしまえば、片翼の外れた飛行機のようにコントロール不能に陥って空中分解するのは当然なのに、その当たり前の認識が欠落している。
結局何が言いたかったかというと、
「プログラミング能力よりも上流工程の方が圧倒的に生産性に差を生む。しかし、上流工程のスキルはプログラミングスキルによって支えられており、プログラミングと上流工程を相互に行き交うことで、プロジェクトを正しく導いていくための意思決定ができる。」
というのが結論になります。