fragment

断片と断片の連想ゲーム

Martian(オデッセイ)とYagni原則について(後編)

 

 

f:id:A7A12A11A:20160525014437p:plain

 

”いつかすべてが思うままにいかなくなり、君は思うだろう。
「ああ、これでおしまいだ」と。それに対して出来ることは、足を止めるか、歩み続けるかのどちらかだ。
もし進むなら、ただやるんだ。計算し、目の前の問題を解決し、次の問題を解決し、そしてまた次へ。解決し続けたなら、いずれ辿り着く。

-- マーク・ワトニー、火星人”

 

 

 

とはいえ、問題の渦中にいるときに「普段から準備をしていれば」と思うことも少なくないもので。かといって、ろくに知らないままなんとなく準備をしてみたところで、準備をしたことを活かそうとしてむしろ効率が悪くなったり足を引っ張ったりして。

Martian では、誰も「もしものために」準備をしていることもなく、ひたすらに目の前にあることを今解いていく。もちろん何日後に何が起きる、その日まで にこの状態にいよう、という目処は立てるが、それは闇雲にではなく、今解決してこれから解決してい続けた先にあるものを見越した発想だ。

みたいなことを考えていると、とあるプログラミング原則を思い出す。プログラミング原則にはKISSやらブルックスの法則、TDDなどなど、他の分野にも活かせるような原則があるが、ここで僕が思い出すのはYAGNI原則というものだ。

ヤグニとはYou ain't gonna need itの略で、「そんなものは必要ないよ」という感じの意味である。要は「機能は実際に必要になるまで作らない」ということ。

YAGNI原則を提唱する人々は、その理由として以下を挙げている。

  • 後で使うだろうという予測の元に作ったものは、実際には10%程度しか使われない。したがって、それに費やした時間の90%は無駄になる。
  • 余計な機能があると、仕事が遅くなり、リソースを浪費する。
  • 予期しない変更に対しては、設計を単純にすることが備えとなる。そして、必要以上の機能を追加すると、設計が複雑になってしまう。
  • 人生の時間は、貴重である。したがって、人間の能力は、ただコードを書くためではなく、現実の問題に集中するために使うべきである。
  • 結局は、その機能は必要ないかもしれない。もしそうなったら、あなたがその機能を実装するのに費やした時間も、他のみんながそれを読むのに費やした時間も、その機能が占めていたスペースも、すべて無駄になってしまうだろう。
  • コードをすばやく実装するために最も良い方法は、あまりコードを書かないことである。そして、バグを減らすために最も良い方法も、あまりコードを書かないことである。

 

 

僕の場合、上手くまとまらない記事が続き、いつのまにかそれを上手く活かそうとしてブログの更新がとまりがちになった。もちろん体調のせいもあるが。

同じように、小説や作曲でもアイディアばかりがいつかのために溜まっていき、活かそうとして手が止まる。そしてさまざまな「いつかのために」が足を引っ張って自分を今に引き止めている、そんな気がしてならない。

「いつかは明日来ないし、明日も明日にこないのに」と、Yagni原則を思い出すたびにそんなことをふと思っていた。そしてなんとなく、「ああまた失敗か」と徐々に暗い気分になっていたように思う。

そしてMartianを見て、冒頭に引用した言葉と最後に出会った。
この記事を書くことにしたのはこの言葉がきっかけだ。
出会ったその時はわからなかったが、何かに気づけそうな気がしたから。

 

”いつかすべてが思うままにいかなくなり、君は思うだろう。
「ああ、これでおしまいだ」と。それに対して出来ることは、足を止めるか、歩み続けるかのどちらかだ。
もし進むなら、ただやるんだ。計算し、目の前の問題を解決し、次の問題を解決し、そしてまた次へ。解決し続けたなら、いずれ辿り着く。

-- マーク・ワトニー、火星人” 


普通、「おしまいだ」と思えるほど追いつめられることはない。
仮にそういう事態になった時、できることは殆どない。
そう言う事態にならないために下準備はあるべきであり、またYagniで批判されている姿勢というのは下準備すべてのことではない。
この原則で批判されている姿勢とは、明確な意図もなく闇雲に何かを先に備えおくことであって、例えば地震などの際に備えて避難バッグを用意しておくことではないはずだ。

しかしプログラミングではビジョンが先にあってもソフトとしての安定性など優先するものが先にあるので、闇雲に下準備をしたりするよりも、先に根幹をシンプルに完成させることが優先される、という話なのだと思う。

咄嗟に批判されていると解釈してしまうのは私の悪い癖である。うむ。
この傾向についても記事を書くのはありかもしれない。

なんにせよ、さっきの小説やら音楽のアイディアに関してもそうだ。「いつか使うだろう」と思考停止しいじり続けることが問題であって、すべきことはむしろ、「私はこう言う曲を作りたい、しかし今は手が止まっている。こういう時にどうしたらいいのか?」と、ビジョンを持った上で現状と向き合うことだ。そして問題を定義するなり、解決策を探すなり、バカでも出来ることを一つづつしていくことだ。

ビジョンがないなら今ある材料を踏まえて据えればいい。決して「そのうちひらめいて出来るようになるだろう」と期待することではない、はずだ。

 まあこういう自己啓発的な事を書いている時点でいつまでもできない人っぽいし、書いたり考えたりするまえにやれよって言われたらそれまでなんだけども。こういう文章を書いているとついったーで最近見かけた「やるやつはふわっとした話しをせず具体的な話しをする」というのが脳裏をよぎって手を止めそうになるよね

そのためには多分、定期的に現状を評価するタイミングが必要なのだと思う。ベンチマークを取るのだ。今日はどんなコンディションで、こういうことをしがちだとか、そういうことを気にしたり、定期的に自分が今何をしているのか捉え直すことだ。そういうのを時間単位ではなくて、なんとなく意識するようにするだけでも、軌道修正の機会は得られやすくなる。
人は常に選ぼうという意思があろうとなかろうと、何かを選んでいまここにいる。ならば必要なのは選択肢に気づくためのきっかけづくりではないだろうか。

現状を認め、一つづつできることをしていくことはそれからだ。
「ここで終わりだ」という現状を認識することで選択する機会が生まれるのなら、ここで終わりだと気づくための機会を作ればいい。

それこそワトニーのように、一つ解いて、二つ解いて、出来ることを増やしていくためには、彼を吹き飛ばした爆発が必要だったのだと思う。それを自分で用意すればよいのだ。

こういう自分で自分を評価して立ち直るための仕掛けを作ることこそ、ビジョンの伴った下準備なのだと思う。

 

書いていて思ったけれど、僕がしたかったことはYagni原則とMartianのあのセリフを消化することだったのかもしれない。同時に、Yagni原則と出会ってから感じていたわだかまりを再認識して、それをどうにかしたかったのかも?結果的に上手く行ったから満足である( *`ω´)フンスッ

 

要はYagni原則が批判しているのは実現性やビジョンに欠けた下準備であって、ワトニーが言いたかったことは問題に出会うまでは威力を発揮しづらい。その中間を埋める行為として、内的なベンチマーク作りが有効なのではないか?ということである。うむ。

思ったよりも長くなってしまったが、これは飽くまで推論なのですこし試行してみたらまた書いてみたいと思う。

であであ!