今日も微速転進

ここではないどこかへ

改めてC++ 入門書を読んだ話(書評:基礎からしっかり学ぶC++の教科書)


スポンサーリンク

f:id:atuyosi:20171230204946j:plain:w320

いつものごとく途中まで読んでストールしていた本をどうにか読了。

C++については便利なC言語という感じでマトモに勉強してこなかったので勉強し直すために入門本を買いました。

C++で書かれたライブラリのソースコードを読むうえで「何これ」というケースが結構あったのと、ここ数年の拡張に全くついていけてないので。

ちゃんと勉強し直そうというそういう試み。

概要

基礎からしっかり学ぶC++の教科書 C++14対応

基礎からしっかり学ぶC++の教科書 C++14対応

購入したのは紙の方。索引を除いて約310ページぐらいで程よい分量。

Visual Studio Community 2015 を前提にしているが、独自拡張の類はないのでXcodeでもいいし、テキストエディタとC++14をサポートしたコンパイラがあれば問題ない。

前半のサンプルについてはpaiza.io などのブラウザベースの実行環境でも大丈夫。

ただし、操作方法の説明はVisual Studioのみ。

全13章+付録なので1章から3章はさらっと目を通して残りの章を一日2章ずつ読んでいけば理論上は一週間で読み終わる*1。程よい分量でコンパクト。

どうしてもリファレンスが必要なら素直に他の本を。

Kindle 版について

いつの間にかKindle版が提供されており、しかもリフロー形式。サンプルなので冒頭しか確認していませんが、表とサンプルコードは画像になっているようです。

サンプルを見る限りではちょっと図の文字が小さい印象だけど固定レイアウトではない点は評価したい。

Kindle版を販売するなら事前に予告して欲しかったです。

日経BPのサイトに電子書籍版が存在するようだけど、特定環境でしか動かない独自アプリという時点で論外……。

対象読者について

明記はされていない。「はじめに」という冒頭文にはC++の入門書としか書いてないし、

本書はC++の入門書です。文法を厳密に記述するのではなく、構文とそれを利用するサンプルコードを提示することによって、C++を紹介しています。

と書いてある。

記述は丁寧でわかりやすく、良書なんだけど対象読者の絞り込みが甘い気がする。唐突に「1の補数」とか出てくるし*2

情報系の大学1、2年生あたりか電気か情報系の高専生あたりがターゲットか?

多少はコンピュータの仕組みを把握していること前提にしているように見える。

特色

表紙の「プログラムの読み書き」というフレーズはなかなかいいと思う。

第1章のセクション1.3で開発手法やライセンスに言及している。初心者向けの本でそういう話にページを割いているのは珍しいし、時代の変化を感じる。何より好感が持てる。

インターネットの普及とオープンソースソフトウェア*3の活用が当たり前の時代だからこそ、という感じです。

C++らしい話は9章、10章。

12章、13章はスルーしました。

気になった点

章構成についてはちょっと疑問。先に変数とクラスの初期化まで説明してから演算子の説明をする方が無理がないと思う。 特に7章は9章を読まないとよく分からない。

プログラミング関係の本の場合、どうしても項目同士に関連があるので説明が前後する箇所がどうしても出てくる。
その辺りをどう折り合いをつけていくか、悩ましいところ。

他の言語と違ってC++という言語がマルチパラダイムとかなんとか、多様なアプローチをサポートしている関係で説明がややこしくなるのは理解している。

いっその事どこか一つの側面に限定して解説してから他のパラダイムの話をするとか、もう一工夫ほしいと思った。「はじめに」で「文法を厳密に記述するのではなく〜」と書いているのだし。

特に複数の記法があるもの*4のうち、特定の書き方をメインで使うならその記法だけ説明して他の記法は付録に押し込むとか。

その他・細かい点

  • 本文(地の文*5)に使われている英数字の書体の関係で、乗算(*)とかビット反転(~)の記号が見難い(特にp.52、p.53)
  • 「1の補数」という表現は出てくるが「2の補数」および「補数」自体の説明がない
  • 浮動小数点数についての注意に「問題があることを理解して利用」ではなく「浮動小数点数同士を比較するな」ってはっきり書くべきでは?(pp.62-64, 3.2.12)
  • 配列の説明は6章なのに5章で言及していたりする
  • 右辺値参照の説明がイマイチ(p.108に『10.2節で現実的な例を示す』とあるが、10.2節に右辺値参照という単語は出てこない)
  • サンプルコードの例示において、インクルード文を省略するのは構わないが、変数定義は省略しないで欲しい*6
  • regex_iteratorのコンストラクタの初期値がシーケンスの終端を表すという説明がない(7.2.4のサンプル)

C++の入門書なので暗黙的にプログラミング経験者を前提にしているのか、どのあたりを想定しているのか明記されていないのでなんとも言い難い。

情報系の学科か電気系なら補数の話は教わるとは思うけど。

右辺値参照というのは「コピーを抑制する実装パターン」を安全かつ手軽に使うためのメタプログラミング的なシンタックスシュガーに見える。
「このオブジェクトは将来不要になるんでそこんとこよろしく(コピーするなよ?いいね?)」的な。

この辺りは消化不良気味。

装丁・組版など

薄い紫と黒の二色刷り。紫系の配色はどうかという気もするが、読みにくいということはない。むしろグレーと黒の二色刷り*7よりは格段にいい。

カラー印刷ではないので本文に使用されている紙も光沢のない普通の紙。個人的にはこういう紙の本が好き。

正直なところカラフルな本は書店では見栄えがするかもしれないけど地味に脳に負担がかかる木がするのであまり好きじゃない。

前述の通り本文の英数字用のフォントはもうちょっと視認性に配慮が欲しかったところ。プログラムのソースコードを記載しているところ(紫背景)のところは問題ないので余計に残念。

重箱の隅をつつくようだけど、演算子の優先順の表(p.60)の、記号と記号の間のスペースが狭いのもいまいち。++など二文字の演算子もあるので演算子同士の間のスペースは広く取って欲しかったところ。

その他・参考情報

読み進めるうえで説明不足な箇所があったりするので、適宜ググルなりリファレンスを確認するといいと思う。

cpprefjp - C++日本語リファレンス

まとめ

色々と書きましたが基本的には良い本かと。対象読者をきっちり絞り込んで、そのうえで章構成をもう少し工夫すればもっといい本になったのではないかと思いました。

別にコンバイラを作るわけではないのだからこの本で十分。

C++14対応のリファレンスとしては江添氏の著作かな。

C++11/14 コア言語

C++11/14 コア言語

自分の母国語の本というのはいいですね。時間さえ確保すれば割とスムーズに読める。

割引セールにつられて洋書を購入*8してもちゃんと読み終わらなかったり、よく理解できずに日本語で解説しているページを参照することがままあるので。

関連URL

*1:もちろん無理でした。後半へ行くほど難解です。

*2:ビット演算子のところ(p.55)。しかも一回だけ。2の歩数とか説明しないの?

*3:文中ではフリーソフトウェアという表記にとどまっている。ここはハッキリ踏み込んでオープンソースソフトウェアと表記して欲しかった

*4:オブジェクトの初期化とか

*5:白背景の箇所

*6:for文の終了条件が変数になっていて終了値がわからない箇所があったりする。その都度、ダウンロードしたファイルを確認するのは地味に面倒。

*7:しかもソースコードの背景がグレーで見辛いと感じた

*8:英語の勉強を兼ねていたり、そもそも和書がないとか、翻訳が遅い、あるいはイマイチとか色々あるのですが

広告