アマグラマーのすすめが止まっていて一部の読者を絶望させて申し訳ありません。他の本を先に出さないといけないというのがその理由なのだけど、いい機会なので、

2008-02-20 - きしだのはてな
デブサミでid:amachangが、初心者がプログラムを勉強するための言語としてJavaScriptがいいと言っていて、ぼくも同じような理由でいいと思って初心者の勉強にJavaScriptを使ってみたことがあるのだけど、実際にやってみるとかなり難しいと思ったので、そのことをまとめておきます。

への返答の形で、なぜ私がJavaScriptを選んだのかをまとめておくことにします。

まず比較的明らかな理由。

  1. インストール不要の開発環境

    ブラウザーのないパソコンというのは今やないに等しい。これはダントツに一番の理由。

  2. コンパイル不要の実行環境

    javaはこの点Cよりひどい。実行するときすらjava foobarってどんだけ。

この二つはid:nowokayさんも指摘しているところですが、加えて以下の「他の言語と比べてみてわかる」理由があります。

  1. 融通が比較的利かないこと

    例えば明示的にreturnを書かなくてはならないとか、obj.methodは問答無用でプロパティで、実行するにはobj.method()と括弧を付けなくてはならないとか。

    これは仕事言語としては欠点ですが、教育言語としては利点です。

  2. closureが使える事

    これを早期に学べるのと学べないのでは格段の差が出ます。

  3. evalがあること

    これも早期に学ぶべきこと。プログラムは所詮文字列で、これを評価するという過程を経てはじめてプログラムとなるというのは、コンパイラーでは充分実感できるとは言えません。

で、id:nowokayさんへの反論。

開発環境

JavaならNetBeansやらEclipseやら、構文エラーをタイムリーに表示して、ヘルプも簡単に見れるという環境が手軽に整えれるのに、JavaScriptにはそれがない。あるとしても、NetBeansインストールの方が楽で高機能。

「Eclipseが手軽」と言っている時点で卒倒もの。起動に何分もかかる開発環境が重荷というのは初心者だけではありません。また、構文エラーはFirefoxのError Consoleだけでもかなり饒舌ですし、それで不満ならFireBugだってあります。

「ヘルプが充実していない」というのは、仕事言語としては私もかなり不満なのですが、教育言語としては実はそれほどの欠点じゃない。むしろヘルプがないと覚えきれないほど覚えることが多い方が問題で、この点JavaScriptは覚えることがずっと少ない。

入門書がない

JavaScriptで、ホームページ上にちょっとしたエフェクトをつけるための入門書は掃いて捨てるほどありますが、JavaScriptでプログラムを勉強するための入門書はほとんどありません。

確かにこれは喫緊の課題で私にも耳が痛い。ですがJavaによるプログラミング入門書というのは玉石混淆、というか今のところは石しか見た事がありません。これぞという本があればぜひ推薦を。

ちなみに、アルゴリズム本で比較した場合、「C言語による最新アルゴリズム事典」は名著でしたがその後継である「javaによるアルゴリズム事典」はクソ本でした。詳しくは

を参照のこと。

HTML/DOMの理解が必要

そして、これが最大の理由なのですが、JavaScriptでブラウザ上で気の利いたことをやろうとすると、必ずHTML/DOMの理解が必要になります。いまからプログラムを勉強しようという人にとって、これはかなり敷居が高いです。

これこそが、最大の誤解です。HTML/DOMなしでも、プログラミング入門としてJavaScriptを使うことは出来ます。「シェル」を用意してしまえば済むのですから。こんな具合に。

404 Blog Not Found:アマグラマーのすすめ - 下ごしらえより
プログラム:
出力:
エラー:

これと同じ事をJavaでやろうと思ったら、何行コードが必要なのでしょうか。JavaScriptならHTMLも含めて10行です。

要は、

404 Blog Not Found:初心者向け言語もいろいろ
で、メタから下りて少しマジレスすると、Computer Scienceをきちんと教えている学校の多くは、最初の一年の前半に scheme を教えて、後半に C と assembly language を教えている。私が教わったのは1980年代の終わりだけど、21世紀の今になってもこれは変わっていない。このことはもう少し注目されてもよいのではないか。

のschemeの代わりにJavaScriptは充分なる、ということです。

むしろ悩みは、C+Assemblerに相当する部分をどうするか、ということですね。初心者向けなのだから端折ってもいいというのも答えにはなりえますが、フラットなメモリーがあって、それをレジスターに読み込んでいじくってメモリーに戻すという今のコンピューターの簡単なしくみをJavaScriptで再現するのはかなり無理がある。しかし私にとっての初心者本は、これもある程度はおさえておきたい。少なくとも触れておきたい。

Javaはこの点でも中途半端で、この点に関してはむしろポインターが欲しいのです。

JavaScriptを学んでからJavaを学ぶのと、Javaを学んでからJavaScriptを学ぶのとでは、前者の方が絶対効率がいいと思うのですが。仕事言語は、後から仕事で学べばいいのです。

Dan the JavaScripter