そうかと思えば、カーニハン&リッチーのプログラミング言語Cが選択されていたりする。K&R は歴史的リファレンスに過ぎず、入門者に読ませるべき代物ではない。私に言わせれば、むしろ禁忌本である。いつぞやあるMLで、"K&R is king, and the kind was dead!" というメッセージを見かけたことがあるが、まさにその通り。繰り返すが、日本にまともな書評システムは存在しない。私の言葉も含めて、他人の言動を盲信してはならない。最後は、自分の頭で判断することだ。これが肝心。
C言語の聖典と言えば、その開発者の Brian Kernighan と Dennis Ritchie による『プログラミング言語C ANSI規格準拠』、いわゆる K&R 本なわけですが、それを入門者に薦めるというのはいかがなもんかというお話。僕も同意。実は僕も K&R 本は持ってたりしますが、ほとんど読んでいません。入門者には難易度が高い上に、版が古いと、幾度の規格変更を伴って進化してきた C 言語が故に、現在の規格とは食い違った記述なんかが多々見られるという意味でも、これを入門者に薦めるわけにはいかない、というか、真に受けた正直者な人は、せっかく芽生えたプログラミングへの好奇心を見事に刈り取られてしまうでしょう。
同じように、僕が好んで使う Perl ですが、聖典と言えば『プログラミングPerl』ことラクダ本なわけですが、こちらは改訂を重ねて比較的新しいバージョンについても正確に記述されているとは言え、やはり難易度の点から入門者にはお薦めできません。プログラミング言語の開発者が直々に書した本というのは、その性質上「聖典」と呼ばれることが多いわけですが、間違っても入門書ではありません。
ときどき「Perlを勉強したいんだけど、何を読めばいいですか?」といった問いに対して「ラクダ本」と即答する人がいます。からかっているんだろうというのは分かってても、見てて胸が痛い。入門者というのは、上級者からの言葉をたとえ冗談でもすぐ真に受けてしまうものです。(だいたいお前は最初にラクダ本読んだのかと小一時間...。) 確かに C や他のスクリプト言語を難なく操れるスキルを持った人にとってはラクダ本が必要且つ十分(僕はそう思わないけど)なのかもしれませんが、入門者にはやはり入門者向けの本があります。
知人が良く「プログラムを書けるようになりたいけど、何から手をつけていいかわからない」という声を漏らします。本当にそう思ってるならネットなり何なりで調べればいいというのももっともですが、折角興味を持っているのだから、何か手ほどきができないかといつも思うのです。最初は軽い気持ちかもしれませんが、面白くてどっぷりはまって、もしかしたらプログラミング仲間が一人増えるかもしれないという淡い期待を抱きながら。
ということで、Perl プログラマになるためのお薦め書籍をちょこっと紹介してみます。
プログラミングは初めてとか、大学の授業でちょっとやっただけという方には技術評論者社から出ている『すぐわかるPerl』がお薦めです。技術書において"すぐわかる〜" とか "できる!"といった謳い文句を含む書籍は得てして駄本が多かったりしますが、この本は、本当に基礎の基礎からすごく丁寧に解説してあり且読み手に考えさせるようなストーリーで進んでいく構成になった名著だと思います。僕が Perl を学ぶにあたって一番最初に読んだのも、この一冊でした。
『すぐわかる〜』が終わったら、次はオライリーのラマ本こと『初めてのPerl』が丁度良いでしょう。
入門書の次も入門書かよ!と思われるかもしれませんが、このラマ本は、基礎の根底に根付くお話、いわば基礎以上の基礎をしっかり教えてくれます。ファイルハンドルやコンテキスト、正規表現といった多少入門者には敷居が高くなりがちな内容について、詳しく解説してあるものの、入門書であることを配慮して、内容が難しくなりすぎないように書かれているすばらしい本です。初級から中級へのステップアップにぴったりです。
おそらく基本的な Perl スクリプトを記述するには、この二冊を繰り返し呼んで手を動かせば確実に身につくかと思います。
実はここからが問題で、僕も経験したのですが、初級を抜け出して中級以上のことを学ぼうとするととたんに敷居が高くなります。特にネストしたリファレンスやオブジェクト指向プログラミングなどが躓きやすいポイントではないかと。これらについて詳しく解説してある本は色々あるのですが、個人的には『Effective Perl』が良いかなと思ってます。僕も今でもときどき読み返す、名著です。
ただ、やはりリファレンスやオブジェクト指向プログラミングなどに関しては、他の言語と比べてもその扱いが多少特異な部分があるため、なかなか一筋縄にはいかないと思います。
そこで一度ブレイクタイムということで、僕としては C言語 や Java を学ぶことをお薦めします。といってもそれらの言語で立派なアプリケーションが書ける必要はなくって、C からはポインタの概念、Java からはオブジェクト指向の基礎を学んで Perl に戻ってくると、このあたりの話が驚くほどすんなり入ってくるでしょう。(僕がそうでした。) そのまま Java や Ruby 辺りから Perl に戻ってこない可能性も大ですが。(笑)
ここまで紹介した本はすべて文法解説が主ということもあり、実用的なレベルに達するためには多くのサンプルコード、いわば Perl における問題料理方を覚えなければいけません。そこで激しくお薦めなのが『Perlクックブック―Perlの鉄人が贈るレシピ集』です。
あまりの分厚さに一瞬戸惑いを覚えますが、全部読む必要はありません。興味のあるトピックを拾い読みしていけるような構成になっています。クックブックのいいところはまさにそれで、"文字列" とか "配列" とか、"リファレンス" あるいは "オブジェクト指向プログラミング"、"プロセス間通信" といったように、トピックごとに話が完結している点です。苦手な分野や強化したい分野についての章を一から読んでいくと、丁寧な解説に加えて実践的なサンプルコードがたくさん読めるので、確実に力になるかと思います。
多分、ここから先はもう上級者の領域です。それこそラクダ本ですとか、『実用Perlプログラミング』を読み漁って言語仕様を追求するもよし、
あるいは『Perlデータマンジング―データ加工のテクニック集』など応用に主眼を置いた書籍でテクニックを学ぶもよし、といったところでしょうか。
これを読んでいて、「CGI絡みの書籍がないなあ」と思われた方も多いと思います。それには理由がありまして、正直オライリーの『CGIプログラミング』以外にお薦めできる書籍を僕は知らないためです。
どうも Perl + CGI な書籍は、商業的な理由からか Perl と CGI を一緒にお勉強しましょう的なものが多く、そのほとんどがどっちつかずの中途半端な内容になっていて、良いものが少ない、というかそういった類の本の中に良著が埋もれてしまっている印象を受けます。このネズミ本は、Perl の基礎を理解していることを前提に、Perl による CGI プログラミングに特化した内容になっていて読み応えのある本なのですが、いかんせん CGI 入門としてはちょっと敷居が高いのです。
ただ、『すぐわかる〜』や『初めての〜』あたりを読んだあとであれば、どういった書籍が良著でどういったものが駄本なのかといった判断は、立ち読みなりなんなりで判断することができるのではないかと思います。Perl を学んだらやっぱり CGI を書いてみたい! という方は、是非自分の手で納得の行く本を探してみてください。
ちょこっとのつもりがなんだかたくさん紹介してしまいました。:P 僕は今持っている知識のほぼ 70% 〜 80% は書籍から得ているのではないかと、自分で思っています。それだけに、こういった類の書籍を紹介するにあたってはついつい力が入ってしまうのです。
追記:
これまで紹介したような一冊完結型の書籍ではないですが、WEB+DB Press に連載されていた PerlStyle が、個人的にすごくお薦めだったりします。blog.bulknews.net の宮川さんの記事です。ちょっとバックナンバーが手に入りづらいのが難点ですが、CPAN モジュールを使った様々なシチュエーションにおける Perl ソリューションが分かりやすく記述されていて、色々なテクニックを吸収することができると思います。(個人的にはあの流れで書籍化して欲しかったりするのですが) あと、宮川さんと言えば Perl オブジェクト指向プログラミングメールマガジン のバックナンバーも必見ではないかと。:)
追記(2):
最初にラクダ本を読むかどうか、のくだりに関してちょっと追記。このエントリの nob seki さんのコメントやきたさんの日記にあるように、ラクダ本が唯一の選択肢だった頃には、定番の入門書 = ラクダ本だったのだと思います。当然ですけど。ということで、"時間も経って有用なプログラミング入門書籍がたくさん出版された中で敢えてラクダ本を最初の一冊として選ぶのはおすすめできない"ということを書き添えておきます。
勉強になります。私はPerl関連は必要最低限しか読んでいないので。でも購入だけして適当に流したら会社のPerl使いに提供しております。
「これ1冊でオッケー」みたいな本がやっぱり売れるのでしょうね。最初は自分のやりたいことを知りたいだけなので仕方ないと思うのです。次に「読めば読むほど知らないことが増える。だから読む」という永久機関が発動するかどうかでしょうね。
なるほど、やっぱりコンピュータ関連の書籍というのは、充実してきているのですね。「元」サンデープログラマーで、今ではほぼ門外漢になりつつある自分ですが、その当時、これだけ書籍がそろっていたら、もしかしたら違う道を進んだのかな?なんて思います。
というのも、確か15年前ぐらいに初めてK&R本を読んだときには、他のCの本よりもよっぽどタメになった記憶があります(他の入門書は超How-toで辟易した記憶が)。
ラクダ本も知らないうちに第3版になっているようですが(最近買いました)、最初のラクダ本を読んだときには「(ちょっと説明が冗長だけど)これ一冊で足りるからオトクだなー」とか思った記憶が。まあ当時はPerl本がほとんどなかったからかもしれませんが…。
時間を見つけて、実践的なサンデープログラマーに戻りたいな、という思いを込めつつ。
>>1 swd さん
銀の弾丸はないのだということに気づくまでには意外と時間がかかるものなのだと思います。特に Perl などのスクリプト言語を使うと、ある程度基本さえ理解すればやりたいことはたいがい実現できてしまうわけで。綺麗なコードや保守性の高いコード、或いはスケーラビリティを考慮した設計といった話題になってくると、本質的な理解が必要不可欠になってきて永久機関が発動するのでしょう。(笑)
>>2 nob seki さん
15年前に K&R 本ですか...なんか時代を感じる...って seki さんそんなに僕と年齢はなれていないような。うひ。
ラクダ本は初版と比べると、現在のものはボリュームが全然違うという点も入門者に向かない理由じゃないかなとも思います。
[3] Posted by: naoya at November 5, 2003 12:29 PM [返信]私がCやperlを勉強したのもnob sekiさんと同じく,14,5年前なんですが,やはり当時と今とでは入門書の質と量がまるで違うんですねぇ.
当時はそもそも翻訳の品質もダメダメで,K&Rなんか日本語訳読んでもちっとも分からなかったので結局原著の方を買ってようやく理解できたり.
入門書の選択肢が増えた分,ダメな入門書も増えたであろうことは容易に想像できる訳で,こういう風に,実際にその本で勉強した人がどのようにその本を活用すべきかコメントされているのは初心者にとって非常に有用だと思います.
じつは、すこしまえにラクダ本を買うまでは、Perlの本は1冊も持ってなかったんですが、やっぱりいろいろありすぎてこまるので、こういう記事があると参考になりますねー。
Perlは特に、巷にあふれているCGIスクリプトなどにひどいのが多いので、その辺で先に進めない人も多いんじゃないかと思ったりもします。
その点、Rubyなんかははじめからオブジェクト指向だからいいんでしょうね。
ぼくがなにか本をセレクトするとしたら、Perlの本じゃないけど、『珠玉のプログラミング』はこれからプログラミングをやろうとしている人にはすごくお勧めです。
>>4 きた さん
当時の様子が分からないので想像になってしまうのですが、K&R とかラクダ本とかしかない時期に、それを読んでこの世界に入ってきた人たちというのは、相当に自分で考える必要があって、それはそれで力が付いたんじゃないのかなーとちょっと思いました。
入門書が増えたのはいいのですが、ただ読むだけの物ってのはやっぱりあまり良くないですね。読んでる本人に考えさせるように書かれている本というのは、やっぱり限られてくるように思います。
>>5 とおる。 さん
巷にあふれているのがひどいというのは確かにそうかもしんないですね。あとは Google で Perl で検索しても、あまり良いサイトがひっかからない辺りもちょっとあったりして。いや、たくさんあるんですけど、なんか多くの中に埋もれちゃってる気がします。
珠玉のプログラミングは何度も買おうと思っていまだ手付かず。次はそれを買ってみよう。その前に、積読の山をなんとかしなければ...。
[6] Posted by: naoya at November 5, 2003 10:54 PM [返信]
珠玉のプログラミングは私も気に入って紹介しました。
http://tsundoku.info/2nd/archives/000022.html(リンク付き:p
これは万人にお薦め出来る貴重な本ですね。
積読の山は気にしても仕方ないですよ!