もしかしたら、日本の会社ってまだ採用時には終身雇用前提なんでしょうか

会社に入ったら親より上司、妻より同僚、子供より部下と付き合うのが大前提なんでしょうか

定年退職した後のことは会社が何とかしてくれるから今考えるのは不純なんでしょうか

だとしたら、今までの私の転職活動はすごい間違いをしでかしていたと思います

いい歳こいたオヤジが目をキラキラさせて「貴方に見も心も捧げます、だから私に仕事をください」とか、絶対やっちゃいけないと思い込んでいました


前の文章を呼んでいただければお分かりと思いますが、私は常識を知りません

だれか教えてください

かなり真剣です


ところで、前述のようなある種の”典型的な日本の会社”は、ソフトウェア開発に向いていないと思っています

たとえ現時点でそれなりの利益をあげているとしても、です


ソフトウェア開発というのは知的な作業です

良い仕事をするのに良い道具がいるように、良いソフトウェアを開発するには頭のいいエンジニアが必要です

ソフトウェアというと、人嫌いの天才的なプログラマーというのがいて、数百人分の仕事を一人でこなしてしまうようなイメージがある人もあると思います

ハッカーという人種にはまだそういう人に価値があるかもしれません

汎用機器上で限定的に動く、品質もメンテナンス性も度外視した特殊用途のワンショットソフトウェアなら天才的な人にも用途はあるとおもいます

しかし、社会人が扱う大多数のプログラムはカスタマイズ、メンテナンスとバージョンアップです

プログラムは(まっとうに開発されたものなら)何世代に渡って不特定多数のエンジニアによって継続的に開発され続けます

これら大多数のエンジニアに必要なのは第一にコミュニケーション能力です

社会人プログラマー世界の天才エンジニアとは「誰にでもわかる単純明快なプログラムを書けて、それを周囲に発信できる人」なのです


現代のソフトウェア開発にとって属人的な組織はたくさんのリスクを抱えています

すぐにわかることですが、属人的な組織は脆いです

人にノウハウが集まっていたら、その人が居なくなった時に立ち行かなくなるのは当然ですよね?

エンジニアはいつも同じモチベーションがあるとは限りません。病気にもなりますし、辞めることだってあります

終身雇用を前提に仕事を割り振るのは噴飯モノ(だと私はおもっているんですが…)です

組織は常にノウハウを組織に蓄積しておかなければなりません

そのためには一定のパワーを情報の公開に使わなければならないのも、当然ですよね?


常に作業をシェアしておく、別の言い方をすると常にバックアップを作っておくのには別の効能もあります

バグというのは、単一のモジュールで起こるものではありません

単一のモジュールで発生する明らかなバグなんて議論に値しない単純なものです

難しいバグは複数のモジュールの関係で起こります

ある問題が、特定の1モジュールの修正で収まったようにみえたとして、それをそのモジュールのバグとみなせるとも限りません

あるシチュエーションでバグがないと報告されているプログラムがその寿命を全うするまでバグが0であるとはいえません

哲学的に言えばバグが無いプログラムなんてありません

問題を解決するためには、複数のモジュール間の調査、調整をしなければならないのです

天才的なプログラマーが一人で出来ることではありません

よしんば出来たとして、それをチームが共有できなければその場しのぎにしかなりません


一人で書くプログラムは必ず独りよがりになります

他人に見せることでプログラムは整理されます

他人に見せる以外に方法はない、といっても過言ではありません


では、凡庸なエンジニアが数いればいいのかというと、そういうわけでもありません

ソフトウェアはマテリアルが不要なので、優秀なプログラマに食事を与えていれば無限に価値が産み出せるという誤解をもたれることはまだあるようですが、間違っています

アウトプットをするのにインプットが必要です

ソフトウェアの世界だって質量保存の法則に基づいています

ソフトウェアだから、人さえ居れば無からなんでも産み出せると思われている組織は破綻します

ソフトウェアエンジニアに必要なエネルギーはプライドとモチベーションです

これが与えられていれば、知識やスキルはエンジニアが勝手に手に入れます

使えるソフトウェアエンジニアは自腹で資料を買って、プライベートを削って学習します

残業代を払って会社で勉強させるのは損だし効率が悪いのです


ソフトウェアの生産効率はスキルとモチベーションの積算です

1時間机に座っていれば1時間分の仕事ができるようなものではありません

1時間残業させたら1時間分多くの作業ができるということも、まずありません

前述の通り、属人的な組織は問題ですが、かといって使い捨て前提の組織はナンセンスです

年俸制にしたうえで会社のデスクに縛り付けるのは論外です

エネルギーが与えられない職場からは、プログラマーは逃げます

もしくは潰されます


さて、日本型の組織は責任を分散させるのがとても得意です

これは属人的な組織を構成するのに大変都合よく機能します

終身雇用制の幻影がこれを加速させます

責任を分散しようとするので一見情報の共有は進むかのようにも思えますが、大抵は”和を重んじて””空気を読む”文化がそれを阻害します

全員が同じ認識を”もっているだろう”と”信じる”文化が、個々のロジカルなモジュールを致命的に分断します

常識、という言葉について日本人は致命的な誤解をしていると思っています

日本人にとっての”常識”は「全員が産まれたときから共有しているもの」で、外国人にとっては「個人個人が持っているもの」

つまり日本人にとって誰かとであったときそこにあるのが常識、外国人にとってはそこにないものが常識…楽しいくらい真逆の概念ですねw


そしてなにより、IT化が進んで、資本が大していらないソフトウェアはロケーションを選びませんから、コストの高い日本でやる必要性がまったくありません

今のところ、日本人の”とりあえずなんとか仕上げる”文化によって質が高いように見せかけていますが、それは大量の日本人的な価値観で公私を度外視して見せ掛けのコストを圧縮した結果であり、再生産性のない代物です


以上のように(だいぶとっちらかりましたが)日本はソフトウェア開発には不利です

今後、ソフトウェア業界で日本が競争できるのは、品質意識くらいだとおもっています

メーカーも市場もやせ細っていく一方ですしね