@IT編集部の西村賢がRuby/Rails関連を中心に書いています。

JavaScriptは初心者向けではなく“ハッカー言語”

»

 先日、日本Rubyの会会長の高橋征義さんと雑談しているとき、以下の指摘に妙に納得しました。

「私の中ではハッカー言語という分類があって、PerlやLisp、JavaScriptはハッカー向けの言語だと思うんですよね」。

 その心は、これらの言語は多数のプログラミングのパラダイムをサポートしていて、自分が何がしたくて、どれを使えばよいか分かっている人には柔軟で良いのだけれども、初心者が使う言語としては自由度が高すぎて難しいのではないか、ということです。

JavaScriptは最初のハードルこそ低いけど……

 JavaScriptはどこでも動きますし、すぐに「Hello World」が表示できます。文字の色もすぐに変えられます。ほかのどの言語よりも最初のハードルが低く、入門に向きそうです。そういう意味で、初心者にオススメといわれることもあります。しかし、そこからちょっと先に進もうと思っても、「これ」というベストプラクティスがなく、今のところプログラマが決めるべきことが多いように思います。

 例えば、Prototype.jsやGoogle Closureのようなライブラリを使って継承ベースのオブジェクト指向っぽい使い方をするべきなのか、それとも素に近いプロトタイプベースでやるのかということとか、複数ライブラリをどう混ぜて使うべきで、そのときの名前空間の汚染やロード順序をどう管理するのかといったことを考えることになるでしょう。JavaScriptは標準だとコレクションが弱いので、Underscore.jsを混ぜるべきか、あるいは自分で最低限のところは実装してしまうのか、はたまたCoffeeScripのような荒業(?)を使ってしまうのか、というのも使う人の判断次第です。これらは現在、発展の真っ最中で“鉄板”と言えるものがありません。ライブラリを使わないという選択も当然あるでしょうけど、そうすると今度はブラウザごとの差異という本来言語処理系とは関係のない部分で苦労しそうです。

 単にjQueryやCanvasを使って、チカチカ動くものをWebページに埋め込む程度ならいいのでしょうけど、それ以上のものを作るとなると、よく分かった人でないとJavaScriptは使いこなせずに、スパゲティコードが量産される結果となるような気がします。Webフレームワークもまだ決定版がありませんから、MVCのような設計パターンについても深い理解がない状態ではコードが混沌としてしまいそうです。

 追加のメールで高橋さんにお聞きしたら、以下のような指摘が返ってきました。

JavaScriptについては、例えばRubyがRailsと一緒に、その作法や思想込みで広まったように、何かそういう背景となる作法や思想あふれるプロダクト(たぶんRailsよりも、もうちょっと低レイヤーの部品が多そうなもの)が出てくると、初心者から上級者までをきれいにつなげるいい形ができるかもしれません。jQueryやNode.jsはその未来につながる期待を持たせてくれるような(でも、その未来はそれらともまたかなり違うものになりそうな気も)。

 Ruby on Railsは大リーガー養成ギプスだという指摘があります。MVCパターンに則って、Webアプリを作って運用していくとはどういうことか、ということのベストプラクティスがRailsには詰まっています。周辺ツールや開発プロセスについても、何が良いかということがRubyコミュニティで緩やかに共有されています。

 一方、ハッカー言語というのは「こうあるべき」というようなことは何も言いません。そんなものは使う人が考えて場合によっては自分でサブシステム的に作るのであって、ツールとしては選択肢が豊富で生産性が高いことが重要だということかなと思います。LispのS式は道(タオ)、宇宙を生み出すのに必要な要素がすべて入っている、とか何とか……。

 Perlもオブジェクトシステムが後から拡張されていて、CPANではMooseやMouseなど、ほかのオブジェクト指向言語では最初から組み込まれているような言語機能が取り替え可能で、発展を続けています。「Mooseが良さそうなので使ってみたけど、遅くてね。ほかになんかないかなーと思うけど、まあ別に要らないかも」などというのがPerlハッカーっぽい気がします。

 高橋さんは指摘しませんでしたが、私にはC++も、いまやハッカー言語になりつつあるように思えます。Boostなんかを見ていると、「これで何でもできるし、もうこれでいいじゃん!」と一瞬思えたりもするわけですが、普通に考えたら使いこなすのは大変ですよね。ネイティブアプリやインフラ向けソフトウェアを作るのではなく、安定して高品質のコードを作るのが目的の業務系のプロであれば、C++よりもC#を選ぶのは当然でしょうし、そういう意味でもC++はハッカーの言語という感じがします。

Rubyはスッキリしていて初心者にお勧め

 「これからプログラミングを勉強したいけど、どの言語を選べばいいの?」というのはよくある質問です。実は私もときどき聞かれます。「私に聞かれてもなぁ」と内心思いつつ、そういうときに指摘したくなるのが、以下のようなことです。

 プログラミングの初心者はどの言語を学ぶべきかという質問をする人の想像には、「どうもJavaScriptが手軽そう。今後も伸びそうだし、Webのネイティブ言語だからね。良さそう」というのがあるように思えるのですね。でも、すでに書いたように、JavaScriptはハッカー言語なので、ちょっと試す以上の先に初心者が進むのは大変かもしれませんよ、と。私はうっすらそう感じていたので、高橋さんの“ハッカー言語”という言葉に妙に納得したのでした。

 ここでいう「プログラミング初心者」は、さしあたり非職業プログラマ的な人のことで、「新人職業プログラマ」や「未来のハッカー」では、また議論の前提が違って来るとは思います。新人職業プログラマならJavaをやればいいでしょうし、未来のハッカーなら、どの言語から入るかはあんまり問題になりませんよね。

 Rubyファンの私としては、単一継承とmixinというオブジェクト指向のパラダイムで世界観が統一されているRubyは、スッキリと分かりやすく、実は初心者に良いのではないかと思ったりしています。Rubyにはプリミティブ型とかボクシングの概念もありません(内部的にはVALUEというポインタに即値が埋めこまれたりしていて暗黙的にプリミティブ型もありますが)、むしろオブジェクト指向を理解する上では、初心者にとって混乱がなくていいように思います。「Rubyを使ってみて始めてオブジェクト指向が腑に落ちた」という感想は良く耳にします。

 今の時代、プログラミングを学んでいけば、どうせいずれは複数言語を扱い、いろんなパラダイムやデザインパターンを学ぶことになるのでしょう。ただ、最初に学ぶ言語が備えるべき好ましい性質というのは、「どうぞ好きなパラダイムで使ってください」というハッカー言語的なものではないのではないかと思うのですが、皆さんどう思われますか?

Comment(0)

コメント

コメントを投稿する