@ledsun blog

Hのキーがhellで、Sのキーがslaveだ、と彼は思った。そしてYのキーがyouだ。

「論理的思考の放棄」をパクる

「論理的思考の放棄」とは

論理的思考の放棄 - 登 大遊 (Daiyuu Nobori) の個人日記 がバズっていたので読みました。 世の中のスーパープログラマーは1日で1万行のプログラム書くことができるようです。 その手法として「論理的思考の放棄」が挙げられていました。 1万行は無理なので、仮に1000行に桁を落として自分に当てはまらないか考えてみました。

彼我の分析

僕には1日で1万行のプログラミングをすることはできません。 登 大遊氏と僕は何が違うのでしょうか?

登 大遊氏をプログラマー風林火山 : 小野和俊のブログ に当てはめると、 「風のプログラマ」で、かつレベルが異様に高いのだと思います。 僕はどちらかというと「山のプログラマ」です。

1万行は途方もなさすぎて無理そうです。ちょっと目標を現実的なラインに落として見ましょう。 目標を1日1000行書ける「風なプログラマ」としてみます。

僕が1000行レベルの「山のプログラマ」と「風のプログラマ」を兼任できたらすごくないですか?すごい。 0から1日で1000行書けて、何かしらのアプリケーションを動かせるようになると結構使い所があるように思います。 それで良いアプリケーションができたら、リファクタリングはどんとこいです。 「論理的思考の放棄」を真似て「風のプログラマ」属性が身についたら良さそうです*1

というわけで「論理的思考の放棄」をパクってみます。

「論理的思考の放棄」を分析

最初、1万行という規模感にとらわれ、「フロー状態」と違う概念かと考えました。 「フロー状態」なら自分だって体験したことあるし、それで自分が1万行書けてないの矛盾じゃん、と考えたわけです。

仮に、1万行を1000行に置き換えると*2リファクタリングならできています*3。 やっぱり「フロー状態」の話なのではないか? リファクタリング中の自分の脳の動きをモニタしていけば「論理的思考の放棄」が理解できるのではないでしょうか?

プログラミング脳をモニタリング

実際にプログラミング中の思考をモニタリングしてみると、ビビると「手を止めて考えよう」と思いつきます。 「ビビる」のは主に手戻りに対してです。 プログラミングしているときに、ちょっとつまると 「この作業を1時間続けても、結局うまく行かなくて、無駄な作業になるのでは?」とビビります。

そこで「上手い設計」を考えようとするわけです。 実際に設計を考えると2時間ぐらいいろんなパターンの設計を比較してみて、結局元の設計でよくて「お、さすが俺。天才じゃん」とか思うわけですよ。 で、満足して1時間プログラミングして完成させます。

下手の考え休み

冷静に考えると、「ビビり」を無視してプログラミングしていれば1時間で終りです。 「2時間設計して、1時間実装する」が「1時間の実装」です。 3倍速いの。 3倍速いなら、仮に今の実装で上手く行かなくても、他の実装を更に2つ試せます。 「下手の考え休むに似たり」って奴です。

「3時間のプログラミング」を「1時間のプログラミング」で済ませようって策なので、「似たり」っていうか「休み」です。「下手の考え休み」です。

なるほど「論理的思考を放棄」して、思いつた実装を片っ端から実装して試した方が速いんです。体力の問題を無視すれば*4。あとは「論理的思考を放棄」無視して、プログラミングしまくってプログラミングの体力をつける*5だけです。

*1:結局、1日1000行の「風のプログラマ」になっても、1日1万行の秘密はわかりません。ですが、同じ「風のプログラマ」になってから、量の差を分析すれば、1日1万行の秘訣はもっと具体的にわかるはずです。

*2:いまのところ1日1万行を達成する必要はなくて、リファクタリングで1日1000行できているのを、0からのプログラミングに転用できる方法が見つかれば良い。ついでにリファクタリングを1日1000行ができる必要条件が緩和できたりとか、2000行に増えたりとかできる方法が見つかったらラッキー

*3:厳密には嘘です。リファクタリングにはソースコードの追加と削除があるので、どうカウントして1日1000行なのかわかりません。

*4:結局のところ「フロー状態を維持する手法」だと思っています。「二の矢を受けず」と同じで、脳がサボるために提案してくるアイデアを却下する手法だと思っています。

*5:「いろいろなプログラミングをディープラーニングして、パターン認識と手癖だけで書けるようになれば、疲れない」だと思います。