The King's Museum

ソフトウェアエンジニアのブログ。

『基礎からしっかり学ぶ C++ の教科書』を読んで

『基礎からしっかり学ぶ C+の教科書』という本を読んだ。

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

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

著者の方に贈っていただいたもので、こういう経験は初めてだ。 記念に読んだ感想を書いておこうと思う。

よくよく考えてみると、自分はこういうちゃんとした入門書を使ってプログラミング言語を学習した経験がほとんどない。 いつもなんとなくその言語を触れるようになって、発展的な書籍を読む、というパターンがほとんど。 だから、友達に「プログラミングができるようになりたいんだけど、オススメの教科書ある?」と聞かれるとけっこう困ってしまう。

そういうわけもあって、入門者にとってこの教科書が分かりやすいのか、という点は評価できない。 その代わり、少なくとも昔 C++ を触ったことがあるエンジニアとしてどう思ったか、という視点で少し書いてみる。

"macOS"

本の冒頭にこんな一文があった。

... Windows だけでなく、macOS やLinux でも本書の内容は試せます。

macOS の表記が正しく "macOS" になっている。 こういう記述があると「この本は信頼できるな〜」と安心して読み進められる。 それに最新の情報が書かれていることも期待できる。

macOS の話はあくまで象徴的な話で、肝心の C++ についてもきちんと書かれてる。 C++14 に対応したコードが掲載されているのはとても助かる。 仕様、コンパイラごとの実装の違いについてもケアされてる。 入門者向けだからといって、妥協された知識を提供されている感じはしない。

細かなことも書かれている一方、きちんと現場で使える話題も載ってる。 ポインタを使ってリンクリストを実装しましょう、なんて現場で使われないような課題はない(最近だと面接で使われること多いので有用な側面もあるけど)。 特にページが割かれているのはライブラリの使い方(コンテナ、文字列、入出力、スレッド)やメモリ管理(スマートポインタ、コピー、参照、ムーブ)など実践的なところ。 バージョン管理やライセンスについて触れられているのもポイントが高い。最近の教科書では普通なのかもしれないけど。

一方、「プログラミングの経験がそれほどなく、C++ も初めて」という読者を想定した場合に説明が細かすぎるかも、と感じるところがある。 自分のようにコンピュータの一般的な知識があり、数年の開発経験に加えて C++ もある程度分かる、という人間だからこそ「ふむふむ」と読めるのでは?と思う箇所もところどころ。

何も知らない学生がこの教科書を与えられたとしてすべてを理解できるのだろうかと、少し不安を覚える。 まあ、すべてを理解しなくてもいいのかもしれないし、学生は何より若いからどんどん吸収していくだろうけど。

C++ と Java

でも一つ書いておきたいのは、この不安の原因はこの教科書では無く、C++ という言語の大きさと複雑性によるところが多いのかもしれない、というところ。 読めば読むほど複雑で大きく冗長な言語だと思えてくる。

C++ の大きさは、後方互換性は守りながら、性能面での妥協をせずに言語の抽象度を上げてきた結果です。 後方互換性はなくてもいい、プログラムの性能は低くてもいい、言語の抽象度は低くてもいい、このいずれかに該当しない方とっては、C++は学ぶに値するすばらしい言語だと思います。

(『はじめに』から)

筆者がこのように述べるように、C++ はとても興味深く、後方互換性があり、(正しく書けば)性能の高い、素晴らしい言語だ。

でも、いつのまにか自分にとっては複雑で重たい言語になってしまった。

以前いた会社でアンケートをしたとき、好きな言語の1位が C++ だった。嫌いな言語の1位は Java だった。 詳細は覚えていないけれど、当時、自分は C++ を書いていたし、きっと C++ に投票したのだろう。

今の会社では、C++ をかけるプログラマは一部だけで、Java は全員書くことができる。 そもそも今の会社では C++ を書く機会がない。自分もいつの間にか Java ばかり書く日々だ。

以前は自分でメモリ管理ができる C++ が好きだった。今はもうそこまでやりたくない。 コピー、参照、ムーブを意識し、ローカルストアとフリーストアを使いこなすプログラミングが自分にできると思えない。

いつの間にか歳をとったんだろう。信頼できる他人に仕事を任せられるのならそうしたい。 GC と JVM がある程度のメモリ管理と効率性を提供してくれる Java の居心地は、そこを積極的に離れるほど悪いものじゃない。

またいつか

それでも、この業界にいれば C++ をやろう(or やらなければならない)という時がくるかもしれない。

それがいつになるか分からないけど、その時、きっとまたこの本を手に取ると思う。C++2x なんてものが出ていればきっと改訂されたこの本が出ていると思うし。

今、もしあなたがそういう状況なら、『基礎から学ぶ C++ の教科書』はとてもおすすめですよ。

2017/08 追記

電子書籍版がないのが唯一の欠点ですね、と書こうと思ってやめてしまったんだけど、どうやら Kindle 版も出たようです。

(c) The King's Museum