bussorenre Laboratory

hoge piyo foo bar

天才ではない自分が「けしからん」ことを面白可笑しくやるにはどうしたら良いか?

こんばんわ。 @bussorenre です。

先日、情熱大陸 #1140「サイバー技術開発集団 統括・登大遊」 が放送されました。 tver.jp

隠れた天才が、ついに多くの人々に知れ渡ることになってしまったわけですが、この人は本当にすごい。頭がおかしい(※天才過ぎて常人には理解できないの意で使用しています)。高校生のときに既に、64のGoldeneye が好きすぎて似たようなゲームを自作したり、そのプログラミングノウハウを本にして出版したり、どういう用途にするつもりだったのかさっぱり意味がわからないけど、高校で放送された校内放送を全部録音してアーカイブ・参照できるようにしたり。

DirectX9.0 3Dアクションゲーム・プログラミング―DirectXを使った3Dアクション・ゲーム作成のノウハウ (I・O BOOKS) | 登 大遊 |本 | 通販 | Amazon

で、この人はさぞ物事を論理的に考えているのかと言うとそうでもなく、本人も以前にブログで書いているように、 インスピレーションや面白そうと思ったことを突き詰める事を優先しており、補助的に論理的思考を使っているように見える。

softether.hatenadiary.org

まぁ、色々書いたが、↑の記事を読むと、「結局こういう人の事を一言で要約する天才としか言えないよね」となるわけで。実際に登さんの天才性は、僕が今まで出会ってきた人の中で、頭50個くらい飛び抜けていると思う。

優秀なプログラマーとそうでないプログラマーの生産性は100倍近くも差があるともいうが(実際登さんは1万倍くらいあると思うが笑)、かといって登さんのような天才が1人いればすべての課題が解決するかというわけでもなく、そもそも、登さんは登さんしか居ないわけで、それでは組織やイノベーションがスケールしない。

ではどうすればよいか?と考えた時、2つのアプローチが思いつく。「天才を増やす」ことと、「天才をエミュレートする」ことである。

天才を増やす

天才を増やす方法として、古くから議論されているのが、浅く広くプログラマーを増やすというのが知られている。資料などでは、「裾野を広げる」となどいう言葉でよく表現されている。参考: www.ipa.go.jp

一見矛盾しているかのように見えるが、天才が存在する確率がN%だとすると、100人のプログラマの中に存在する天才はN人だが、1万人居たら天才が100N人存在するということになる。(実際はこんなに単純ではないと思うが)

後天的な教育だけではカバーしきれない無類の才能を発揮するからこそ「天才」と称されるのであって、母集団を増やす(裾野を広げる)ことが最も有効な技だと思われる。

このような観点から見た時、昨今「プログラミングスクール」と呼ばれる事業者が増えてきたことは、基本的に歓迎すべきことだと思う。今まで業界人が「好きな人は放っておいても勝手にやるでしょ」みたいな空気でやってきたのが、需給のバランスが完全にぶっ壊れて、「とにかく高速道路を整備しないと色々な事業が人材不足で死ぬ」となって、人材育成の必要性が急々急務になってきた。

もちろん、課題点も多い。転職詐欺みたいな業者も存在するし、企業から見たら「勉強した割にこいつ使えないな」みたいな人材が一定数居ることも事実だと思う。

しかし、「本当に良い高速道路なのか?そもそもこの道はちゃんと目的地にたどり着く高速道路なのか?」と言った議論・改善に挑戦し続ければ、いずれどんどん良くなると思う。既に業界にいる我々が、「プログラミングスクール卒とかww」とバカにするだけの老害になってはいけない。もちろん、スクール以外の手法・高速道路もどんどん整備しなければならない(それは地下道だったり飛行機だったりするかもしれない)

天才をエミュレートする

すごいざっくり言うと、「三人よれば文殊の知恵」作戦。

今日の本題。

仮に登さんの生産性が通常のプログラマの生産性の100倍だとすると、生産性1のプログラマを100人集めれば同等のパワーが出せるのか?と言われると否で、それは既に「人月の神話」等で徹底的に議論されているし、実経験としても、コミュニケーション遅延が発生したり、コンテキスト境界がぐっちゃぐちゃになったりで、実際100人居たとしても20 程度のパワーしか出ない。

そこで考えたのが、生産性が10のプログラマを3人集めて、(多少のオーバーヘッドを加味して)3人の合計生産性を20にする。このチームを5つ作る。そうすると15人で100になる。1台の化け物クロックCPUを作るのではなく、複数のCPUを用意してクラウドコンピューティングするイメージが近い。

f:id:bussorenre:20210210034836j:plain
3人よれば文殊の知恵作戦は成立するか?

さて、このような組織を作るときに必要なのは、統率ではなく、プロトコルである。

従来のSIer あるいは SESと呼ばれる形態の組織構造は、おおかれ少なかれピラミッド型で、最上位層から最下層へ指示を伝達して物事を達成しようとする構造をしている。

f:id:bussorenre:20210210042332j:plain

この構造だと、ボトルネックになるのはマネージャーと呼ばれる指示を出す人で、要はディスパッチャーに負荷が集中してしまい、一見スケール出来るように見えてスケールできてない。

そもそも、「ワーカー」と「ディスパッチャー」という、明らかに役割の違う2種類の人員を用意しなければいけない。これはスケールしにくい。また、今までワーカーとして機能していた人員が、「君優秀だから昇格ね」と言われてディスパッチャーに回ったとしても、全く異なる機能を求められるので、ワーカーとしては優秀だったけどディスパッチャーとしては全然機能しない可能性がある。これでは人材がスケールしない。

目指すべき姿は、プロトコルによってお互いがお互いに情報をやり取りしワークする双方向な体制。全員が同じプロトコルを使えると仮定すると、この組織はわりと柔軟にスケールさせることが出来る。と仮設を立てている。

f:id:bussorenre:20210210042352j:plain

特定の目的を達成するために各々が共通のプロトコルを用いて行動を行うことによって、いわゆる「チームプレーなどという都合のよい言い訳は存在せん。有るとすればスタンドプレーから生じる、チームワークだけだ」という状態に持っていくことが出来る。この「共通のプロトコル」と呼んでいるやつは、具体的には巷では「スクラム」と呼ばれていたり、「アジャイル」と呼ばれている物だったりするかもしれないが、これは目的に沿っていれば正直何でもいいと思う。

しかし、言うは安し、寿司は旨しで、これを実現するには非常に大きな課題がある。それは、「何を達成するために我々は居るのか?」という目的の共通認識をしっかり持つことが難しいということである。ピラミッド型組織は良くも悪くも最上位のディスパッチャーが、「ジョブを割り振る」という方法で、組織の向きを統制することが出来る。しかし、双方向型の組織はこの機構が無いので、全員が同じ向きを向いて働いていますよね?というチェック機構が別途必要になる。

今の所、僕はこれに対する明確な回答を持っていない。1 on 1 をやる。360度評価をやる。キックオフやビジョンミーティングをやったり、ミッションをより明確に打ち出す、採用時にカルチャーマッチを重視するなど、各論はわかるが、仕組みとしてこのプロトコルに取り入れる手法に確信を持てていない。

ここで、「目的の共通認識をしっかり持つ」ために更にもう一つの仮設を立ててみる。それは、ほんの少しだけ天才の真似事をしてみる、ということ。

具体的には、登さんのように、「極論目的とかどうでもいいんです、(モチベーションのために)面白いからやる」ということなのだが、これを論理的に考えてパクろうと考えている時点で「論理的思考を破棄する」に反する。

自分がやるならどうすればいいかなーと考えてみるのだが、自分ならおそらく、突然好きなキャラのコスプレをして、中二病全開で「俺は世界の変革者だ。こんなことが実現したら、たいそうけしからん!面白くなりそうだ!」と叫んでみる。などをやると思う。この行為に多分論理的な思考はないと思う。多分。(追記:これを書いているのは深夜帯なので、夜が明けたときに自分がこの記事を書いたことを覚えていたら撮影してみようと思う笑)

それで場が白けたら、「調子に乗りましたすみませんでした」と言ってやめれば良い。そもそも「自分が面白い」と思わなかったらやらない。冷静に考えたら「いや無理でしょ」とか「いやだめでしょ」と言ったことを、普段やらないような言動でを全力で提案してみる。最初はくっそ恥ずかしいが、とりあえず言うだけ言ってみる。

2人乗ってきたら、自分含めてちょうど3人よって文殊の知恵作戦が立てれそうなので、やってみる。10人が乗ってきたら多すぎる。スモールスタートには向いていない。やめたほうが良い。あるいは人数を絞って3人で文殊の知恵作戦をすれば良い。

こういうのを繰り返し行っていくと、徐々に組織が同じ方向に向いていくんじゃないかな―と思っている。現状まだ思っているだけなので、実際にこれからやってみる。やっってみた結果は2021年の振り返りあたりで書こうかなと思う。

まとめ

  • 1人の天才にすべてを依存するのは組織やイノベーションがスケールしない
  • 天才を増やすには、裾野を広げるしかない
  • 天才をエミュレートするには、徒党を組んで、かつ個々人が独立してワークするための「プロトコル」と「目的の共通認識」を保つ必要がある。
  • 「目的の共通認識」を保つためには、突拍子も無いことを言ったりやってしてみて、人が乗ってくるか試してみる。程よい人数が乗ってこなければ辞める。

今日はかなり抽象的な方針だったり仮設を書いてみたが、より具体的な各論は試して見る過程で発見したり学ぶことができたら共有していこうと思う。

※ ご意見・知見などは全力でコメントやTwitterでお待ちしております。

追記:「生産性が10のプログラマを3人集めて20にする」。について

ここはもっと議論というか改良の余地があると思っていて、お互いの得手不得手を補い合えるような3人が集まったとすると、実際には10*3 の30よりも大きな50くらいまで生産性は出せるんじゃないかなと思っている。(いわゆる相乗効果を狙うという奴) だが、実際にこの相乗効果を狙うのは難しいパズルを解くのと同じくらい難しく、人材パズルの天才が必要なんじゃないかと思ってあえて考慮しなかった。

しかし、最後に書いた「目的の共通認識」を保つために、面白そうな事を面白おかしく言ったりやったりしてるうちに、自然と「自分は(君たちが持ってない)こういうところが得意だから、それを手伝えるよ」といったフォロワーシップのある人が出現してくる気もしており、人材パズルの天才は実は不要なんじゃないかという可能性もあると思う。

あと、天才と称される登さんでさえ、チームを組んでプロジェクトに挑んでいるのだから、天才で無い僕はなおさら徒党を組む必要があると思う。そのために人間同士のプロトコルについて勉強したいので、最近はEngneering Manager というロールにかなり興味がある。他の組織がどういうEMを育てているかめっちゃ興味がある。

追記2:モチベーションと努力について

結局のところ、↑で書いた手法は内発的動機づけに依存すると思う。誰しもが何らかの内発的動機づけを持っているわけではないと思う。一方、外発的動機付けによってとんでもないモチベーションとパワーを発揮する天才も居ると思っていて(私には真似できないが)、外発的動機づけのほうが優先度が高い人は、そういった天才を真似するにはどうしたらいいかを考えるのもアリなのかもしれない。

あと、モチベーションのベクトルの強さと、努力の量と質はかなり相関があると思っていて、結局「自分の好きなこと」じゃないと、深い努力につながらないのでは?という気もする。本当に些細なことから好きなことを見つけて努力や挑戦につなげる才能(メタ才能のような概念)も必要だが、それについては考えがあるので別途まとめてみようと思う