「『初めてのプログラミング(第2版)』(パイン(著)・長尾(訳))」
コンピュータ・インターネット
『初めてのプログラミング(第2版)』
クリス・パイン(著)
長尾 高弘(訳)
2010年
オライリー・ジャパン
☆☆☆
Pine, Chris. 2009. "
Learn to Program (Second Edition)". The Pragmatic Programmers, LLC.の翻訳本。日本生まれのオブジェクト指向スクリプト言語Rubyを用いた、プログラミング自体が全く初めてという初心者を対象としたプログラミング入門である。Rubyのバージョンは1.8系(1.9系を用いて学習しようとすると、「日本語を含んだ文字列」の処理等いくつかの違いが問題になるだろうが、翻訳者による訳注で比較的丁寧に対応がなされている)。
内容は本当に初歩の初歩からで、Rubyのインストールに始まり、数値と文字列、変数、入出力、条件分岐と繰り返し(ここで一休み)、配列、メソッド、再帰とソート(ここまでが基礎編、以降は実践編か)、ファイルの読み書き、クラス、クロージャ、といったところ。全15章構成で本文150ページ程度と、極めてアッサリした内容。「基礎的な『考え方』を平易に語り聞かせる」というコンセプトで、構文や文法的な知識を網羅的に伝授したり、便利なクラスやメソッドをあれこれといろいろ紹介してくれるような本ではない。
以前この本の
初版本を読んでその平易さに感心したことがあり(「小学生でも理解できるんじゃないか」という印象だった。…と言うか、実際に子供を対象としたチュートリアルなのかもしれない)、この第2版が出たことを知った時から是非読みたいと思っていた(ちなみに、初版本と第2版では翻訳者が変わっている)。「第2版への序文」で著者自身述べている通り、第2版には、初版本や本書の元になっているWEBサイト(「
Learn to Program, by Chris Pine」)に寄せられた多くの質問が大きく反映されている。本当の独学初心者がハマってしまいがちな点について、うまく補足されていると思う。
ただ、そのことによって初版本よりどうしても小難しい話が増えてしまっており、若干対象年齢が上がってしまったかな、という印象。プログラミングに必要な概念の中には「○○のようなもの」と伝統的に比喩によって説明されるものがいくつかあるが、その比喩がピンとこない場合に更に比喩で説明されてもますます混乱してしまうばかりである。本書では、そういった問題に関してはなるべく比喩を用いずに説明する、という方針が採られており(だからと言ってもちろん、いきなりハードウェアの話をするワケではないが)、初版本に感じられた「特筆すべき平易さ」は若干失われてしまったように思う。この点、初版本の方が良かった、という評価もあるかもしれない。
逆に初版本より良いと思うのは、本文中で示される練習問題に対する「解答例」が付録として付された点だ(本文150ページに対して、この付録が50ページもある。ただし、そのことの代償として(?)、練習問題自体が減ってしまったが…)。著者による「合格答案」(そこまでの内容でできるはずのプログラム例)と「私の答案」(本書の内容を超えて、普段の著者ならこうするというプログラム例)を見比べると、なるほど、これがプロの書くプログラムというものか、といろいろ発見があった。何のことはないただのプログラムなのだが、ちょっとずつちょっとずつシンプルで、かつ美しいのだ。
文章は完全に口語体。先生がマンツーマンで直接教えてくれているような親しみやすさがある反面、著者の語る通りにそのまま日本語に翻訳してあるため、話の流れ(思考の流れ)が逆にわかりづらくなってしまっていたり、欧米流のユーモア感覚に戸惑うことも多かった(ジョークがジョークに見えないので、意味がわからず(もちろん笑えず)ちょっとイライラする(笑))。何を言っているのかよくわからないときには、原著の元になっているWEBサイトの対応する箇所(英文)を確認してみた(ただし、WEBサイトと本書(原著も)の内容は細部において若干異なっている)。
私が手に入れたのは(第2版の)「初版第1刷」のもので、(よりによって)プログラム例にばかり誤植(と言うか「誤り」)が多々残されていたのは残念だったが、出版社のWEBサイト(の
本書のページ)に正誤表が掲載されている。正誤表には載っていない誤植もまだあるが、練習問題を自ら解きながら中盤まで読み進めることのできた読者なら、後半にある誤植に関しては自分でエラーの原因を特定し対処できるようになっているだろう。
ところで、プログラミングについて「しゃべり言葉」で教えてくれるこの本を読んでいると、プログラミング言語で用いられる単語の多くが英単語であるということは、普段英語を用いて生活している人にとってはやはり直観的なものなんだろうな、とあらためて思う。「オブジェクトのメソッド」なる概念を子供(例えば小学生)にどうやって教えようか?と考えてみると、日本語で教える場合とではまるで事情が異なっているように思う。大人の私でさえ、「Object」「Class」「Instance」「Method」と言われてもピンとくるものは何もない。オブジェクト指向の用語でなくても、「Constant」「Variable」「False」「Integer」「String」なんてものですらおそらくプログラミング入門を読まなければ知らずにいたであろう単語ばかりだし(しかし、「定数」「変数」「偽」「整数」と日本語で言われればすぐわかるものばかりなのだ(「ストリング」を除くなら(笑)))、逆に知っている単語は、「Index」なら「索引」、「Value」なら「価値・価格」、「Argument」なら「議論」、「Method」なら「方法」と(プログラミング用語としては)ちょっとずつ的外れなので、かえって用語の理解が難しくなってしまう。私は未だにどうして繰り返し処理で「For」という単語が使われるのか、そのニュアンスがわからない。日本語話者にとって本当に直観的な用語は「Do」と「End」と「If」くらいなものじゃないだろうか?(プログラムを「Run」する、だって子供に教えるのはツラい。)英語話者にとっては、これらは「そういうものだ」と仕方なく受け容れなければならないようなものではなく、日常感覚そのままに使えるものなのだろう。口語的に説明する、という著者のスタイルを見ていて、そんなことを思った。
本文150ページ程度(他に、「序文・イントロダクション」として10ページ程度、付録が50ページ程度)。

0