日向 俊二さんへ

経緯を知っている人以外には無益なエントリなので、そういう人はこのエントリは無視しちゃってください。

本書について間違いであるかのように指摘されているところの多くも、本書の意図を理解できれば、 指摘したことが逆に誤っていることに気づくでしょう。

http://www5.ocn.ne.jp/~seablue/res/ckp.html

あの本の意図を説明してくれれば話は早いと思うんだがなぁ・・・
で、「本書の意図」というのが「初心者向けなんだからきっちりかっちり正確な表現じゃ伝わりにくい。だから厳密に言えば間違ってる部分もあるけどわかりやすさ優先しました」的なものだとしましょう。これはアリです。いいことだと思います。
で、間違いであると指摘した部分は以下の通り。

  • 完全に間違っているもの
    • マクロのバグ
    • C# の struct のパフォーマンスについての誤解
    • 独自の用語
    • 習得が容易なはずなのに初心者向きではないという矛盾
    • メッセージという用語の誤用
    • .NET の Substring が 1 オリジンという誤解
    • データ型の目的
    • 浮動小数点数
    • 言語別の null の違い
    • 特殊な値
    • 「より良い」と著者が感じる「これはひどい」コード
    • 式と文の混同
    • 優先順位を変える括弧が演算子かどうか
    • SQL 関連
    • 最適化の考え方
    • デバッグという言葉について
    • 例外オブジェクトが消滅するかどうか
    • 構文
    • 警告の扱い方
  • 間違っているとは言い切れないもの
    • 著者の考え
    • 間違った構造化へのアプローチ
    • 入れ子関数と匿名関数 (無名関数)
    • クラスの設計の理論
    • 完全なオブジェクト指向言語
    • 名前付けに関して
    • コメントアウト
    • より精度の高い計算が行いたい場合
    • 「スマートな」コード

で、ですね。「本書の意図」を汲み取ったとして、この中で取り下げてもいいかな、と思っているのは、

  • 習得が容易なはずなのに初心者向きではないという矛盾
  • .NET の Substring が 1 オリジンという誤解
  • 浮動小数点数

の 3 つくらいなんですよねー。
最初のは、「習得」の範囲がどこまで考えているのかが著者と自分で全然違う、ということでしょう。
2 つめのは、正誤情報で誤りでした、と認めているので。それにしたってひどい間違いだと思いますけどね。本当に勘違いしていたとしか思えない。
3 つめのは、もっといい書き方はあるだろうけど確かに初心者に向けてはこの程度の説明はありだろう、と考え直しました。


だけど、ですよ。「本書の意図」を汲み取ったとしても、バグはバグだし、初心者は struct なんて自分で作るべきではないし、独自の用語は避けるべきだし、用語の誤用はもってのほかだし、ひどいコードはひどいし、小手先の最適化は初心者にとって悪だし、デバッグしないのが一番良いデバッグだとか小学校からやり直せレベルだし、初心者ほど警告は無視すべきじゃないし、コードはひどいし、なにがスマートなコードなのかわからないわけですよ。
指摘した部分が間違いだ、というのなら、どこがどう間違っているのかぜひとも教えてほしいものです。
現在Google で「プログラミングの常識」でぐぐると一番上に来るみたいなので、これに対して著者自ら反論することは意味があると思います。

また、本書の批判の多くは、本書が初心者プログラマ向けに書かれていることをまったく無視した、 きわめて無責任な意見が多く、そのような書き込みが何の批判もなく行われていることは残念でなりません。 良識のある人たちは、想定読者レベルを無視した無責任な意見は無価値であると考え 頭から相手にしていないのでしょうが、初心者はそのような判断ができないので惑わされる可能性があるからです。

http://www5.ocn.ne.jp/~seablue/res/ckp.html

批判というか、意見は付きましたよ。コメント欄で批判というか、突っ込みがいくつか入っています。
というかですね。「初心者プログラマ向けに書かれている本できわめて無責任な記述が多く、そのような本の著者が批判を受け止めずに開き直る」のは残念でなりませんね。
日向さんこそ、想定読者レベルを無視した記述が多く見受けられるのは気のせいでしょうか・・・?
初心者はそのような記述の真偽が判断できないのです。いや、判断しようともせず、本に書いてあることを鵜呑みにするほうが多いでしょう。

誤解を受けることを承知の上で初心者向けにあえてやさしく解説するような著者は書く気をなくし、 どのようにでも解釈できる(あるいはすでに理解している人しか理解できないような)難解な 文章を書く一部のいわゆる権威だけが著者として残る結果となり、 出版文化や書店を含む出版界はますます疲弊し、いずれ現在のように多種多様な書籍が出版できなくります。

http://www5.ocn.ne.jp/~seablue/res/ckp.html

いや、だから「誤解を受けることを承知の上で初心者向けにあえてやさしく解説する」のはいいのです。
でも、「あなたの本はそうじゃない」と言っているのです。
たとえば、最適化の手法として、

  • 関数のマクロによる置換
  • 別モジュールにして実行時チェックをはずしてコンパイル
  • SSE や SSE2 の使用
  • 整数に変換して計算後、再変換
  • 並列処理
  • アラインメントの調整

を挙げていますが、初心者に対してこれらの説明はやさしいですか?
自分の知識を初心者に自慢したいだけのように思います。
「ユーザーのマシンは遅い(P.185)」のに、「現在のコンピュータには、多くの場合、マルチコアの CPU が搭載されています(P.191)」というのも、単に並列処理と言いたかっただけとしか思えません。
読者不在のまま、自己満足に浸って書いたような印象を受けるのですが、違いますか?

批判する人間にもし本当に能力があるのであれば、匿名で無責任な批判をする前に、 C++Javaアセンブリ言語JavaScriptのようなスクリプト言語XMLXAMLのような記述言語を 含めて、5種類上の言語で実際に動作するプログラムを作成してそのソースコードを広く一般に公開し、 他人の批判を受けてみてから、 自分で完璧な本を書いて出版社に持ち込んで出版してみてください。

http://www5.ocn.ne.jp/~seablue/res/ckp.html

本を書かなければ広く一般に公開したことにならないんでしょうか。
bleis-tift の名前で、数は少ないですけど Web に公開してますよ。どう書く?org とか*1、このブログとか、Twitter とか。
それに対して日向さんのコードは本のサンプルしか見たことがありません。しかも、そのすべてがひどいものばかり。

もし、自らは何も創造しないで、単に無責任な批判や的外れなレビューを続けるなら、 そういう人は、いずれ何年かのちに(そのときまでボケずに、人間社会というものを学んで人間として少しは成長したとしたら) 自分がしてきたことが無意味であり、そのようなことだけに時間を費やした自分自身の人生そのものが 無価値であったことに必ず気づくはずです

http://www5.ocn.ne.jp/~seablue/res/ckp.html

本を書くことだけが創造というわけではないでしょう。
無責任という言葉をどういう意味で使っているのかは知りませんけど、的外れだとは思ってませんし、これからもその意見は変わらないでしょう。
読者を見下すような人に何を言っても無駄かもしれませんけど、自分がしてきたことが無意味だと思うことはないんじゃないでしょうかね?
とりあえず、Google 検索ではトップになるみたいですし。


さて、なんかいい感じに見下されたところで、こちらも日向さんのことを見下しておきましょうかね?
散々引用してきたこのページ、まともな技術者の書く HTML(?) じゃないですね。
「これはひどい」と言わずにはいられないな!

<HTML> 
  <META http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> 
  <META  name="description" content="コンピュータサイエンス"> 
  <META  name="keywords" content="コンピュータサイエンス,計算機科学,プログラム,プログラミング"> 
<HEAD> 
<TITLE>プログラミングの常識</TITLE> 
</HEAD> 
<center> 
<BODY> 
<P> 
<h1>プログラミングの常識</h1> 
<p>アスキー・メディア・ワークス、ISBN978-4-04-867689-2<br /> 
新人プログラマが身に付けるべき知らないと恥をかくプログラミングの常識集。
<br /> 
</p> 
<P> 
<IMAGE SRC="ckp.jpg"  ALT="表紙写真"> 
<P> 
</center> 
 
<left> 
<BR><P> 
<p>書籍購入は<a href="http://www.cbook24.com">こちら</a><a href="http://www.amazon.co.jp">こちら</a></p> 
<p>著者へ<a href="mailto:shunji_hyuga&#64;infoseek.jp">メール</a></p> 
<hr /> 
<h3>筆者からのコメント</h3> 
以下略
</BODY> 
 
</HTML> 

*1:まぁどう書く?org に投稿してるコードはネタですが