
スパゲッティの迂回
物忘れがひどいと悩む人が無理にでもその部分を直そうとしていろいろやってみた結果、確かにその物忘れ癖は軽減されたが、その代わり不機嫌で神経質な態度を取ることがぐっと増えてしまった…
こんなことが人間にはよく起こります。
人間の仕組みは様々で複雑です。
なにかを悩みとして抱え込んでいるようなことというのは特に、その人にとってスパゲッティコードになっている部分だったりします。
スパゲッティコードとはプログラマが使うスラングです。
一箇所書き換えたら、システムの別の場所にも予測できない影響が出てしまうような構造になっちゃってるコードのことです。
***
スパゲッティコードができあがる理由や経緯は様々です。一概にこれが悪いからこうなったとは言えません。
(そんな風に単純に因果関係を指摘できるならそれはそもそもスパゲッティコードになってないですからね。)
スパゲッティコードの中に分け入ってそれ自体を修理するのは至難の業です。本当に難しく、危険だし、根気と運が必要な作業です。
ですからスパゲッティコードの中に問題があるとわかっているときに選択する解決案の代表的なものは迂回です。
スパゲッティになっている領域に入力される情報は当然ながらスパゲッティの状態の外から入ってきます。
そして、スパゲッティから出力される情報はこれまた当然ながらスパゲッティの領域の外に渡されます。
迂回策を採用した場合どうするかというと、スパゲッティへの入力を横取りして別の場所で処理し、その処理結果をスパゲッティを介さずに今まではスパゲッティからの出力を待っていた場所へ送ります。
つまりスパゲッティの領域をバイパスしてしまうわけです。
迂回の難点は、これまでスパゲッティコードが請け負っていた仕事がスパゲッティによって「為されなかった」場合の影響を見落としてしまうリスクがあるというところですが、一般にスパゲッティの中身を無闇に改変して適用し続けるより「マシ」な状態へ向かうことが期待できます。
このへんのトレードオフを見極めるのが難しいという点もスパゲッティコードの厄介さのひとつです。
***
スパゲッティコードを抱えたシステムのアナロジーを使ってお伝えしたことは、人間の悩みにも当てはまる部分があると僕は思います。
悩みの原因や、悩みの中身そのものをどうこうしようとしても不毛なことが多いように感じます。
上に例をあげた迂回による対策とは逆に、抜本的対策、仕組みそものもを変えるような粋の良い案が出てきて、そっとに魅力を感じることもあると思います。
そういうアイデアってとても格好いいんですよね。熱があって。
でも、具体性に欠けるのがほとんどなので、実際のお悩み対策には使えないことが多いですね。
迂回は非常に泥臭い方法だし、根本的にはなにも解決しない、それどころか「悪い」と思っている部分をそのままにしてしまうので、なんか気がひける…など、あんまり良い印象はないのが普通です。
僕自身も迂回を本質的なアプローチだとは思いません。
しかし、迂回という選択肢を携えているかどうかが「運用」(システムで言えば「運用」、人間で言えば「生」つまり生きること)にとってすごく使えるオプションになるのも事実です。これは経験からです。
新しい機能を作ったり、既存の機能を作り直したりするための(主に時間的な)リソースを稼ぎ出してくれるのがこの迂回という手法です。
とりあえず現状存在するケースの9割をカバーする迂回機能を作るコストは、100%をカバーする本物の機能を実装するコストの何分の一、いや、もしかすると、何十分の一のコストで作って動かすことが可能だからです。
ある要件に対して90%と100%。たった10%の違いなんですが、実際に仕事をこなしてみるとそういう差が存在するのがわかります。
もっと言うと、日常的な「普通の」要件を消化するだけだったら、要件全体の30%ぐらいをカバーするだけで事足りることも多いのです。
イレギュラーも含めて全てに対応させるまでじっと我慢し完璧主義を貫き通すことにもある一定の美学はあると思います。
しかし、そもそも全体が複雑で有機的に変化し続けるシステムに対して「完璧」を求めること自体が若干不毛です。
(「不毛」とは、「期待しても無駄」という意味です。)
人間もこのように複雑なシステムの一種だと捉えれば、あんまり美しくはないが身の丈に合った「とりあえずできること」で手を動かしてみるのが結構大事なんじゃないかな、と思います。
その観点で言うと、最初に例をあげた「物忘れがひどい」という悩みについても、ただただそれが悪いとか、いけないとか、ではなくて、その「物忘れがひどい」ということのひとつ外側を見てみる視点が得られないでしょうか?
スパゲッティコードの迂回というアナロジーを思い出してほしいのですが、「物忘れがひどい」という部分がスパゲッティになっている部分だとすると、迂回するには、スパゲッティへの入力とスパゲッティからの出力に注目し、それらの中身を把握する必要がまず最初にあります。
悩みの内部はスパゲッティかもしれません。全くの意味不明で見ているだけで不愉快。往々にしてスパゲッティコード状になっている領域というのはそういうものです。
しかしそれも自分という存在の一部だと見た場合、全く役目も目的もなくそこにあるのかというと、そうでもないのです。
スパゲッティの部分をひとつのモジュールや関数として捉えてあげると、案外、それはそれで自分のキャラクター形成とか生活維持とか習慣とか…そういうものに必要だからそういう在り方でまさにその場所に備わっているということに気付けると思います。
たまたま例に出したのが物忘れでしたが、その他にも、見栄っ張り、頑固、無気力、自信過剰、ケチ…などなど、あげればキリがないですが、そういう自分の嫌で嫌で仕方がない部分というのを誰しも持っているものです。
そういう「嫌で嫌で仕方がない」部分はそれだけ単体で備わっているものである可能性はとっても低いですね。
「自分」という存在全体はなんだか生態系のような複雑なシステムを作っているとことがあって、そんな嫌われ役にもそれなりの意味があるのが普通です。
その意味はそのスパゲッティの中身をあーでもないこーでもないといじくり回したところでほとんどわかりません。
であれば、一歩引いて、全体(とは言わなくても、スパゲッティの前後関係ぐらい)を見渡し、その中でスパゲッティの部分がどんな役割を演じているのか、自分に嘘をつかずに観察してあげることからはじめてみても良いのでは?と思います。
SN