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

Five Shelves
Photographer splorp

昔からあこがれて、きちんとできないことのひとつにプログラミングがあります。まあ、簡単なプログラムなら時間をかければできるんだけどサ、やっぱりカタコトな感じだし、フリーソフトとか探したほうが早いことも多い。万年 日曜Basicプログラマーなわけですよ。でも、ヘタのヨコ好きで、プログラマーの話を聞くのは好きだし、あの本が面白いぞとか言われると、なんとなーく買ってしまう。もうね、いいカモです。

さて、この半年は、割とそういう本を順調に読破(?)してきたので、ちょいとそれを公表してみたい。何の役に立つか分からないけれど、プログラミング初心者の読書の参考くらいにはなるんじゃないかと、傲慢にも思ったり。割とあり得ない本を読んでいるんじゃないかとも思う。

ポイントは、掲載されているソースをちゃんと読むこと。当たり前なんだけれど、今まではそれがキチンとできていなかったように思うので、そこを意識してやってみました。

計算機プログラミングの構造と解釈(第二版)

いきなり正月ごろにチャレンジしようとしたのがコレ。やっぱ、一年の系は元旦にあり。アメリカの情報系学部のプログラミングの教科書にあたる。Lispの方言のひとつであるSchemeを使って、バリバリプログラミングするらしい。方々で色んな人が薦めていまして、つい買ってしまいました。非常に志の高い本だということはよく分かりました。しかし、ぜーんぜん歯が立ちません(^^ MIT-GNU Schemeをインストールしたところでほったらかし。

リスト遊び―Emacsで学ぶLispの世界

そこで、5年くらい前に古本屋で買って、本棚でホコリをかぶっていた、この本を引っ張りだしてみました。薄い本なんですが、ぜんぜん読みもせず積んであったんです。ところが読んでみると、非常に面白い。たぶん、その入り口にしかたどり着いていないと思うんだけれど、Lispプログラミングではここまでやるのか、というのが垣間見られます。ここでも、ソースをキチンと読むのが重要。実際にプログラミングしてみてはいないけれど、ちゃんと読んで記述を頭で追っかけると、解説部分もよく分かります。このあたりでテキストエディタをEmacs系に移行してしまいました。その詳細は、日をあらためて書きます。

初めての人のためのLISP

調子に乗って、15年前に買っていたもうひとつのLisp本を引っ張り出しました。これは、80年代からLispハッカーとして名高い竹内さんの本。最近、「Lispの仏さま 竹内郁雄の目力」というインタビューも掲載されてました。さて内容はと言えば、対話形式で、バカバカしくも面白おかしく書いてあります。ただ以前に読んだときは、ソースをほとんど読み飛ばしていたので、肝心なところをキチンと理解していなかったように思います。今回は、ソースをじっくり吟味してみる。すると、自分の力量と、本のレベルが一致しているかいないか、とてもよく分かる。先の「リスト遊び」は何とか読みこなすことができたんだけれど、この本は半分くらいで挫折。特に、プログラムのマクロの話とかネ。やはり基本となるプログラミングのところ、特にもっと基本的なところが理解できていないように感じました。

プログラミング言語C

で、次に本棚から引っ張りだしてきたのがこれ。って、これかヨ。もうすっかり古典です。多くのプログラミングの解説書が、これの構成を真似している、というくらい古典。今から20年以上前、アセンブラとN-BASICしか知らないときに読もうとして、{….}の表記とかがピンと来なくて挫折し、数年前に(また)古本屋で買っていた奴。そのときざっと読んでみて、結局やっていることはBasicと変わらないなぁと思っていたけれど(でも全然Cとかできない)、今回ソースまでじっくり読んでみて、目からウロコが落ちました。レベルが全然違うのね。ものすごい濃ゆい情報が圧縮されていました。マクロのこともばっちり書いてあって、そんなのBasicじゃ考えたこともないな。RubyとかJavaについて理解するために、実はこういうのが基礎教養になっている気がする。

さて、この半年読んだ(読もうとした)プログラミング関係の本が、こんな感じ。本文中のソースは読んでみたけれど、ぜんぜん試していないのがダメダメ。当たり前だけれど、次の課題はそれ。となると、こういう古い本じゃなくて、自分の作ってみたいプログラムに向いたプログラミング言語について読みたくなる。そうすると、どの言語でどの本を読むか難しい。ただ一応、オライリーのRuby本とJavascript本は積んである。「新しくプログラミング言語を覚えたいときに行うべき10の練習問題」みたいなのを自分なりにやってみるのも良いんじゃないかとも思います。
さてさて、後半戦はどうなることやら。

(写真と本文は関係ありません)


この半年読んだ、プログラミング関係の本」への4件のフィードバック

  1. 芳賀

    こんばんは。内輪の者です。

    Rubyを推薦します。
    私の場合、C言語→VB→VBA→Java→JavaScript、Perl→PHP→Ruby!の順で言語に触れてきましたが、Rubyに至って初めてプログラムを書くのが「気持ちいい」という感覚を知りました。

    例えばC言語で10回のループを表すのに以下の様に書くのが典型的です。
    for( i = 0; i < 10; i++){
    ループ中の処理
    }
    これがRubyだと例えば次のように書けます。
    10.times do
    ループ中の処理
    end
    伝わりますでしょうか、この気持ちよさ。
    Rubyは人の言葉のようですよね。Rubyは機械ではなく人間の思考にマッチするように設計された言語。だから気持ちいいのだと思います。

    ですのでRuby以外の言語で何かプログラムを組む。それも割りと本格的にエラー処理や柔軟性を考慮しているものを作る。
    その後にRubyに出会うというのが私のお勧めする最高のコースです。敷居が高ければRubyからいきなり入ってしまっても良いと思います。

  2. catch

    芳賀さん、こんにちは。
    コメントありがとうございます。

    Rubyは楽しいですよね。
    私のプログラミング体験は、

    N-Basic => アセンブラ(80系)、Fortoran => QuickBasic、VisualBasic => VisualBasic.NET => Java => (現在に至る)という感じです。VisualBasic.NETあたりも、それ以前の延長線上で考えると、分からないところが多いんですよねぇ。Newコマンドとか。さらにC言語を通らずに、他の言語を見ようとしているので、ピンとこないこと仕切りでした。

    そのうち書きますが、オライリーの「初めてのRuby」が非常に面白うございました。この本で芳賀さんが例に上げてくれた「10.times do」は、10回繰り返すではなく、10オブジェクトのTimesメソッドを呼び出していて、その引数として「ループ中の処理」を引数として渡していると説明していました。引数の中にコードが書けるのです。目からうろこが落ちる思いでした。これは、Lisp由来の機能だそうです。Javascriptにも、こういう無名関数機能がありました。

    プログラミング言語はおくが深いです。

  3. 芳賀

    >この本で芳賀さんが例に上げてくれた「10.times do」は、10回繰り返すではなく、10オブジェクトのTimesメソッドを呼び出していて、その引数として「ループ中の処理」を引数として渡していると説明していました。

    ご存知だったんですね。(やっぱり)
    処理を引数として渡せるというのは本当衝撃的ですよね。JavaScriptも仰られる通り無名関数を渡せるのですが、書き方が旧来の書き方で、如何にも処理を引数として渡しているように書きます。

    JavaScriptの例(Prototype.jsを使用した場合)
    collection.each(function(e){
    ループ中の処理
    });
    上記の例ではcollectionオブジェクトに定義されているeachメソッドの引数として無名関数を渡しています。

    一方Rubyは先述の通り、メソッドに引数を渡しているように見えません。何故か?それはRubyはメソッド名の後に付ける()を省略できるというのが1つの理由だと思います。
    ですので10.times doは10.times() doの()を省略した書き方ということになります。
    そしてもう1つの理由はRubyにはブロックという機能があることです。処理をメソッドの引数として渡すなら、JavaScriptのように以下のように書くのが旧来の書き方かと思います。
    10.times( ループ中の処理 )※1
    Rubyでは※1のように書くことも可能ですが。10.times doは※1と違います。プログラマは処理を意識的にメソッドの引数に渡す必要がないのです。それを可能にしているのがRubyのブロックです。

    話が長くなってきたのでブロックの詳細は割愛しますが、先の2つの理由により人の言葉のように書けるのだと思います。

    結局何が言いたいのかというと、できることはJavaScriptやLispと同じでもRubyはより人間の思考にマッチした、手軽な書き方ができるということです。(このことはRubyを作ったまつもとさん自身も自画自賛してました。)

    それでは呑みの席でルビ話ができることをお待ちしています。

  4. ピンバック: Placebo Effect » この半年読んだ、プログラミング関係の本 + 1ヶ月

コメントは停止中です。