なぜ JavaScripter が Schemer になったか
以前は JavaScript のことばかり書いていたのが信じられないくらい、Scheme のことばかり書いていることについての説明文です。
ホップ
当ダイアリーのタイトルからもお分かりかもしれませんが、私は元々 JavaScript について書きたくなって、ブログというものを始めました (ついでに言うと、はてなのアカウントを取った時点ではそんなつもりは1ミリも有りませんでした)。
ちょうど世界的に JavaScript の真価が理解されるようになった時期でもあり、個人的には Ruby のクラス・システムを JavaScript で模倣するというテーマに興味を持って色々と実験をしたものです。
それから、LDR との出会いという大きな経験もありました。プログラムの世界に深く沈潜するようなリーディング体験をしたのは、この時が初めてだったかもしれません。それまで考えもしなかったような発想や技術に溢れていました。
さらに、Mochikit というライブラリにも出会いました。後から考えると、これがその後の方向転換への助走となったように思います。
ステップ
Python プログラマによって書かれた Mochikit は、Python 風の関数プログラミングのイディオムを具備しています。ここにおいて初めて、関数プログラミングの概念にまともに衝突することになったのです。
思考のメタモルフォーゼとでも言いましょうか。それまでオブジェクト指向しか知らなかった人間にとって、使ったことの無い頭の使い方を強いられるという意味で、苦しい経験だったと言えます。
その経験を経て、私の興味の対象は関数型言語へと大きくシフトしました。そしてどれか一つ、関数型言語を選んで勉強しよう、と思ったんです。
調べた結果、Lisp 系の言語を選ぶことにしました。最初は Common Lisp が良いと思ったんですがちょっと難しそうなので後回しにして、より文法が簡単そうな Scheme を選択しました。
なぜ Lisp を選んだかと言いますと、ずっと私の中に Lisp に対する複雑な感情があったからなんです。
多くの Lisp 嫌いがそうであるように、「こんな括弧だらけの言語どうやって読み書きするんだ」とか、「読み書きできる連中の気が知れない」みたいな否定的な感情を持つ裏で、Lisp を理解できる気がしない自分は彼らより知的に劣っているんじゃないか、という劣等意識も持っていました。
そのことを認めたくないが為に Lisp を悪く言う、という典型的な Lisp 嫌いであったわけです。
関数型言語を勉強しようと思った時に、Lisp も関数型言語の一種であることを知り、じゃぁこれを機会に Lisp 嫌いを克服してみよう、と一直線に繋がった感じでした。
Scheme の勉強には主に次の2つのテキストを用いました:
Teach Yourself Scheme in Fixnum Days
Structure and Interpretation of Computer Programs
驚いたことに、難しい、分からないと思っていた部分 (大量の括弧) は、1 足す 2 を
(+ 1 2)
と書くということ、つまり、括弧で囲まれた式の最初の要素がオペレータ(関数)で、残りは引数である、というごくごく簡単な文法を理解した時点で氷解したように思います。
何だそんなことだったのか、と拍子抜けするような思いでした。もちろんマクロとか継続とか、難解な概念もたくさん在るわけですが、括弧への苦手意識はほとんど一瞬で消え去り、適切なテキストで初歩から丁寧に学んだことで、少しずつ Lisp を理解し受け入れていくことができました。
ジャンプ
SICP の Scheme コードの美しさに魅了され、JavaScript で Scheme っぽいプログラミングを試みたりしながらも、まだ Scheme でプログラムを書くには至らない状態が続きました。あくまで Scheme は勉強用で、実用のプログラムを書く言語ではないという認識に留まっていたのです。
と言うか Scheme は終えて Common Lisp の勉強に入っていました。
そんな折、とあるウェブサイトに遭遇したことが事態を一変させます。
スクロールして右下を見ると…
Gauche!?!?
これを見た時、心の中で叫びました。「いた!」と。「Scheme でプログラムを書いてる人がいた!」
その衝撃から、「よし、自分も」と発奮させられ、Scheme でプログラムを書くことを決意した、というわけです。2007年5月のことでした。
このサイトに出会っていなかったら Schemer になるのはずっと遅れていたか、あるいは、なっていなかったかもしれません。
何がきっかけになるか分からないもんですね、というお話でした。