バリケンのRuby日記 RSSフィード

2007-10-14

[] 複数のプログラミング言語勉強してみて、感じたこと  複数のプログラミング言語を勉強してみて、感じたこと - バリケンのRuby日記 を含むブックマーク はてなブックマーク -  複数のプログラミング言語を勉強してみて、感じたこと - バリケンのRuby日記  複数のプログラミング言語を勉強してみて、感じたこと - バリケンのRuby日記 のブックマークコメント

いまさらだけど、ポール・グレアムさんの書いたとても有名な文章(の日本語訳)「普通のやつらの上を行け」を読んでみたよ。すごく面白いねえ。

エリックレイモンドはエッセイハッカーになろう」の中で、他のいろいろなアドバイスに混じって、ハッカーになりたい人はどんな言語勉強すべきかを述べている。まずPythonJavaから始めよ、学ぶのが容易だから。真剣なハッカーはさらに、UnixをハックするためにCを学び、システム管理と CGIスクリプトのためにPerlを学ぶべし。そして本当に真剣なハッカーLispを学ぶことを熟慮すべきだ。というのも:

LISPは、それをものにしたときのすばらしい悟り体験のために勉強しましょう。この体験は、その後の人生でよりよいプログラマーとなる手助けとなるはずです。たとえ、実際にはLISPそのものをあまり使わなくても。

これはまるでラテン語勉強について語っているみたいじゃないか。ラテン語勉強しても就職には役に立たない(まあ、古典教授を除いては)。でもそれはあなたの心を豊かにし、英語なり何なりの実際に使う言葉をよりうまく使えるようになる。

普通のやつらの上を行け ---Beating the Averages---

この続きの文章で、ポール・グレアムさんは「Lispラテン語と違って実際に使える道具なんだから、実際に使ったらいいじゃないか」と反論するんだけど、つづきはリンク先を読んでね。

ぼくはLispは知らないけど、Haskellの勉強をしてみた感じでは、エリックレイモンドさんが言っているように「たとえ実際には使わなくても役に立つ」と感じたよ。HaskellRubyとは全く違う思想というか世界観を持っている言語だけど、その考え方はRubyプログラムを書くときにも応用できるから、「違う知見を得る」という意味ではすごく勉強になったけど、やっぱり普段はRubyプログラムを書きたいなあ、と思うようになったよ。

とくに結論はないんだけど、自分に合ったプログラム言語を使えばいいんじゃないかな。もちろん適材適所はあると思うから、どんな場面でも自分の好きなプログラム言語で書けるわけじゃないと思うけどね。

そしてようやく本題。ぼくは最初はRuby、次にHaskell、その次にJavaScript、そして今はC言語勉強をしているけど、複数のプログラミング言語勉強していて次のようなことを感じたよ。

それぞれのプログラミング言語には、それぞれの世界観がある

それぞれのプログラミング言語には、プログラミング言語を設計した人の「思想」というか「世界観」があるなあ、となんとなく感じたよ。

たとえばRubyは「プログラムを楽しくすること」、Haskellは「美しい数学世界をなるべくそのまま表現できること」、JavaScriptは「シンプルだけど実用的であること」、C言語は「機械語を意識しつつ、扱いやすくすること」のような思想を、それぞれの言語に対してぼくは感じだよ(もちろん、本当にそういう思想で作られているかどうかは設計した人に聞いてみないとわからないけどね)。

既存の知識を当てはめるのでなく、思想を理解するようにする

そして複数のプログラミング言語勉強するときは、他のプログラミング言語の考え方を当てはめるのじゃなくて、「それぞれのプログラミング言語思想を理解するようにする」のが一番の近道だということがわかったよ。

そういう意味で、「よい教科書」はすごく大事だなあ、と思ったよ。ぼくはRuby勉強には「たのしいRuby」を、

Haskell勉強には「ふつうのHaskellプログラミング」を、

JavaScript勉強には「Core JavaScript 1.5 Guide 日本語版」を(これはWeb上のドキュメントだけど、プリンタで紙に印刷したよ)、そしてC言語勉強には「プログラミング言語C」を、

プログラミング言語C 第2版 ANSI規格準拠

プログラミング言語C 第2版 ANSI規格準拠

それぞれ教科書として勉強したけど、どれも「それぞれのプログラミング言語思想を体系的に理解すること」を重視して書かれているように感じたよ。

総論 複数のプログラミング言語を学ぶ意義:ITpro」という記事にもあるように、ひとつのプログラミング言語思想に染まると他のプログラミング言語にもそれを当てはめようとしちゃうから、気をつけるようにしたいねえ。

トラックバック - http://rubyist.g.hatena.ne.jp/muscovyduck/20071014