『Webを支える技術』と『コーディングを支える技術』を読んでいた

ここ数日はこちらの本を読んでいました。

その前には、こちらを。

Webを支える技術 -HTTP、URI、HTML、そしてREST (WEB+DB PRESS plus)

Webを支える技術 -HTTP、URI、HTML、そしてREST (WEB+DB PRESS plus)

どちらも大変よく出来た本で(というと偉そうだけど)、「なるほど〜」とか「わからね〜」とか、でも後者にしても文章が壊れてるから、とかではなくて、わからない理由は明確になりながら(つまり、どこがなぜわからないのかはわかりながら)読み進めることができたのでそれもけっして悪い意味ではなく、いずれにせよ、読む前と比べて結構変わったのではないか自分、という感じであります。

どちらも入り口的な側面もあるけど、同時に「一旦通りすぎたらオシマイ」というようなものではなくて、何度も戻ってくる「ホーム」のような本になるのでは、と思います。
それも、ポケットリファレンス的な意味での「何度も戻ってくる」ではなくて、軸足というか踏み台(良い意味で)みたいに、次に行くための堅固な土台みたいな意味で、と思っています。

『Webを支える技術』の方を読んでいるときにつくづく思ったのは、文章が綺麗だなあ、ということで、ぼくの先入観としては、いくらかの(少なからざる)技術書というのは、日本語が本来実現できるはずの論理性をけっこう低い優先度で扱っているというか、ないがしろにしているというか、平たく言うとテキトウな文章がデフォルト、みたいに思われることがあり、それって編集者のせいじゃん、とか言われがちでもあることを思えば、思いっきりブーメランなのであまり言いたくもないのだけど、でもそれにしてもなあ・・っていう、もうちょっと「てにをは」なり、係り結びなり、ちゃんとしようよ基礎的なところ! みたいな部分で引っかかりがちなのですが、本書においてはそういう違和感みたいなものがほとんど、とくに前半においてはパーフェクトと言えるほど感じられず、いや良い日本語の本だな、とそっちに関心するほどでした。

で、そのせいばかりでもないとは思いますが(でももちろん関係あるはずですが)、未知の内容に対して不安を感じすぎることなく読み進めることができ、とても良かったです。

『コーディングを支える技術』に関して、こちらは「日本語が綺麗だなあ」というのとはまたちょっと違って(もちろん綺麗じゃないわけではないけど)、とにかく「論理性が高くて素晴らしいなあ」という感慨を抱きながら読みました。『Webを〜』における「綺麗」というのは「引っかからない」という感じに近いのだけど、ここで言う「論理的」というのは「安心感」とか「希望」というのに近くて、科学的というのか、再現性があるというのか、文章で言われている一つ一つに根拠が明確にあり、それがまた明確に示されているので、雰囲気に流されず、すぐに分からなかったところでも一つ一つ「自分で確かめられる」という感覚があり、そういうのがすごく良かったし、それゆえにというのか、非常に楽しく読み進められました。

大体、こういう本(というのが「どういう」本なのかは説明しづらいですが)というのは前半はグルーヴしていてもだんだんグダってきたりするのだけど、本書は後半になっても勢いというかイキの良さは変わらず、というよりむしろそれが増してすら感じられ、かといって締まっていた部分がユルむとかいうこともなく、適度なバランスで完走されている感じが(あるいはそれはページの多すぎなさにも関係しているのかどうか)また良かったなと。

ところどころに、というより比較的多めに、だと思うのだけど喩え話が使われていて、それが結構ことごとく機能しているというか、線的な論理世界だけでゴリゴリ進めていくのでもなく、そうやって映像的な(喩え話というのはようは映像を共有するということだと思うのだけど)手法を上手く使って読者を最後までいざなっていく感じもまた良かったです。

サンプルコードその他も多彩で、勿論その大半を触ったことも聴いたことすらなかったりしたけど、だからといって関心が薄れるということもなく、へえ〜、へえ〜、などと読んでいけたのは、それが一本の歴史小説のように、ストーリーを追っていくように構成されていたから、というのもあると思いました。といっても、ぼくは普段歴史小説なんてまるで読まず、フラグメンタルな短篇小説集とかの方が(ここでイメージしているのは単に村上春樹の最新作ですが)好きなタチなので、やはり本書の構成というか流れじたいが(歴史小説的だからというよりも)肌に合ったのかなと。

もう一つ、これは本書に関わることではないけど、ぼくは昨年5月ぐらいから趣味のプログラミングをやや本腰入れて(というか)始めたのだけど、8月頃から「Perl入学式」に通い始めて、
http://perl-entrance.org/

それが今年の3月末で一区切りだったのだけど、それにちょっと頑張って通い続けていたのが、かなり効いていたなあ、と思いました。その経験がなかったら、だいぶ本書から得られるものは(少なくともこの短期間では)違ったのではないかと思っています。唐突ですがPerl入学式の関係各位、ほんとにありがとうございます。

で、最後になりますが、ちょっと「あれ」と思った部分があったのでついでに記しておきます。『コーディングを支える技術』についてはすでに詳細な正誤表が出ていて(こちら)、でもそれも一応チェックした上で、これ誤植なのか、それともぼくの理解が違うのかな、という部分があったので、それについて。(※下方にその後の進展についても記しています)

具体的には、p192から始まるPerlのパッケージに関するサンプルコードで、同書には以下のようにあるのですが、

sub new{
    my $class = shift;
    my $values = {"count" => 0};
    bless $values, $class;
}

もしかして、こうではないのか? と。

sub new{
    my $class = {"count" => 0};
    bless $class, "Counter";
}

ちなみに、そのように書いた僕の手元の同スクリプト全体はこのようになっており、

#!/usr/bin/env perl
use strict;
use warnings;

{
    package Counter;
    sub new{
        my $class = {"count" => 0};
        bless $class, "Counter";
    }
    sub push{
        my $values = shift;
        $values->{count}++;
        print "$values->{count}\n"
    }
}
{
    my $counter = Counter::new;
    my $c2 = Counter::new;
    $counter->push;
    $counter->push;
    $c2->push;
    $counter->push;
    $c2->push;
}

これで実行すると、

1匹
2匹
1匹
3匹
2匹

となるのですが、上記の本にある通りにやると、

Use of uninitialized value $class in bless at ...以下、ファイル名&行数
Explicit blessing to '' (assuming package main) ...同上
Use of uninitialized value $class in bless at ...同上
Explicit blessing to '' (assuming package main) at ...同上
Can't locate object method "push" via package "main" at ...同ファイル名&別行数

と出てきます。
どうなのでしょう・・? 追って、周りの人などに聞いてみるかもしれませんが。
 
追記: 著者の西尾さんからお知らせを頂きまして、本件については僕が上で書いたような関数の記述の誤植とかではなく、インスタンス作成の工程(現状「my $counter = Counter::new;」などとなっているところ)で説明していないことがあった、ということのようでした。
これにあわせて、GitHubで公開されているソースコードから、該当内容のリンクも教えて頂きまして、
https://github.com/nishio/learn_language/tree/master/langbook/chapter11#perl-4
なるほど、そうか〜! と。腑に落ちた気がします。西尾さん、ありがとうございます!(追記ここまで)

追記2: 早々に西尾さんによる補足記事がUPされました。
「コーディングを支える技術」p.196〜p.198の補足 - 西尾泰和のはてなダイアリー
大変詳しく解説されていますね。元の文章からは読み落としてしまっていた所も見えてくるようで、一層理解が深まりそうです。
こちらを拝見すると、なんだか上の拙案はだいぶあさってな感じがありますが(笑)まあでも、理解へ至る中継地点としてそれも肯定的に捉えつつ、これを機にもう少しパッケージ等々、勉強を進めたいと思います。
西尾さん、あらためまして、ありがとうございます!(追記2ここまで)

ともあれ、大変よい読書体験&勉強になりました。今後は、これらにちょっと関係ありつつ、でも少しズレたような内容のものも少しずつ読み進めたいと思っています。
候補的には、すでに購入済みの以下あたりかなあ、と思っていますが。

はじめてUNIXで仕事をする人が読む本

はじめてUNIXで仕事をする人が読む本

マスタリングTCP/IP 入門編 第5版

マスタリングTCP/IP 入門編 第5版

以上です!