読者です 読者をやめる 読者になる 読者になる

論理的な思考

ところで、優秀なプログラマプログラマは止めよう。優秀なソフトウェアクリエイターとは、どのような人であろうか。


ソフトウェアを作るときには、4つの段階がある。(ソフトウェアだけに限らないかもしれない)

  • これをやりたい
  • こうやったらできるんじゃないか
  • やってみた
  • できた(できなかったら、「こうやったらできるんじゃないか」まで戻る)


私のいる環境は、見渡すと優秀なSWクリエイターがすぐに見つかるという素晴らしい環境なのだが、どうも優秀なSWクリエイターは、「これをやりたい」から、「こうやったらできるんじゃないか」に到達するまでの時間が、極端に短い。場合によってはゼロである。
そして、「やってみた」から、「できた」に至るまでの精度が非常に高い。「できなかった」にならない。


「こうやったらできるんじゃないか」から「やってみた」にすぐ移行できるかどうかは、環境に依存する。優秀なSWクリエイターを最大限に活かしたいなら、この間の時間をできる限り小さくできる環境を作ると良いのだと思う。


大学やベンチャーにいると、この時間はほぼゼロにできる(できるが、本当にそうするかどうかは別)。
すると、「これをやりたい」から「できた」に到達するまでの時間が、限りなくゼロに近くなる。やりたいと思った次の瞬間には完成している。


こうなると、論理的な思考が介在する余地がない。結果として、非論理的な思考によって結果が導き出されたかのような感覚になる。
これが、登 大遊@筑波大学情報学類の SoftEther VPN 日記 - 論理的思考の放棄につながるのではないかと思う。つまり、論理的思考を放棄したから良い結果が得られるのではなくて、何らかの行動の結果としてきっかけから結果までの時間がゼロになって、論理的思考が介入する余地が無くなるのではないか、というのが私の考えである。


そうすると問題は、いかに「これをやりたい」から「こうやったらできるんじゃないか」までの時間を短くするかと、「やってみた」から「できた」までの精度を上げるかということになる。



その方法はどうも、論理的な思考をしないことらしい。


論理的な思考には時間がかかるのである。それに人間が行う論理的思考は、極めて不完全である。
これは人間の脳は「直感」とか「常識」とか「なんとなく」といったものを処理するのに特化したプロセッサだからである。


人に「何でそれをやったのか?」と聞くと、だいたい「なんとなく」とか、「当たり前でしょ」とか、「直感だ」とか言う返事が返ってくる。これは論理的でない思考は言葉にできないからで、だいたいの行動は論理的な思考なしで行われていることを示している。
日常の会話などは、完全に「なんとなく」の世界である。これをコンピュータにやらせることは非常に難しい。人間の脳は「なんとなく」を極めて高速に処理できるのである。(人間がこのような脳を持っている原因は、そうでないと社会に適応できなかったからなどの推察ができるが、とりあえずそこのところは置いておく)


人間はコンピュータとは逆に、論理的な思考をするためにエミュレーションを介する。
そして、エミュレーションはどうも非常に不完全で、自分では「論理的だ」と思っておきながら、非論理的な行動を起こす。これは別に特別な場面だけではなくて、日常的に行われている。(この文章も論理的に繋がるように書いているつもりだが、やっぱりどうしても、非論理的になってしまう)
人間は論理的な思考はヘタなのだ。



と、つまり、論理的な思考なしに結果を出すにはどうしたらよいか、ということになる。
結果を出すまでの工程を、「常識」だけで構成できるようにしてしまえばいい。人間の脳は「常識」を極めて高速に処理できるから、膨大な数の「常識」を組み合わせて、結果を得るためのフローを構成するなどという作業は、瞬間的に行える。
ちなみに、これをエミュレーションされた論理的な思考でやると、やたら時間がかかる。それにそのエミュレーションが不完全であるから、間違いが生じる。


TCPを待ち受けるにはsocket()してbind()してlisten()するのは当たり前だし、socket()は失敗したら-1が返るのは当たり前だし、エラー処理するのは当たり前だし、bind()の引数はコレコレなのは当たり前だし…この場合これを関数にまとめたいのは当たり前だし、その関数の第一引数は待ち受けアドレスで、第二引数はポート番号にするのは当たり前だし、返り値がint型のは当然だし…
(これは脳内活動のイメージ。もちろん他の要因が多様に絡んでプログラムはできていくけど、それさえも常識ならOK)


というわけで、常識の連鎖でプログラムが完成していく。と言っても、この例は局所的すぎて「設計」という感じではないが…(ちなみに上の文を書くのに、私は「あれ?」と思ってmanページを開いたりした。人間の脳は「第一引数が」などという論理的な記憶はヘタである。そういうことはコンピュータの記憶能力に頼れば良く、人間は必要なものと結果として得られるものさえ「なんとなく」分かっていればいい)


もちろん、この常識の連鎖を論理的に意識することはない。意識できるのは、「なんとなくできた」だけである。


これができると、晴れて「何でそれをやったのか?」「…まぁなんとなく」となる。これは人間の脳が自分の得意な方法(非論理的な思考)で物事を処理できた証拠である。


…特に登さんの日記を意識したわけではないが、似たような話になってしまった。やっぱりそういうことなのである。


では、物事を「常識」としてとらえられるようにするには、どうしたらいいのか。
…そこのところは、良く分からない。それが分かれば苦労はしないと言うか。


結局訓練を積むしか無いような気もする。