この半年読んだ、プログラミング関係の本 + 1ヶ月

Cranes In The Sky.
Photographer Montrasio International

今年は、プログラミングの本を割と集中的に読んでいます。なぜかというと、自分が読みたいから。そして、自分でプログラムを作りたいから。昔から、何か物を作ることは大好きだから。本でもWebサイトでもチームでも作る物はなんでも良いんだけれど。ぜひ、使えるプログラムも自分で作ってみたい。それも、ブラックボックスを組み合わせるじゃない、できれば中身まで首を突っ込みたい。

そんな訳で、いきなりLispの本なんか読み始めた訳ですが、それがすっかり脱線していっておりまあす(その顛末は、一ヶ月前に書きました)。ところが、これが何故か、同僚には好評だったり。私のほうが技術がないので、教わるばっかりなんだけどね。

そこで、その後の一ヶ月の進捗を書いておきましょう。

ちなみに、前回の記事のコメントにも書いたけれど、私のプログラミング体験は、N-Basic(PC-8001とか) -> アセンブラ(80系)、Fortoran(学校の演習でやった) -> QuickBasic、VisualBasic(会社のマシンにコッソリ入れてた) -> VisualBasic.NET(初心者向けの本を書いた) -> Java(初心者向けの本を書いた) -> (現在に至る)という感じです。まあ、全然素養が無いわけではないんだけれど、本格的にバリバリとプログラムを書くのとは、ほど遠い。BasicやFortranの古い知識で、なんとかしようとしてきたというレベルです。

さて、Lisp本が挫折したので、C言語を経由して、今月はこんな本を読みました。

初めてのRuby

プログラミングの初心者ではなく、Rubyの初級者のための解説書。とっても面白うございました。特に、「3.timesというのは整数オブジェクトに対する単なるメソッド呼び出しです。メソッド呼び出しにdo…endのコードブロックを引き渡しているのです。まるで、メソッドに引数を渡すかのように」という記述が、目からウロコが落ちる思いでした。そう思うと、Rubyの言語仕様がとてもすっきりしたものに見えてきました。

初めてのJavaScript-Ajax&DOM対応

もう一冊もオライリーブックス。こちらはjavascriptの入門書。ブラウザにくっついているスクリプト言語だとなめていて、昔さっぱり分かりませんでした。今回は、オブジェクト指向のことがちょっと分かっているし、どんなところで使われているかも良くわかっているので、すっきりと読めました。無名関数とかグロージャのところが面白うございましが、どんなふうに応用すれば良いのか、さっぱり分かっていません。

プログラミング言語を学ぶとき、ひっかかりやすいこと

まあ、いちおう本だけはそれなりに読んできて、プログラミング言語を学ぶとき引っかかりやすいなあとと思うのは、その言語固有の新しいアイデアのところ。ほとんどのプログラミング言語はALGOL系とか呼ばれていて、基本は同じに見えるんだけど、それをナメていて、さっぱり理解できなかったのが私です。なぜかというと、プログラミング言語はそれぞれ固有のアイデアを持っていて、そのアイデアが理解できないから。そうすると、私にはちっともピンとこない。

たとえば、今まで腑に落ちるのに時間がかかってきたアイデアは、次の2つ。「関数呼び出しの引数」「オブジェクト指向」。関数呼び出しに引数が付くのは、C言語を通ってこないと出会わないんです。Fortranと昔のBasicは、全部グローバル変数でやってました。もうひとつのオブジェクト指向も腑に落ちるまで相当時間がかかりました。VisualBasic.NETに触るまで、なぜかピンと来なくてね。でも、この2つは、現代的なプログラミング言語にほ、ほぼ必ずあるからね、それが理解できないと何が書いてあるのか、さっぱり分からない。

で、プログラミング言語には必ず何らかのそういうアイデアがあって、それを実装しつつ、なおかつエレガントにできているような気がするのです。今の私には、それがとても気になる。

ただし、そのアイデアが、人間にとって便利そうに見えるというだけで追加されている、という話だと納得がいかない。Rubyの「3.times」も、それだけなら別に不要な気がします。ただ言語仕様を汚くしているだけ。どんなに便利だといっても、C言語にtimes命令を追加するのは、格好悪そう。それならいっそ、ループは全部Whileで書いたほうが潔いように思えるのです。

Rubyの場合には、コードブロックをオブジェクトに丸ごと渡すというメカニズムで、統一的に実現している。その上で、シンタックスシュガーとして、見た目だけ分かりやすくしているというには、現実的な解決策として私としては腑に落ちる。

良い解説書

昔は、プログラミング言語のよい解説書は、面白い課題を取り上げているかどうかだと思っていました。RobocodeとかCodeRallyとか、そういうのが好み。でも、そういう本はプログラミング言語の説明よりも、課題の解説に比重を置きがちで、そのバランスが結構難しいと思います。さて、最近読んでいるプログラミング言語の解説書は、どれも課題はいまいち。言語仕様にそって、その機能を順番に並べていくだけのものが多い。これだと、言語そのものに興味を持たないと、読む気にならなかったんだけれど。今は、プログラミング言語が持つアイデアに興味があるので、そこはバッチリ。面白くて仕方ない。

今やっていること

さてさて、RubyとJavascriptの本を読んで、次に取り組んでいるのは、前回挫折したLispの本を読み直すこと。Rubyのコードブロックの話が、Lispの中で、どんなふうに出てくるのか。この機能で何が実現できるのか、それがとても気になります。

Javascriptのほうは、Bookmarkletを少し作ってみたけれど、それはこれ以上深追いせず。なんかねぇ、個々のブラウザの仕様やバージョン間の互換性にものすごく振り回されている気がするんだよねぇ。

だから、ちょっとRubyに集中してみたい。その理解を深めるために、時間があればPerlの本とか正規表現の本とかをざっくり眺めたいところ。んでもって、Web系のサービスをいくつか自分で作ってみたい。

というのが、現在の私です。

えー、こんな駄文が何の訳に立つか分かりませんが、いちおう晒しておきましょう。あの本が面白いぞとか、このプログラミング言語のここを試すと良いぞとか、もしもそんなご意見がありましたら、コメントを付けてもらえるとウレシイです。

ながなが失礼しました。