「2冊目の本のほうがわかりやすい本」の誤謬

関係ないけど、誤謬(ごびゅう)を「ごしん」と読んでた時期がわたしにもありました。

で、本題。
先日「C++の授業を受けて理解できなかった人が、RubyRailsをやったら簡単に理解した、Rubyすばらしい」という話がTwitterで流れていた。

ただ、これをもって、Rubyで授業やるとわかりやすい、と単純に考えてはいけない。
確かにC++はヘッダファイルやポインタみたいな、混乱ポイントがあるわけだけど、教育用途なら1ファイルに全部書くことでヘッダファイルからは逃れれるし、C++のライブラリつかえばポインタはあとまわしにできる。Rubyでも文法を淡々と初心者に教えれば「わけわかんない」という感想だけで終わらせることもできる。
なにより、このご時勢にプログラムの最初の授業をC++でやってる先生の授業がわかりやすいはずがない。わかりやすさに気をつける先生なら、JavaC#Rubyか使っていると思われる。

まあ、それはともかく、ここでの一番のポイントは、Railsをやったのが、プログラム言語の2周目だったということだ。C++でまずプログラム言語のなんたるかをイメージした上で、Railsをやっている。そうした前提があった上で、Railsでプログラムがわかった、となっている。
おそらく、Railsを最初にやったとすると、それはそれでなんか動いたけどわけがわからなかった、ということになるはず。たとえばそのあとでC++の文法の授業をやったときに、あーあれはそういうことだったのか、と納得したりするわけだ。まぁ、そのときにC++だからわかった!とは決して思わないだろうけど。

で、これと同じ現象をAmazonの書評をみかけることがたまにあって、ぼくはこれを心の中で「2冊目の本のほうがわかりやすい本の誤謬」と呼んでいる。
つまり、「1冊目にxxxという本を読んで全然わかんなかったけど、この本でわかりました、すばらしい!」という書評が、けっして良いとは言えない本のところにあったりするわけだ。そして、xxxという本は定番の「良書」だったりする。

この場合「良書」は正しく細かく書きすぎてて最初に読むのに理解が難しかったのが、2冊目の本を読むことでつながって理解できた、ということが多分にあるように思える。
2冊目の本がわかりやすかったのではなくて、2冊読んだからわかったという話で、その本を最初に読んだら果たしてわかったか、と。もしかしたら、1冊目の本を2回読んだら、同じようにわかったかもしれない。

なんにしても、なにか理解しようと思ったら定義的なものと概要・実例的なものを勉強することが大切で、プログラムの場合だと文法とアプリケーションを勉強することが重要になる。文法だけ勉強しても使えるモノは作れない。
時間の制約がなければどちらが先でもいいけど、モチベーションや効率としては、アプリケーションを先にやってプログラムへの興味をもちつつ、何ができるか(何ができないか)を把握したあとで、それから文法をちゃんとやるほうがいいと思う。
だから、Javaを教えるときはNetBeansGUIアプリを作りながら勉強するということにこだわったし、それが←の「創るJava」の基本コンセプトだし、たぶんC++を教えろといわれたら、C++Builderを使う。

まあ、とにかく、何かを学習するには、角度をかえて、2つくらいの教材をやるのがいいし、2つめの教材で体感として理解につながることが多いということです。
結局のところ、プログラミングの教育で理解をさせるのに一番大事なのは、教育法とかける時間であって、プログラミング言語はいくらか助けになるにすぎないです。「最初にやるべきプログラミング言語は身近に教えれる人がいる言語」というのは、つまりそういうこと。書籍での自習の場合は書籍の質と順番、そして勉強した時間。