今まで読んだ中で最低の本: 肖鋒, 長崎孝夫, 数値流体解析の基礎 - Visual C++とgnuplotによる圧縮性・非圧縮性流体解析 2020/1/9

あまりにも最低の本だったので, Amazon にもレビューを書いたが, 消されるかもしれないし, ブログにも記録しておく.

次のツイートのツリーにも怒りの記録がある.

以下, レビューで書いた内容.

レビュー: 2020年のソースコードではない

多少のプログラムは書いたことがあり, C も少し書いたことはあるが C++ は完全未経験であることをお断わりしておく. サンプルコードを推奨の Visual Studio 2019 でビルドしたら次のようなエラーが出る.

書名には「Visual C++」とあり, サンプルコードの拡張子も cpp. しかし付録の「A.3 プログラムの実行」では「Microsoft Visual Studio の C (あるいは C++)」と書かれていて, C++ というよりも C 前提なのだろうか. しかし上のような C++ 対応とは思えないようなエラーが出ている. まだ読み終わっておらず, まさにコードが出てくるところでこのレビューを書いていて, まさにビルドを通すための作業をがんばっている. とてもつらい.

ちなみにコードは (Visual Studio で作っているから?) 文字コードが Shift_JIS で, コメント中のスペースには半角・全角スペースとタブが混在していたり, インデントもタブだったりスペースだったりする. 工学系の研究室のコード管理はひどいというのは聞いているが, これはその片鱗なのだろう. とてもつらい.

追記: コードサンプルが本当に最低であることがわかった.

1
2
*define i_max 100
double u[i_max]

とした上で「u[i_max] = u[3];」という未定義動作のコードが境界条件として設定されている. 著者も最低だが, 編集者が何も仕事をしていない. 他にも描画に関して, 古代の gnuplot ではアニメーション機能が無く外部プログラム経由で随時描画していたそうで, その手法をいまだに踏襲していて, 2020 年のコードではない. 正気の沙汰とは思えない. 1 番簡単な移流でさえ何なのかさっぱりわからない. 本を買ってここまで損したと思ったことはない. ただただ最低としか評価できない. 評価 5 をつけた人は何を考えて評価したのか. 本当に読んだのか.

他の欠点がひどすぎてかすむ程度の欠点だが, 本のコードではインデントが消えていて, 本当に読みにくい. こういうところにも編集者の無能さ加減が見える. コロナ社の本はもう 2 度と買いたくない.

修正版レビュー

多少のプログラムは書いたことがあり, C も少し書いたことはあるが C++ は完全未経験であることをお断わりしておく. 結論から書くとまずプログラムがひどく, 本もまともな体裁を保っていない. 著者が研究用に書いて公開しないコードというならいくらでもひどくて構わないが, 商業にのせていいレベルの品質のプログラムではない. コード中, インデントは不揃いで, コメント中のスペーシングには半角・全角スペースとタブが混在しているし, インデントもスペースとタブが混在している. そして本に載っているコードでインデントが消えていたりするし, 公式で配布されているサンプルを推奨環境の Visual Studio 2019 でビルドしようとしても通らない. ここまでひどいと物理・工学的な記述もひどいのではないかと疑わざるを得ない. とりあえずコードについては Python で書き直したバージョンを GitHub にあげてある: 興味がある方はぜひ見てほしい. (C 言語版は購入者しかダウンロードできないようにしているようなのでアップしない. この対応もコードの品質がひどいから公開したくないのでは, とさえ勘繰りたくなる.)

以下, もう少し詳しく書いていこう. まずタイトルがあまりにもひどい. Visual C++ と書いてあるが, Visual Studio 2019 を使っているだけで, 実際には C++ ではなく, C でコードが書かれている. それにも関わらず, ファイルの拡張子は cpp になっている. Gnuplot の部分もひどい: 描画はアニメーションを作れなかった太古の Gnuplot の流儀で計算しながら随時 Gnuplot で描画させている. 最終的な動画作成には postscript を使っている. ここが私の環境ではうまく動かないのだが, postscript はほとんと何も知らないので, 調整のしようもない. 上記のような理由であまりにひどいので著者に問い合わせる気も失せる. 2020 年のコードとは思えない.

ビルドについては, サンプルコードを推奨の Visual Studio 2019 でビルドしたら次のようなエラーが出た.

他にも 15 程度のエラーが出た. よくわかっていないが, C でビルドすべきなのに C++ としてビルドしようとして起きたエラーなのかもしれない. C ならまだしも, C++ も Visual Studio もよくわからないので追求は諦めた.

ちなみにコードは (Visual Studio で作っているから?) 文字コードが Shift_JIS で, コメント中のスペースには半角・全角スペースとタブが混在していたり, インデントもタブだったりスペースだったりする. 工学系の研究室のコード管理はひどいというのは聞いているが, これはその片鱗なのだろう. とてもつらい.

他にもコードのすごいところを書いておこう. 例えば次のような配列外参照が平然と書いてある.

1
2
3
4
5
6
*define i_max 100
double u[i_max]

// 中略

u[i_max] = u[3];      //  計算領域右端の境界条件

境界条件を配列外参照で書くというの, 研究用コードなら動けばいいで終わらせてもいいが, 商業用・教育用のコードで書くことか? いくら研究能力を買われてこその話とはいえ, 著者は大学の教員であり, 教育者でもある. これが教育者の態度か. 工学者であってプログラマーではないといったスタンスが許されるのか. 100 歩譲って著者は工学の研究者であって教育者としての誇りを持っていないとしよう. 次の問題は編集者だ. こんなコードを平然と通せる編集者は理工学の専門書の編集としての仕事をしたつもりか. 税込でほぼ 4000 円, 専門書としてはともかく, 日本では一般の本として決して安くない値段の本でこのクオリティというのは読者を愚弄している. ここまでひどい本に評価 5 をつけた人は何を考えて評価したのか. 本当に読んだのか. 安くもない専門書に関して, ここまでひどい編集者が編集した本にはあたりたくないし, コロナ社の本はもう 2 度と買いたくない.