プログラマーは現代の錬金術師
それはちょっと言い過ぎかもしれませんが、なんでもないもの(この場合は電気かな?)から「価値」を生み出すことが出来る「術」を持っている人、という意味ではあながち間違ってはいないと思うのですがどうでしょう?
世界的プログラマーの中島聡さん、最近のブログ記事で
それぐらいソフトウェア・エンジニアは貴重で、優遇されるべき存在なのです。 それを理解せずに、せっかく採用した理系のエンジニアにコードを書かせず、早々に管理職にしてしまう日本企業が、まっとうな戦いが出来るわけがないのです。
と言い切ってらっしゃいます。
僕も以前はなんとなく「偉くなったら設計だけして、実装(コーディング)は別の人たちにやってもらう」と思ってました。いろんなコンポーネントやAPIなんかをカッコよく設計して、UMLとかで分かりやすく記述して、みんなの前でプレゼンして、おおまかな全体だけサクっと実装して、あとの細かい実装はチームでやってもらうみたいな。
でもMicrosoftで4年以上働いて「コードを書くことがすなわち価値を生む行為」なのだと考えるようになりました。実際、Microsoftの経験豊かなソフトウェアエンジニアも、コードを書いてコミットしてプルリクエストだして、コードベースにContributeしています(私の知る範囲ですが)。それでいて重要な設計にかかわる会議にはかならず招待され、多くの時間をチームやプロジェクト全体をより良い方向に導きます。
アメリカでソフトウェア開発を学んで、プログラミングをしてきた自分は、日本ではプログラマの地位は低く、お給料も低いと初めて聞いたとき本当に驚きました。日本ではなぜそうなのか、なんとなく想像はつきますが実感を伴った理解には至っていませんでしたが、上のブログ記事でよく分かりました。特に日本には、はっきり言ってしまえば「くだらないローカル・ルール」がある場合がある、ってことですね。
もちろん「コード」そのものには何の価値もないので、ただ単にコードを書けるだけじゃダメだけど、「なんらかの問題を解決するコード」を生成できるなら、それは価値の創出といえる。
さらに、コードは「実行力」を持ってる。コンピューターに渡せば、実行してくれる。コードを書ける人が問題解決を理解していれば、それがもっとも効率の良い問題解決プロセスだと言える。アジャイル開発はその事実を認めて、コードを書く人に問題意識を持たせるような仕組みにすることで、最適化しているのかな。
逆に、日本での古いやり方はコードを書ける人には解決どころか問題意識すら持たせないようにしているんじゃないか、と感じる。「仕様」を渡すことで、ただ受け身でコードを書く人にしてしまっている?そうすると実行力を持つコードと解決を考える人の距離が遠くなり、効率が悪くなる。よってプログラマーが「スゲーもの」を生みだせる環境がない。
日本でソフトウェア開発をしたことがないんで想像しか出来ないけど、伝わってくる実情はどうやら、せっかくプログラミングが出来る人をうまく活用できず、他所の国がどんどん世界の問題を解決していくのを横目にみながら、偉い人達が会議を何度も開いて時間を浪費している姿しか見えてこない。