Code Complete第2版〈上〉―完全なプログラミングを目指して (単行本)

CODE COMPLETE 第2版 上 完全なプログラミングを目指して

CODE COMPLETE 第2版 上 完全なプログラミングを目指して

とりあえず上巻読了。読もうと思ったきっかけは

もっと具体的なアドバイスをすると ――プログラミング スタイルに関する良書を読むといいだろう。まず『Code Complete』は読んどくべきだ。

http://capsctrl.que.jp/kdmsnr/wiki/bliki/?CodeAsDocumentation

なんだけど、この本は確かにコードを書く人(に限らないかもしれないが)は読んどいたほうがいいかもしれない。個人的にはとくに第4部ステートメントを興味深く読みました。以下面白かった部分をメモ。

p449

有能でないプログラマは、いろいろな組み合わせをでたらめに試して、うまくいきそうなものを見つけようとする傾向にある。うまくいくと思っていた方法がうまくいかないと、有能でないプログラマは不等号を<を<=に変えてみたりする。それでもうまくいかないと、ループインデックスに1を足したり、ループインデックスから1を引いてみたりする。このような方法をとるプログラマは、そのうち正しい組み合わせを偶然に見つけるかもしれないし、もともとのエラーをますます悪化させるだけかもしれない。このでたらめなプロセスから正しいプログラムが生まれたとしても、プログラマにはなぜプログラムが正しいのか見当もつかない。

昔やったな。。。

p486

コンピュータサイエンスの教科書における問題の1つは、再帰のくだらない例を掲載していることである。よくあるのは、階乗の計算やフィボナッチ数列の計算だ。再帰は強力なツールであり、それをこのような状況で使用するとはあきれてものが言えない。仮に、私の部下が再帰を使って階乗を計算しようものなら、別のだれかを雇うだろう。

ひえー。首にしないでー。

p500

ソフトウエア開発の分野は、プログラマがコードを使ってできることを制限することによって大きく前進してきた。

確かに。Javaにgoto文(ラベルを使って似たようなことはできるけど)や多重継承(interfaceがあるけど)やポインタが無い(というと語弊があるかもしれないがfreeしなくてもGCまかせにできるよぐらいの意味で)し、フレームワークでさらに制限かけること(これも語弊があるかもしれないが定型的なコードはフレームワークにまかせて本質的なコーディングに集中するというぐらいの意味で)によって生産性を上げてきたと思う。

p560

「プログラミングの複雑さ」を表す1つの基準は、プログラムを理解するために頭の中で一度に整理しなければならないオブジェクトの数である。この頭の中でのお手玉は、プログラミングの最も難しい側面の1つであり、プログラミングが他のアクティビティよりも集中力を必要とする理由でもある。プログラマが「不意の割り込み」に怒るのにはそうしたわけがある。お手玉を披露している大道芸人に、ちょっと買い物袋を持っていてと頼むようなものなのだ。

わかるなー。

p560

「有能なプログラマは自分の脳みそがほんのちょっとしかないことを十分承知している。だから、とても謙虚な姿勢でプログラミングにのぞむ」(Dijkstra 1972)。だからといって、脳みその量を増やして驚異的な複雑さにも対処できるようにする、というわけにはいかない。驚異的な複雑さに対処することはとうてい無理なので、複雑さをできるだけ緩和する措置を講じなければならない。

ですよねー。