著作一覧 |
なんか精読し始めたら止まらなくなってしまった(ぱらぱら読むのではだめだなぁ)。
この本は抜群に優れているではないか。さすがだぜストラウストラップ。
というわけで、続き。
第3章の練習問題4は間違っている。
誤)「整数値を1つ入力させるプログラムを記述する」
正)「整数値を2つ入力させるプログラムを記述する」
第4章の「コンピュテーション」はおそらく白眉だ。ストラウストラップ自身が最後のところで、ここで語り尽したみたいなことを書いている(まあ、意味は、プログラムの意味ということについてだけだが)。
しかし惜しいかな、いきなり重要なところを誤訳している。
P.83 4.2.
多分誤)「正しく効率のよいプログラムは複雑であり」
こうでなければおかしい)「正しく効率のよいプログラムであっても複雑過ぎれば」
重要な主張はプログラマーの仕事を、「計算を次のように表現することだ」と順位付けしている点にある。
・正しく(プライオリティーNo.1)
・単純に(プライオリティーNo.2)
・効率よく(プライオリティーNo.3)
したがって、複雑さよりも単純さを尊ぶ。よくわかる。
そしてP.84がすばらしい。引用する。
正確さ、単純さ、効率のよさに関心を抱くのは、コードを他人のために記述し、それをうまく行うことに責任を負った瞬間だ。つまり、プロになることを決意したら、その責任を負うのは当然のことだ。
いや、本当に、この言葉をすべてのくそコードの山をひり出した連中にのしをつけて送りつけてやりたい。
これこそが肝要ではないか。
ここからP.85まで、つまり、4.2.「目的とツール」は毎日お題目として唱えさせたいくらいだ。
P.105の4.5.1.関数を使用する理由は、正しいが、今となっては弱弱しい。
この理屈(計算の論理的な分割、名前によりコードが明確化、プログラムを複数の場所から利用可能、テストが容易)の3番目を軽く凌駕する、「最近のエディターを使えば、コピー&ペーストというものが使えるのですよ? いつの時代の紙テーププログラマーorパンチカードプログラマーですか?」というごみな見解を覆すことは難しいだろう(そういう了見の連中は、論理的な分割は能力的にできないし、名前を持たないし、テストをしないからな)。
だから、関数化(モジュール化と言い換えても良い)には、もっと積極的な理由が必要なのだと考えるが、このあたりが良識的で優秀な著者の限界というものだろう。
P.117。バグ。言及していないbegin()およびend()についての問題と用語への掲載がある。おそらく元はイテレータを利用していたのを、「:」を利用したイテレーションに書き換えたことに追随していないのではないかと推測する。
C++によるプログラミングの原則と実践(Bjarne Stroustrup)
clangで本書の例やサンプルをコンパイルするには
clang++ -std=c++11 ファイル名
とする。
ジェズイットを見習え |