プログラマが他のいかなる職業とも決定的に異なる理由は「誰にでもできるつまらない仕事」の生産性にある


法務でも、人事でも、営業でも、運送でも、接客でも、掃除でも、ほぼあらゆる仕事において、
「誰にでもできるつまらない仕事」をさせたときの生産性は、有能な人間と無能な人間で、劇的な差は出ません。


「誰でもできる簡単な営業」なら、超優秀な営業マンと、凡庸な営業マンで、仕事の成果に劇的な違いはでません。
「誰にでも出来る簡単な接客」なら、超有能な窓口係でも、凡庸な窓口係でも、仕事の能率は大して変わりません。


通常、能力によって仕事の能率に劇的な差が出るのは、「難しい仕事」をさせたときです。
有能な営業マンは、難しい営業交渉を、手際よくまとめ上げる。失敗する頻度も少ない。
平凡な営業マンは、難しい営業交渉だと、ときとして有能な営業マンの5倍もの手間をかけ、しかも、失敗する確率は5倍だったりする。
こうして、有能な営業マンは、平均的な営業マンの10倍以上の生産性をたたき出します。
しかし、あくまで、その生産性の違いが出るのは、難しい営業案件の場合に限られるのです。


そして、これは、法務でも、総務でも、人事でも、財務でも、なんでも同じです。
有能な人間が桁違いの生産性を上げるのは、常に、難しい仕事をするときに限られ、
誰でもできる簡単な仕事で桁違いの生産性をたたき出すことは、希なのです。


そして、有能な人間には難易度の高い仕事が割り振られ、凡庸な人間には簡単な仕事が割り振られます。
そもそも、有能な人間は「誰にでも出来るつまらない仕事」をやりたがらないのにたいして、凡庸な人間は「誰にでも出来るつまらない仕事」を引き受けてくれるので、有能な人間と凡庸な人間は、ちゃんと役割分担し、お互いがお互いを必要とし、棲み分けが出来ています。
こういう構造があるため、見かけ上、有能な人間と凡庸な人間の生産性の違いは見えにくくなっています。この構造によって本質が隠されています。


ところが、プログラマの世界では、この原則が通用しません。
誰にでも出来るつまらない仕事を有能なプログラマにやらせると、数十倍の生産性をたたき出すことが、少しも希ではないからです。
まったく珍しいことではないのです。


これは、非常に退屈なサーバやネットワークの保守運用や、デバッグや、テスト作業や、大きなプロジェクトのヒエラルキーの最底辺にいるプログラマですら、そうなのです。


大きなプロジェクトのピラミッドの最底辺にいる新人プログラマには、「誰にでも出来るプログラム」のコーディングを任せられます。
しかし、この、「誰にでも出来るプログラミング」において、有能な新人プログラマと無能な新人プログラマでは、文字通り桁違いの生産性の違いが出ることがよくあります。


有能な新人プログラマは、最も適切なライブラリやAPIを鋭く見抜き、もっともパフォーマンスと安全性と保守性のバランスのとれたシンプルで美しいプログラミングをします。
そして、それは、凡庸なプログラマが、甘い判断でライブラリやAPIを使い、スケーラビリティーのないコーディングをした場合に比べて、ずっとシンプルで巧みなコーディングで、ソースコードは短い。そのため、バグが入りにくく、テスト仕様書も少なく、テスト工数も少なく、トラブルを引き起こすリスクも少なく、引き継ぎも容易で、後から改変するときのコストも少なく、しかも、別のプロジェクトですら、そのルーチンは使い回しが効くのです。
そして、有能なプログラマは、それをすばらしいスピードで行うのす。


さらに、有能なプログラマは、正規表現をバリバリ使って、能率良くプログラムを編集していく。
プログラム開発環境にマクロをどんどん仕込んでいく。
そうして、頻度の高い繰り返し作業は、片端から自動化していく。


そもそも、プログラム自体を編集するスクリプトプログラムをよく書く。
仕様のエッセンスをコンパクトに記述した簡単な定義ファイルからプログラムを生成するジェネレータを即席で作る。
もしくは、仕様のエッセンスを簡単な即席自作言語で記述したテキストファイルを実行時にパースし実行するようなメタレベルプログラミングをする。
要するに、人間が直接プログラムを書くのではなく、「プログラムを書くプログラム」を書くことで、プログラムにプログラムを書かせるのです。すなわち、自分で作業をするのではなく、自動作業ロボットを作ってそのロボットに作業をやらせるのです。プログラマの世界とは、ロボットの開発・製造・運用コストが桁違いに安い世界であるため、通常の物理法則に規定された世の中の常識を超越してしまうのです。
このため、有能なプログラマが「誰にでも出来るつまらないプログラム」を書くときの生産性が、無能なプログラマにくらべ、桁違いに高くなってしまうのです。


もちろん、これよりも、さらに退屈なサーバの保守運用業務でも、大きな生産性の違いが出ます。


たとえば、定期的にサーバのデータのバックアップを取る退屈な作業があるとします。
無能なエンジニアは、定期的に手動で、コマンドを打ってバックアップを取ります。


しかし、有能なエンジニアは、たとえば、ネットワークにつながっているサーバ同士で、定期的に自動的にバックアップを取り合うようなスクリプトを仕込みます。
そして、そのスクリプトがきちんと動作していることを、一発で確認するためのスクリプトも用意しておきます。
これによって、バックアップ作業自体がなくなり、また、バックアップ作業がきちんと行われているかの確認作業ですら、一瞬で終了するようになります。


ようするに、有能なエンジニアは、そもそも全体的なアーキテクチャフレームワーク自体の構造を作り替え、仕事自体を無くしてしまいます。また、残った仕事も、極限まで自動化してしまいます。


こうして、「誰にでも出来るつまらない仕事」をさせたとき、有能なプログラマと無能なプログラマで、生産性に桁違いの差が出るのです。


しかも、困ったことに、有能なエンジニアが「誰にでも出来るつまらない仕事」を通常の人間の数十倍の生産性で片づけるとき、そのエンジニアは、その仕事に面白みを感じてしまうのです。


これは恐ろしいことです。
なぜなら、ITエンジニアの世界では他の職業に比べ、必要とされる凡庸な人間の数がはるかに少ないことを意味するからです。
山形氏がこの記事で揶揄したようなゴッドランドの経済に近い世界が生まれやすいからです。


しかし、大多数の平凡なプログラマにとって幸いなことに、プログラマ以外で、このことを実感として理解できている人はほとんどいません。
また、理解できていたとしても、実際に、どのプログラマがどれくらい有能で無能なのかは、ろくに判別できません。


そして、仕事の成果からも、それは判別できません。
仕事が理想通りの納期でできたとしても、それが、もともとその仕事が簡単だったから、凡庸なプログラマでも上手くいったのか、それとも、有能なプログラマの超人的な働きがあったからこそ、その仕事が成功したのか、エンジニア以外には、なかなか判別できないからです。
また、同じプロジェクト内で、誰がどれだけ貢献したかも、藪の中です。
有能なプログラマが、凡庸なプログラマでは30倍の時間をかけても出来ないような難解な部分を担当したから、プロジェクトが成功したのだとしても、それは、ゆるやかにしか給料には反映されない仕組みになっています。


このため、実際の生産性の差は、プログラマの賃金には非常にゆるやかにしか反映されません。
また、もし、ホワイトカラーエグゼンプションが導入されても、それは単にサービス残業を合法化するための道具にしか使われないでしょう。なぜなら、成果評価ができないのですから。


しかし、恐ろしいことに、一部の外資ベンチャーは、有能なエンジニアに部下のエンジニアの成果評価を手加減なくやらせることで、この藪を焼き払い、裸の生産性を白日の下に晒そうとしています。


このため、そういう会社では、エンジニアの給料がかなり高くなっていきます。
なぜなら、有能なエンジニアを高給で雇う方が、単位時間あたりの生産性が世間相場的にお買い得なので、そもそも高く有能なエンジニアばかり雇おうとするからです。
一部の弱小ベンチャーは、この差額で利益を出しているところすらあります。


もし、有能なエンジニアが、いっせいにそういう外資ベンチャーに転職しはじめたら、藪の中で比較的幸せな日々を送っていた平凡なプログラマたちの今の生活は、崩壊しかねません。


だから、有能なエンジニアに対して、自分の能力に見合った給料をもらえる外資ベンチャーへの転職を進めるというのは、普通のエンジニアにとっては、自分で自分のクビを絞めるようなものなのです。