武書房

GREEのレビュー機能が終わるので今後はこっちに書きます。

基礎からしっかり学ぶC#の教科書 改訂新版

あまり興味ない言語であったが、必要に迫られそうになったので急ぎ「教科書」を買い、2020/6/17~7/19のおもに土日で読了。

いつも小学2年生レヴェルの感想を書き散らすよう努めているが、いちおう業界人なので……今回は「レヴュー」的な文章を書いてみる。世界のために。

こんな人におすすめ

すでに他言語(C++JavaRubyPython など)でのプログラミング経験があり、「今度仕事でC#使うことになったんやけど、ぱぱっと読めて一通り理解できる本ない?!」みたいな(私のような)人には向いてると思う。

おすすめできない人

逆に、プログラミング未経験です、この本でこれから勉強しようと思ってます!という人には…薦めにくい。その人が向学心が強く、不明点を自力で調べられる(それ以前に不明点を認識できる)人なら大丈夫か。あとは暗記が苦にならない、「理由わからんけどこういうものとして覚える!」ができる人にも役立つかもだが…そういう人は伸びしろがないだろう。「言語仕様なんか興味ない、とにかくアプリが動けばいい、なんならVBでもいい」と言うならそれはそれでアリだが。

良い点

上記おすすめポインツとかぶる話だが、C#の仕様、使い方を広く浅く説明しているのが最大の長所。

「最近の言語」と思ってたC#も実はなんと20年近い歴史があり、言語としてのヴァージョンは8.0に達した。おそらくものすごい紆余曲折を経て、C/C++/Javaから引き継いだ・変異した仕様、他のモダン言語から採り入れた人気機能、でも完全には取り込めなかった機能、などが入り混じりまくってる。それらすべてを、仕様決定の背景なども踏まえて詳説してるとたぶん1000ページでも書けてしまうだろう。

しかしそんな、辞書のように重くて8000円以上もするような本は誰も買わない。特に「Unity でゲーム作るぞ~!」みたいなキッズが手に取ってくれるとは思えない。なので400ページ弱・3000円弱のこのサイズにがんばって収めたのかなと愚考しますが、そこの取捨選択する匙加減はかなり難しかっただろうと推察いたします。

そして内容が「簡単」。説明に使われるサンプルも章末の練習問題も、なんの衒いもなくておおむねすぐ理解できる。某C言語を作った某K先生の某G言語本みたいに平然とマンデルブロ集合描けとか言ってきて「カ○○○ン、君が何を言ってるのかわからないよ!」って絶望することもない。サクサク読める、人に優しい本。

悪い点

良い点と表裏一体ではあるが、やはり説明が浅い。

例えば「6.5.2 静的コンストラクター」。経験者なら「あ~ Singleton か」ってピンと来るが、こういう仕様がなぜ必要なのか、具体的に役立つ場面、といった説明が一切ないので、初学者にはつらいかも。「使いどころわからん謎機能がいっぱいあるな…」と感じてしまうのでは。(そこを自分で調べてほしいけどね)

んで以下、読みながらメモった指摘事項です。(しんどかったー。仕事かよ)

不適切な説明

  • p.99 break の説明、図と本文が合ってない。図は「最も内側のループから抜け出す」説明だが、本文では一切触れてない。
  • p.121  keyaki? key-aki=スペースのこと? でもそれなら46じゃなくて0x20やし…と思ったら「欅」かよ……くッ、共感できねぇ…w
  • p.219 サンプルのロジックが間違ってそう。Rank=2 になるのはたまたまであり、内側(列)ループ回数は GetLength(1) にすべき
  • p.284 「参照設定」使用例なし。何のことかわからない(そもそもこのVS用語もフワッとしすぎてて検索しにくいし)
  • p.292 Func<> が説明なしで登場
  • p.292 練習問題5、穴埋め広すぎてカオス(答えが一意に決まらない)じゃない?
  • p.295 本書でここだけ図解がリッチw 親切だがやや違和感。あと銀行の客(キュー)が全員スカート短いのはなぜですか
  • p.298 First の位置に "Last"、Last の位置に "First" が来るという、何がしたいのかわからんサンプル。無用な混乱を招く。
  • p.306 「バイナリサーチツリー」の図がバイナリツリーじゃないような
  • p.308 factorial メソッドが factorial してない。こういうのは明確にダメ。遺憾! 説明の number-1 も間違い。
  • p.313 ある型パラメータに複数の制約を付けるのは「,」、複数の型パラメータに制約を付けるのは「スペースか改行」。のサンプルの「改行」位置が悪くて理解しづらい。よりによって。
  • p.314 split だけ "Hello World" 関係ないのがちょっと残念
  • 全体 変数名は意味がわかるように付ける、といった模範を示すべき。「教科書」なら。
  • コーディングスタイルがVS形式でも、もちろんK&Rでもないのが「教科書」としてはどうなん?

誤字・脱字

  • p.42 using System; してるのに System. 残ってる
  • p.241 コンストラクタ名が Competition じゃなくて Olympic になってる。気持ちはわかるが。
  • p.246 Method、method 表記揺れ
  • p.314 Compare の例 ×J、○I
  • p.316 サンプルの出力値に「日」が抜けてる
  • p.317 first, last 逆。太郎が苗字になってる
  • p.318 変装
  • p.351 つかめにくい
  • p.373 第6章の解答 バグってる。2が存在しない問題の答えになっててずれてる
  • p.379 第10章の解答 練習問題1 答えの数合ってない
  • 全体「必ず必要」「一番最後」という冗長表現が散見される。日常会話では許容されるが、文章としては格調が落ちる。

その他、気に入らん点は多々あるけど、それらは本の出来というよりはC#の仕様に対するものなので、別途まとめよう…。

では関係各位、お疲れ様でした。