teruyastarはかく語りき

TVゲームを例にチーム理論やその人間関係考える記事がメインのようだ。あと雑記。

アメリカ人組織はプログラミングコードを守ってるから強い説

anond.hatelabo.jp
この増田に対する俺なりの見解、、、というかまとめない、いつもの落書き。

日本の政治、企業、学校てのはC++で役職から縦に多重継承を繰り返して、人間ひとりのクラスが1万行ぐらいある万能で最適化された神クラスになってる。

んで、クラスの中の状態はグローバル変数で共有してるのでマネージャークラスをはじめ、依存してる全クラスがOKを出さないとグリーンにならずそもそも動けない。しかも、マネージャークラスがなぜか複数あってお互い勝手にグローバル変数を書き換える。だからあっちこっちで言うことや指示が違う。

さらに、マネージャークラス達に現場の処理が書かれてて、プレイングマネージャー化してる。Tell, Don't Ask!! お前はマネージャーだ!求めるな!命じよ!


メリケン人は状態を持たない関数だ。

すごいHaskellたのしく学ぼう!

すごいHaskellたのしく学ぼう!

  • 作者:Miran Lipovača
  • 発売日: 2012/05/23
  • メディア: 単行本(ソフトカバー)
 

 
「関数の中身なんか俺が知る必要はない。Tell, Don't Ask。欲しいものはコレだ。やり方は任せた。結果だけ返せ。」

「OKわかった。俺はそれしかしない変わり必ず一定の結果を返そう。もちろんそれ以外は俺の仕事ではない。勝手に中の変数書き換えるような処理の割り込みは絶対許さない。当然5時に帰る。掃除?? ふざけんな!俺をなんだと思ってるんだ!掃除の関数にやらせろ!!」

これに尽きる。

自主性を重んじ、外部変数に影響されず、疎結合で結果のみを評価される。


細かく見ていこう。

人材(クラス)が特定の仕事に特化してて、きちんと結果を出せば処理の中身は問わない。だから処理効率が悪いとクビにするし人材の変えも効く。関数の効率が悪い底辺の労働者には厳しい世界。

神クラスを継承する日本人からすると底辺クラスの中には正規表現がないとか、四則演算でバグるとか文字列が表示できないとか、小学生以下の単機能しかもたない関数もあってビビる。そんな底辺クラスに仕事があることもビビる。

しかし、ちゃんと効率よく、自己を書き換え機能を最適化しつづけるアメリカ人関数は外部に依存しない強さを持つ。外部に依存しない出力結果はどの会社の関数へ置き換えても機能するため賃金交渉が高く望める。できる奴にはたくさんの給料が払える。

これはトップの社長にすら適用され、出力結果がともなわなければ容赦なく株主に社長を交代。出力結果を出せば日本の社長より桁違いの報酬が手に入る。


日本ではグローバル変数でみんなで状態を共有するため、クラスや関数の中身が相互依存しまくってる。つまり合議制で全体で物事を決めないとバグるため、個人の関数の中身、仕事のやり方にめちゃくちゃ文句を言ってくる。美意識として掛け算の順番にすらこだわる。

新しく入ってくる人はクラスの中身に何も入ってないまっさらな方が良い。新卒信仰。その方が会社特有のスーパークラス(文化)を継承しやすいからだ。

これが他社でクラス内がゴリゴリに最適化された関数は困る。どんなに優秀でもそんな相互依存クラスをうちでは使えない。中身ぐちゃぐちゃで読めないし、、//このコメント消したらなぜか動かなくなる とか書いてあるし。とにかく人材の変えが効きにくく、転職がしづらい。

関数の置き換えが難しいとなると賃金交渉は難しく、できる関数にも給料を多く払うインセンティブは働かない。より複雑なプレイングマネージャークラスを多重継承して全体をまとめていくしか昇給の道はない。つまり社会主義の年功序列システムでなければ、ほとんどの人は現場の仕事ができるだけだと給料が上がらないようになってる。


営業を3年、現場を3年、総務を3年、係長や課長、部長を多重継承し、人はわけのわからん神クラスになっていく。相互依存で状態を共有してるクラスに、もはや自分の意思はない。

自己決定権がなく、入力から出力まで様々な割り込みと状態変化に振り回された神クラスはぶっ壊れやすい。環境で全て決定するため、自分がなく人の目ばかり気にして、鬱になるクラスも多い。さあ、自分探しの終わりなき旅に出よう。

 

www.youtube.com

ただそこで最適化された部分だけは優秀だ。とても優秀だ。例えそれが早すぎた最適化だとしても。ボトルネックじゃないそこだけ処理早くても、会社としてなんの出力アップにならなくても、数千行で書かれた神クラスは万能で優秀なんだ。


「社に持ち帰って検討します」


当然だ。みんなでグローバル変数を共有してるんだから関数単体で出力結果がどうなるかなんて決まらない。任されて独断で決定権があるわけない。他のあちこちのクラスにおうかがいをたて、それで全部バグらず動くか時間をかけてテストし、なにか一つ動くたびにあちこち調整を繰り返し、また繰り返して、時間で状態変わって、もっかい調整して、やっとコードが1行進む。アメリカと比べたらトライ・アンド・エラーの桁が違う。


役所でも同じ。前例のない未知の領域に関しては関連する全省庁のOKを共有しないといけない。勝手にサイトのキャッシュを集めてGoogleという検索エンジン作るような許可は出せない。Youtubeが違法アップロードでシェアを集めるなんてもっての他。俺たちはAll for One。One for ALL。全員つながった神クラスなんだ。誰にも迷惑かけないよう、みんなで安全に行こう。こうすれば凝集度が低く、どのクラスも責任を持たないで済む。それは従業員を守る事であり、社長や役員のクビを守る事であり、リスク回避につながる。


給料もそこまで差をつけずに払う。だってみんなでチームとして成果を出してるのだから。えっ、エースのあいつのおかげだって?? いやいや、みんなの合議で、俺らの承認で、いろんな安全を時間かけて確認したから動けたんだろ? 昔からの秘伝のクラスを継承したから仕事できるんだろ?  会社の名前があるから仕事取れるんだろ?


だったら飛び抜けたエースのおかげでもなく、優れたリーダーのおかげでもなく、チームとしてみんなが凄いんだよな?  つまり日本には天才エースも、リーダーもいらないんだ。誰が社長やっても、誰が首相やっても同じことさ。結局合議制なんだから。天才エースやリーダーシップという時に大失敗を呼び込む危険な芽は潰さないといけない。大成功はしないが、大失敗もしない。みんなで決める。リーダーは作らない。リーダーやエースがいなくてスケールしない、、、ということは大きな投資ができないが、それでいいんだよ。失敗しないことそのものが大失敗でない限りは。


できる奴はもっとスケールするところで働きたい?
C`mon Baby America!

www.youtube.com


みんなでグローバル変数を共有するような神クラスは確かにスケールしない。しかし中小企業レベルまでは、みんな勝手なオレオレライブラリで肥大化できるんだ。中小企業は人が少ないので1人がいろんな事をやらないといけず自然と神クラスにならざるを得ない。そして中小企業同士は単機能の疎結合で済む。だから日本は中小企業大国だ。これは日本の大きな利点でもある。日本が高性能単機能な部品を作ってアメリカがまとめるのだ。

日本に大企業もそれなりにあるが中身を見てみろ。お上からでかい仕事をもらってるだけの中小企業だ。それゆえスケールとプログラムが大事なIT関連でボロボロなのが残念。役所も企業も密結合なクラス設計なので、そこからまともなプログラム設計書が出てくるわけがない。


各省庁や企業、ユーザー全員の勝手な都合を全部聞いて忖度して、矛盾する複雑な仕様書を作る。しかも同じパッケージではなく、各省庁、各自治体、各企業、各部署まで全部独自の管理ソフトを作っている。Don't repeat yourself。AppleやGoogleを見ろ。機能が足りなくても天才がシンプルで一貫した矛盾のない思想をもってる。役所や企業やユーザーごとに機能を作るんじゃなくて、高性能特化した機能に役所や企業やユーザー側が合わせるんだよ。

有力関係者全員の都合を聞いて「恋愛スプラッタギャグホラー歴史タイムスリップ入れ替わり超能力異世界なろう系ドッキリスパイ作戦3部作」を真面目に作ろうとしてるのがおかしい。いったいどこ向いてるんだ? 全部の都合を聞くんじゃない。世界を正しくプログラムしたいなら、できる監督が絵コンテきってユーザーが合わせろ。依存性の高い民主主義は衆愚政治に至る幻想だ。自主独立の民主主義を打ち立てよ。


小さく完璧な部品を作って対価を得る。万能神クラスゆえか、数人の密結合でチームを回すのはとても得意だ。数人のアシスタントで作る漫画の完成度は素晴らしい。TVゲームを5人や10人で作ってた時代も日本の天下だった。

しかし規模数十人から百人を超えるアニメや映画だったり、百人を超える規模のゲーム開発となるとアメリカ人にはかなわない。個人へ依存しまくりの神クラスはスケールするのがとても苦手だからだ。


過去の日本人はスケールの大きな作品をどう作り上げてきたか?

それは人を人とも思わない気が狂った監督を神に祭り上げ、従業員たちを使徒とし、組織を宗教化することにある。神監督のお言葉なら仕方がない。ありがたいことにそこに神は1人しかいないので使徒たちは迷わず大きな祭りを作りあげる。他の大企業のように多神教達が違う言葉でケンカしないですむ。多神教の日本に作られた唯一神。ひとりの神がすべての状態を適切に分離して管理してくれる。宗教化こそ無意識にある神道をベースにした、真にスケールするマネージャークラスなのだ。

ただどんな神も会社が傾かせるほど大コケさせることはある。私達の神はどこまでもスーパープレイングマネージャーというリスクであり、それでいい。会社なんて何度も潰れて、何度も生まれてくるという前提であれば何度も大きなチャレンジができる。従業員が路頭に迷う事なんて気にするな。外部変数に依存しない良き関数であればなんの心配もない。チャレンジのためなら会社は潰していいんだよ。



日本は農耕民族が、村長や城主などと運命共同体として生活していく村社会の延長として空気読みやら合議制が定着したのだろうか? 論理的思考が弱い気がするのは東洋宗教や求道的文化のせいか、あるいは言語に問題があるのか、、、アメリカはヨーロッパから逃げてきた人らが独立戦争をおこし、インディアンと戦い、自由と自主独立を掲げて開拓していった成り立ちゆえの個人の自主性を重んじる傾向なのか? まあここの深堀りは置いておこう。



ここまで「個人の考え方」と「組織設計」が共にグローバル変数依存した神クラスという話だったが、組織設計の話だけにすれば日本にはトヨタという大きな成功例がある。

日本の中ではトヨタが素晴らしいほどプログラミングコードの原則を守ってスケールしている。

豊田自動織機に始まる「自働化」。JIT ジャンストインタイム。
大野耐一副社長によるサプライチェーン。標準化。カンバン方式。その他トヨタのルールはプログラミングコードの原則に忠実だ。

1970年代にウォーターフォールな大量生産主義ではなく、ユーザーの即時注文から逆算してラインも材料も配置していく少量多品種生産に発想を切り替えていったのがすばらしい。当時社内の大反対にあいながら数十年かけて自社と関連組織全てのサプライチェーンを現在進行系で短縮し続けている。

大野耐一の現場経営

大野耐一の現場経営

 

大野耐一はプログラマではなく、その哲学は雑誌「主婦の友」の効率的なデータ設計(台所と家事の並列処理かつ、必要なときに必要なものを必要なだけに限定することで、狭い家と台所(少ないメモリを最大限活用するジャンストインタイムのような設計)からヒントを得ている。


この哲学は日本だと取引先である車関連メーカーや松下電器などに少しづつ伝わっていき、アメリカには1980年代にビジネス・コンサルティング、エリヤフ・ゴールドラット氏から「ザ・ゴール」というとあるつぶれかけた企業小説の形で出版された。 

ザ・ゴール ― 企業の究極の目的とは何か

ザ・ゴール ― 企業の究極の目的とは何か

 

ただトヨタやザ・ゴールがやってることは、取引先込みでオブジェクト指向設計をデータ指向設計へ根本的に仕事の流れを置き換えるレベルの話なため、いくら参考にしてもすでに従来の仕組みで動いてるものをまるごと作り直すのは困難を極める。

各企業は生産ラインとかクラスや部署単位ではっきり分離できるところのみで導入しながらも、そこから先は(役員、部署、人事、とくに現場、取引先)の従来型で書かれたコードを否定することになるため、ボトルネックが超えれず部分最適化にとどまるという圧力に阻まれる。時代に合わせた柔軟性ある最大限のスループットを出すためとはいえ、そうやすやすと置き換えれるコード設計ではない。トヨタでも置き換えるのに数十年がかりだったのだ。





ここで言うデータ指向設計とは何か。

思うに依存関係を逆転させればいいのだ。
現状の日本のプログラミング設計では

(顧客)市民>= 政治 >= 役所 >= 大企業 >= 下請け>= 社長 >= 部長 >= 現場 >= サービス出力

という順番で依存関係が繋がれる。
これでは依存関係の都合ばかり優先され、適切なサービスやデータが出力できない。
しかも利権でハックし放題である。


(顧客が本当に望むService) >= 現場関数>= 頭のいい変換クラス>= 顧客

(Service)>=役所 >=政治

(Service) >=部長 >= 下請け社長 >= 大企業

と望むデータやサービス、それを作る現場を前提に周りがサポートして合わせていく。

もうちょっと噛み砕くと
1番偉いのがお金払う顧客、2番めが社長、現場は奴隷という依存関係を
1番偉いのが現場スタッフ。2番めが社長。3番めがお金払わせてもらう顧客とする。

つまりミスが絶対許されない軍隊式な依存関係から、「アーティスト」と「それを追っかけるファン」という形の依存関係に意識を置き換える。ファンはいくらお金払ってるからと言っても、自分たちで本当に欲しい曲を設計できないからね。スティーブ・ジョブズとApple信者もそういう関係だ。お金を払って上に立つ人が偉いわけではないという依存関係にする。民主主義の主人公は現場(より正確には現場が吐き出すデータ。サービス。)である。

データやサービスに現場が合わせて、次に現場に部長が合わせて、部長に社長や政治や顧客を合わせていく。

アメリカは多少なりとも現場が主権を持っている。プログラマーよりマネージャーが偉いという力関係でもない。それぞれの役割があるだけだ。


そのためにはまず「お金を払ってるやつが一番偉い」という幻想をぶち殺す。


f:id:teruyastar:20200622110554j:plain

頭からこの幻想がなくなれば「社長と従業員は契約で結ばれた対等関係」「お客と店員も対等関係」という「事実」に気づくはずだ。お金を払う客や社長にはペコペコしなければいけないというのは支配者が仕掛けた幻想。

儒教の年長者を尊敬する心、教育の先生と生徒、部活の先輩後輩、職人の師匠と弟子、会社の主従関係、親子ですらその実「互いを」尊敬すべき対等の依存関係である。

つまり、新人、生徒、後輩、弟子、子供は、どんなに無知無能でも尊敬しえる依存関係となりえる。ゆえにこの関係を築けない人とは会社だろうが、お客だろうが、親子だろうが、Twitterだろうが(将来変わりえる尊敬の念は残したまま)縁を切ろう。そうすれば自分の器に合わせて縁は太く広くなっていく。


お金の依存関係に屈しない現場技術力や主人公たるプライド、
フリーランスになって顧客が断るぐらい高い賃金を提示したり、
安月給サラリーマンはさっさと転職したり、独立したり、
そうやって現場の人達からインフレを働きかけていく。
インフレが強くなるほど現場で稼ぎ続ける人が強く、貯めるお金の力は弱くなる。

お金の価値を一番下にするため、究極的にはお金のいらない国にしていくことが必要かもしれない。