ポエム・より良い未来を選んで滅亡する話
みなさんはナッシュ均衡とい言葉をご存じだろうか?
僕もついこないだ知って大変関心して以来
馬鹿の一つ覚えのようになってしまっている(実際はそうではないが
僕が今頭の中に残っている、ナッシュ均衡というのを要約すると
ゲーム理論上で考えられる、プレーヤー同士が協力関係にない時 プレーヤー同士が互いにベストの選択をしようとした結果 プレーヤーが選べる選択肢が狭まる
そんな話だったと記憶している。
うろ覚えで悪いが、今回重要なのはゲーム理論の話ではない。(よってここで僕の記憶力に関する問題がテーブルに並ぶことはない
まぁ題名と、ナッシュ均衡という言葉を知っているだいたいの人は
ここでブラウザバックをするのだろう。
まぁそれはそれでよいかな。
では、本題に入る前にソフトウェア開発界隈にまつわる話をしよう。
基本的に僕はAndroidかつJavaでお仕事をさせていただいているので、多分そういう話も出てくるかもしれないし出てこないかもしれない。
(全体構成を考えながらこの記事を書いているわけではないし、それはどうでもよい事だったりするかな?)
ここで言いたい事はこれだ
僕がより良いコードを書こうとするとき、チームの皆には、それは破壊的なコードの様に見える。
僕が素晴らしすぎて、周りが付いてこれないという事ではない。
考えるコードの書き方のチャンネルが違うので、僕以外のチームの人にとっては異世界のコードを入れるようになってしまう。
基本的にチームでの開発は、ソフトウェアに限らずコラボレーションだ、技術や知識だけでなく性格や人間性までもがコラボレーションの要素に含まれるだろう。
人によってコードの書き方は様々で、人によって同じ処理を書いても全くほとんどかわってしまうし、それを受け入れられる人間もいれば拒絶してしまう人間もいる。
時には書き方の宗教戦争までに発展するので厄介なのだが…。
ここでナッシュ均衡的に話を展開していくと
開発でのコラボレーションは、一見協力関係にあるプレーヤー同士が同じテーブルを囲んでいるようにみえているのだが
実際は互いのプライドが傷つかないように、めぐりめぐって自分に被害が及ばないように、先んじて対策をおこなうような「非協力型」のゲームと言える。
そうすると、僕は破壊的要素が与えるインパクトを考え、妥協点をさぐる。
結果的に破壊的なコードはうまれず、チームのコードに似通ったコードが出来上がる。
そして僕のコードは凡庸なコードになっていく。
これは僕がやっている現在の作業だ。
これにおいて僕が打開していく策として、エリックエバンスのドメイン駆動設計(以下DDD)がもたらすコードは最高だった。
当時の僕が作りたいコードの数手先を行ったものだったという表現だと、お前は何様だというような人がいるかもしれないので
ここでは控えめに、DDDのコードはOOPで書くときにはベターになりえる考え方だよね!みたいな感じの表現にしておく。
そういうコードだったので、プロダクトのレガシーコードの問題を抱えていたチームはDDDという旗印を元に
よりよいコードへの道をたどるようになった(かもしれない。コードを真似ているだけかも?僕は彼らではないのでわからない)
つまりボード上に並べ得る最高の手札がめぐってきたわけ。
まよわずその手札を使うよね。
かくしてそのテーブル上にある問題はナッシュ均衡的な解決としてDDDが採択されるようになった。(ひゃっほぃ!)
長い前置きだったけれど、ここで肝心なのは
人間は協力関係にあっても、ミクロ単位では非協力的なプレーヤー同士であって
これはその身近なエピソードだったって話だよ?
さて、本題なのだけれど。
今僕たち、この記事を読むだろう人の大半は、1億人くらいの人が狭い島のなかで肩を寄せ合ってあつまった日本ってところで生きているわけなんだけど
そこで最近話題になっていることって
かな?まぁ今回はそういう話。
要はより良い生活をしたいと個人が願う故に起きる問題ってあるじゃない?ってこと。
例で言うと
政治家へ投票する人の多くが団塊世代→政治家が当選するには団塊世代向けのアピールが欠かせない→当然次期当選も考えるので政策内容も団塊世代向けに片寄る
みたいな話。
結果的に
高度経済成長期に戸建てよりマンションんが乱立(立てたもの勝ちみたいな感じになっていて現在も継続)→団塊世代の人が子供と一緒に暮らさなくなった→生活の中心が関わる人たち中心になる
→世代間の結びつきが弱くなる→自分の生活をまもることがベターの選択肢の人間が増える→結果として数で有利な世代が恩恵を受けやすくなる
といった感じなのかも…?
つまり、皆がベターだとおもって生きてきたけど、その積分は最悪だった。
違う言葉でいうと、我々は我々が純粋に豊かになろうと、ベターの選択肢を積み重ねていくと、なぜかたどりついたそこは崖っぷちだった。
さすが火サスが大好きお茶の間の皆さまってかんじだよね?
国家は国民の生活を守り、継続性を維持しつづけることなのだけれど
国家の意義とは反対になっていく民主主義ってもはや用済みの概念なんじゃね??
時代はチェ・ゲバラ(意味不明
んー人間は本当に知的生命体なのでしょうか?ゲーム理論やナッシュ均衡を思いついたのは人間で
そうではない単なる考える葦である僕たちは、きっと知的ではない下等生物。
渋谷の交差点で交尾しかかんがえてなかったりとか残念なやつらと同じ。
もちろん政治家の人達もそれに漏れず。頑張ってきたのに、ほんっとうーに残念でした!
って話はここで終わりじゃなくて。
じゃぁどうすんだって話。
さてさて
僕たちは本当に考える葦でいいのかって話がいいか
んーそれとも民主主義オワコン!みたいな話がいいか
それもいいんだけど、そう言うと違う意味で喜ぶ人たちが多そうなので僕としてはソフトウェアエンジニアとしての話をここで展開するわけです。
こと日本に於いては、ソフトウェアは知的生産のようで、実際はゴリゴリマッチョ生産のものが蔓延中している。
つまり、とても複雑なコードで、手続き的で、一つの変更が及ぼす影響が大きくなりやすいコードが大半を占めている。
AndroidだとKotlinという言語が使えるようになったのは久しい話だけれど、結局それを書く人間のソフトウェアがアップデートされていないと
変態的な書き方を拡張で書ける変なBetterJavaというだけで、記述が少なくなる言語のような扱いで終わると思っている(のだけれど違うのなら教えてください)。
つまりゴリゴリマッチョがゴリマッチョに格下げされるケースが多少増えるけだけ。
Kotlinという言語がJavaプログラマの性悪説から作られた言語だとするなら、まぁそれは成功なのだと思うけれどどうなのだろう?
関数リテラルを利用できるようにした意味が単にScala meets Functionalに近しい話であるとするなら
結局はゴリマッチョ問題はコミュニティの健全性に由来する問題でしかないと考える。というか自明だよね?
つまり、各プログラミング言語の良いところってのは必ずあって(そうは言ってないように読めるかもしれないし、実際そうだが)
確かに有用な言語しか生き残らないのだけれど、結局のところ僕たちソフトウェアエンジニアのOSがアップデートされるほうがよっぽどマシになるって話。
それで、どうアップデートしていくかなんだけど、それは新しい言語sがどういう方向にむかっていて、
その共通性や、どういう問題にどのようにアプローチしているかを知る事で、見えてくるものがあると考えている。
結局、結論なんだけど。
この全体として悪い選択しをするしかないナッシュ均衡状態を解決するには
プレーヤーの頭脳が知的生物のそれであるように、そうなるようになによりもまずそれを優先していくことが大事であることと
そのためのわかりやすい取り組み、つまりDDDみたいなわかりやすい(DDDがわかりやすいわけではない)アイコンを提示する事が重要だってこと。
まだこれは、思考実験の段階だということは念押ししておく。