アスキー・メディア・ワークス、ISBN978-4-04-867689-2
新人プログラマが身に付けるべき知らないと恥をかくプログラミングの常識集。
著者へメール
この書籍については、さまざまなご意見がさまざまなところに書き込まれているようです。
まったく話題にもならないたくさんの本があり、また批評もされない多数の著者たちがいるなかで、
拙著または著者に関心を持っていただいたことにまずお礼を申し上げます。
本書については、書籍のはじめに「本書では、初歩のプログラミングの学習を終えて、
プログラマが実践的なプログラミングに臨む時に知っておかなければならない重要な事項をわかりやすく解説します。」
と明示してあるように、プログラミングの初心者を対象にしています。
具体的には、はじめてのプログラミング言語を勉強したか、これから何か言語を学ぼうとしている人、
ふたつめの言語を選ぼうとしているひと、あるいは、
「どうしてデータ型などというものがあるのだろう?」とか、「オブジェクトって、いったい何?」という
素朴な疑問を抱いている人を対象とした書籍です。
また、筆者の「常識」を読者に押しつけようとするものではなく、プログラミングの常識とは何かという
ことについて考えるヒントにする本です(このことは書籍の中でも重ねて説明しています)。
プログラミングに限らず、対象によって説明の仕方、取り上げる範囲、そして「何が正しいか」は異なります。
身近な学校教育という場を考えてみても、小学生には「人はみな平等です」と教えます。
しかし、それは理想であって、実際に差別は存在し、したがって、教えている対象を考慮しなければ、
小学校で教えていることは嘘ばかりである、ということになります。
実際、大学生ならば、「実際には人は平等ではない」という前提にたって、社会問題などを考える必要があることは
誰にも異論のないことでしょう。
同様に、プログラミングでも、初歩のプログラミングの学習を終えた人と、
より高度なプログラミングをマスターした人を対象にするときでは、解説の範囲も表現もすべて異なります。
本書について、文章の真意を理解しないで書き込みをされていることも多々あるようです。
たとえば、「プログラミング言語はどれがよいか?」というトピックの主眼は、本文で
「多人数を運ぶならバス、荷物をたくさん運ぶならトラック、少人数でドライブするなら小型セダンと、
目的に応じて最も良い自動車の種類が違う」と例をあげて説明していますが、プログラミング言語においても
用途やプログラマの経験あるいは環境等々によって適する言語は異なり、
特定の具体的な条件を示したうえでなければ「プログラミング言語はどれがよいか?」という質問自体がナンセンスである、
というのがこのトピックの主眼です。
したがって、それに関連する説明は、それぞれのプログラミング言語がおおよそどのように異なるかわかればよい
という立場で書いており、具体的な解説についてはたとえば環境(近くにすぐに質問できる先輩がいる、
特定の言語の学習環境が際立って整っている、特定の種類の言語をすぐに使う必要がある、など)に
よって異なるという前提で書かれています。
また、このトピックは、これから最初のプログラミング言語を選ぼうとしているか、
ふたつ目のプログラミング言語を選ぼうとしているような初心者で、
車にバスから軽自動車までいろいろな種類があるように、プログラミング言語にもまた
さまざまな用途の言語があるということを認識していない読者を想定して解説しているものです。
すでに複数のプログラミング言語をマスターしている読者を対象としたときには、
自ずと表現も記述するレベルや範囲も変わってきます。
そのほか、本書について間違いであるかのように指摘されているところの多くも、本書の意図を理解できれば、
指摘したことが逆に誤っていることに気づくでしょう。
(もちろん、筆者が至らないために、間違いや勘違い、あるいは校正の際の見落としなども
あるかと思います。そのようなことがないように努力はいたしますが、
お気づきの点があれば冷静にご指摘いただければ幸いです。)
また、本書の批判の多くは、本書が初心者プログラマ向けに書かれていることをまったく無視した、
きわめて無責任な意見が多く、そのような書き込みが何の批判もなく行われていることは残念でなりません。
良識のある人たちは、想定読者レベルを無視した無責任な意見は無価値であると考え
頭から相手にしていないのでしょうが、初心者はそのような判断ができないので惑わされる可能性があるからです。
書籍の批評ということについて、ひとつ例を示して筆者の考えを明らかにしましょう。
B.W.カーニハン/D.M.リッチーが書いた「プログラミング言語C」という本があります。現在は第2版となり訂正版として出されていますが、
日本語翻訳初版から現在まで、プログラミング言語の本として名著のひとつとみなされてきました。
実際、私もC言語についてまだほとんど何も知らない日本語訳初版が出たときにこの本を一読して、
「Hello, world」の出力のしかたから始まり、徐々に高度な内容に導いてゆく書き方に自然となじんで、
まるで読み物を読むように一気に読了し、同時に、C言語とはどういうもので、何ができて、何ができないのかを理解しました。
日本語訳初版は間違いも多く、記述の仕方もプログラミング言語の書籍としては最良とはいえないものでしたが、
C言語についてまだほとんど何も知らない私にとって、まさに「プログラミング言語C」はとても良い本でした。
また、プログラミング言語の仕様という概念が今ほど確立していなかった当時、C言語のコンパイラを実装する(開発する)
ようなレベルの人にも、「プログラミング言語C」はバイブルといってよいほど重要な本でした。
ところで、今、誰かが「プログラミング言語C」と同じようなスタイルでC++かJavaの本を
きわめて丁寧に間違いもほとんどなく書きあげて私に献本してくれて私個人の率直な意見を求められたら、
それを読んできっと「冗長で退屈である」と答えるでしょう。
なぜなら、私はC++やJavaについて講義(授業や講演)をする程度にすでに知っているから、
「プログラミング言語C」のような書き方の本を改めて最初から読むのは苦痛にさえなりかねないからです。
しかし、その本について公開するレビューを書いてくれと頼まれたら、
「これからC++(またはJava)を学習する人にとってはとても良い本である」と推奨するでしょう。
なぜなら、まだ何も知らない人が、まるで読み物を読むように一気に読んでその言語を理解できれば、
それはとても素晴らしいことだからです。
読む人のレベル、その本の主眼とすることとその表現のしかた、本が出版されたときの状況などによって本の価値というものは異なり、
それが本というものです。
インターネットが普及して誰でも自由に発言できるようになったのは良いことですが 一部のお暇をもてあましている方々が、拙著に限らず、 さまざまな著作や著者に対して誹謗中傷に近い書き込みを匿名で行っているのが見受けられます。 このような状態が続けば、 誤解を受けることを承知の上で初心者向けにあえてやさしく解説するような著者は書く気をなくし、 どのようにでも解釈できる(あるいはすでに理解している人しか理解できないような)難解な 文章を書く一部のいわゆる権威だけが著者として残る結果となり、 出版文化や書店を含む出版界はますます疲弊し、いずれ現在のように多種多様な書籍が出版できなくります。
どうか、初心者の方々は無責任な批判や的外れなレビューなどに惑わされずに、 まずは本を読んでみて(買わずに図書館で借りてでもかまいません)、自分自身で判断してくださるようお願いいたします。
さて、無責任な批判や的外れなレビューを書き続けている人には、次のように申し上げておきます。
批判する人間にもし本当に能力があるのであれば、匿名で無責任な批判をする前に、
C++、Java、アセンブリ言語、JavaScriptのようなスクリプト言語、XMLやXAMLのような記述言語を
含めて、5種類上の言語で実際に動作するプログラムを作成してそのソースコードを広く一般に公開し、
他人の批判を受けてみてから、
自分で完璧な本を書いて出版社に持ち込んで出版してみてください。
そうすれば、著作、あるいは出版というものがどういうものか、少しはわかるでしょう。
もし、自らは何も創造しないで、単に無責任な批判や的外れなレビューを続けるなら、 そういう人は、いずれ何年かのちに(そのときまでボケずに、人間社会というものを学んで人間として少しは成長したとしたら) 自分がしてきたことが無意味であり、そのようなことだけに時間を費やした自分自身の人生そのものが 無価値であったことに必ず気づくはずです。しかし、その時になって謝罪していただく必要はまったくありません。
なお、著者はあらゆる書き込みに対していちいち反論することはできません。 また、一部の低俗な掲示板のようなものを読んだり書き込んだりするのは 時間の無駄なので、私に限らずほとんどの著者は、そのようなものに書き込むことはもちろん、 目を通すこともありませんのであしからず。
日向 俊二