今更ながらだが、「どこまで抽象化の階段を昇れるのか」というのはプログラミングをする上での真髄のひとつであるように思う。最近何となくの興味でLispを学び始めているのだが、Lispが(具体的に言えばマクロが)他の言語では提供できない高位の抽象化を提供してくれる強力な道具であるということが理解出来はじめてきた。これをもし自分のものに出来れば、また自分のプログラミングは変わっていくことだろう。Lispから抽象化を学ぶというのは、ある時点では必要なステップなのかもしれない。
—–
よく雑誌やネットなので「どの言語を学ぶべきか」という話になる。初心者がどの言語から学び始めればとっつきが良いとか、いま求人が一番多いのはどの言語かとか、そういう話ならば多少意味があると思うが、個人的にこの手の話にはほとんど興味がない。ただし「ある言語から何を学ぶのか」という視点は非常に大事なことであると思う。例えばJavaを通してオブジェクト指向プログラミングを学ぶとか、Cを通してメモリ領域の確保について学ぶとかそういう話だ。そういう話には意味がある。最終的に何に辿り着くのか分からないが、そのときに付き合っている言語から何を学べるのか、は常に意識しておくべきだろう。例えばCOBOLから学べるものもある(ローカル変数の大事さとか)。
ちなみにこれも分かりきっている話だが、言語は全て同じ位置にいる訳ではない。これは言語の持つ力が違うという意味でもあるが、ある言語が活躍する場所が違うという意味でもある。例えばPerlとCを比べるというのは馬鹿げている。飛行機と車を比較しているような違和感がある。どうせ言語を比べるのであれば、同じ位置、または近い位置にいる言語同士を比べなければ話にならない。Perl、Ruby、Pythonなどを比べるのは比較的意味があるのではないかと思う。でも言語比較に右往左往している暇があったら、とりあえず使ってみた言語をとことん使ってみる方がよっぽど役に立つのではないかと思う。