忍者ブログ

Memeplexes

プログラミング、3DCGとその他いろいろについて

問題を分解して考える

科学はしばしば問題をいくつかの小さな問題に分解して一つ一つ対処します。これ自体は私達がほとんど無意識にしていることですが、ここではこのような手法を取ることのメリットについてもうすこし厳密に考えてみましょう。


一度に考えるとうつになる!

実のところ科学に限らず、私達はしばしば問題を個別に考えます。あれもこれもしなくてはいけないとなったらうつになってしまうでしょう。これは次のようなかんたんなニューロンのモデルで理解することが出来ます。

4つのニューロンがあるとします。そのうち3つは特定の問題が解決できない状態をコードするニューロンで、残りの一つはその一般化、つまり「私は(いかなる)問題も解決できない」という状態をコードするニューロンです。4つ目のニューロンは最初の3つから入力を受け取っており、3つのうち2つ以上のニューロンが発火していると、多数決の原理により、4つ目のニューロンが発火します。

このモデルの意味を考えてみましょう。特定の問題を解決できない、というのは私達の日常でありふれたことです。しかしそれらを同時に意識すると(つまりそれらをコードするニューロンを同時に発火させると)、それらが一般化され、「私は問題を解決できない」ニューロンが発火するわけです。問題を解決できないのであれば、無力感で何もする気が起きなくなるでしょう。つまりうつ状態です。

問題を分解する

問題は一つ一つ解決しましょう。一度にすべてを意識するのではなく、一つの問題に集中し、残りは後回しにするのです。そうすれば「私は問題を解決できない」ニューロンは発火しません(多数決により否決)。

問題1は小さな問題なので、すぐに解決できるでしょう。すると「問題1を解決できない」ニューロンは発火をやめます。

では次の問題2に行きましょう。

これもかんたんに解決できるでしょう。

最後の問題です。

これもやはりかんたんに解決できるでしょう。

全ての問題をうつになることなく解決できました!このように、問題をかんたんに解決できる小問題に分解すると、「私は問題を解決できない」のだと落ち込まなくなります。

理由の後回し

このモデルは、科学が「なぜ」を問わないとされる理由も説明できます。小さな問題を一つ一つ確実に解決していく必要があるので、すぐに答えの出ない疑問をえんえんと考えるべきではないのだ、というわけです。

しかしこれは絶対のルールではないかもしれません。小さな問題をあらかた片付け終わったら、残っていた「なぜ」について考えてもよいのではないでしょうか?私が思うに、「科学は「なぜ」とは問わない」というのは間違いです。正確に言うと「科学はすぐに答えが出せる疑問以外は後回しにする。「なぜ」という疑問にはある程度状況がはっきりしてから出ないと答を出せない」というだけでしょう。実際、ニュートンはなぜ重力があるのかという疑問には答えませんでしたが、アインシュタインは重力は時空の歪みだと言ったわけです。

しばしば科学は「なぜ(Why)」ではなく「どのように(How)」を考えるのだと言われることもありますが、そんなものは薄っぺらい言葉遊びに過ぎません!ニュートンは「どのように」重力が作られるのかについても答えなかったのです。おそらく「「なぜ」ではなく「どのように」」というのは、「すぐに答えの出ない疑問についてむやみに問うてはいけない」というルールを正当化するために無理やりでっち上げられたスローガンにすぎません。

プログラミングの単体テスト

「問題の分解」は科学だけでなくプログラミングでも通用します。一度に大きなプログラムを作るのではなく、小さな部品を作ってそれらを組み立てるわけです。その部品一つ一つはちゃんと動作することをテストしておきます(単体テスト)。プログラマが単体テストをするのは、うつにならないためなのです!

拍手[0回]

PR