Write and Run

it's a simple way, but the only way.

フレームワーク使うな的な話を見て

最初からフレームワークの使い方だけを勉強するようなことをするな、って話らしいね。納得はするけど、俺だったらそんな助言はしないなぁ、と思ったので書こうと思った次第。(このブログ、この手のスピリチュアルエンジニアリングの話多い気がする)

思い出そう

プログラミングを始めた時の自分を。
初めて画面に HELLO が表示された時、俺は 10 PRINT "HELLO" の意味なんて知らなかった。CPU がどうやって動いているのかも、そもそも CPU の存在すらも噂程度の知識でしか認識していなかった。メモリというものもあるらしい。ハードディスクというものもあるらしい。メモリとハードディスクの違いってなんなんだろう……。

その後

インタプリタの存在も簡単な実装も知って、CPU やメモリの存在や、動きも知った。なるほど、こうやって動いていたのか。なんだ、簡単じゃないか、はじめからこれを知っていれば簡単だったのに……。

誰かに教えたい

いずれ、こう思うようになる。ならないかもしれないけど。
そして教えるときに考えるんだ。「基礎から学んだ方が効率的だ」と……。

しかし

果たしてそうなのだろうか。意味もわからず座学を机上で学ぶことの苦痛さを忘れていないだろうか。
中には座学を嫌だと思わなかった人もいるかもしれないが、僕の(狭い)観測範囲では座学を楽しんで学んで実務能力を身につけたような人はいない。多くの人は、実際に手を動かして試行錯誤するほうが楽しいのではなかろうか。

まとめると

プログラミングを学ぶ流れは3つのフェーズに分けられると思っている。

  1. 本質ではなく振る舞いだけを追いかけてとりあえず使えるようになる
  2. 本質に興味を持ち、調べることでそれを理解する
  3. 本質にもとづいて、振る舞いを捉えられるようになる

フェーズ1と3は表面だけを見れば同じように見える。手戻りしているようにすら見える。しかしそれは違う。このような手順を追うからこそ、飽きずに学習を続けることができるのだ。
フェーズ1の存在を忘れてフェーズ2から学習を始めることを勧めるのは良くないと思う。

んで推察とか

フェーズ1を終えると、フェーズ3を終えた人と同等の技術があるかのように思えてしまうがそれは間違いなのだ。にも関わらず、フェーズ1を終えただけでフェーズ3まで終えた人と同等の技術力を主張する人がいる。
すると、それを嫌がって、(これも間違いなのだが)フェーズ1から学習を始めるなと主張する人がいる。
そういうことなんじゃないかなぁ。

ちなみに

自分はよく Node.js を使いますが過去に「Node.js ではフレームワークを使うな」という発表をニコニコ超会議1でやりましたが、それはまた、別の理由です。