ハッカーのたのしみ―本物のプログラマはいかにして問題を解くか

ハッカーのたのしみ―本物のプログラマはいかにして問題を解くか

売れ筋ランキングハッカーのたのしみ―本物のプログラマはいかにして問題を解くか  
ハッカーのたのしみ―本物のプログラマはいかにして問題を解くか

ハッカーのたのしみ―本物のプログラマはいかにして問題を解くか


価格:¥ 3,570(税込)
エスアイビーアクセス  (2004-09)
/ジュニア,ヘンリー・S. ウォーレン/
単行本 321ページ
売れ筋ランキング:43011
珠玉のプログラミング―本質を見抜いたアルゴリズムとデータ構造
Binary Hacks ―ハッカー秘伝のテクニック100選
Short Coding ~職人達の技法~
省メモリプログラミング―メモリ制限のあるシステムのためのソフトウェアパターン集 (Software patterns series)
Write Great Code〈Vol.1〉ハードウェアを知り、ソフトウェアを書く

知人に指摘されるまで、ずっと「嗜み(たしなみ)」と空目していました。

この本に書かれたことは、Hackerにとっての「楽しみ(たのしみ)」であり、同時にごく当たり前の「嗜み(たしなみ)」であるとも感じました。

素晴らしい内容であり、星の数による評価はもちろん五つです。買って良かったと思います。「計算をビット演算のレベルに落として色々やる」という内容(しかも洗練されたもの)です。濃い勉強になりました。そんな本なので、レビューで普通に褒めるのでは正直言ってつまんないし熱意のある初学者にとって参考にならない。だから、このレビューでは対象読者層の説明と些細な不満の吐露をやろうと思う。

(1)
本書の内容は普通の大学の教科書レベルの話ではありません。そんなものよりも高度な内容です。「Cは難しいからJavaが好き」なんて学生や教員にとっては今は買うべき本ではありません(難しくて読めないでしょう)。

(2)
本書を読むためにプログラミング言語やプロセッサの知識が強く要求されるわけではありません。どちらかと言うと論理数学の知識や数学の証明を文脈を自分で埋めながら読む技術が要求されます。と、いうのも、「事実」は書かれていても「証明」は省略されているんですから。後者ができるならプログラミングの知識はそれほど要らないと思います。

(3)
一部の章は非常に読みにくいと思います(一章とか)。評者の推測では、この読みにくさは直訳どころか逐語訳が行われていることに起因します。僕は「あ、ここはきっと"if and only if"を逐語訳したんだろうな」などと推測しながら読みました。日本語の文章を英語に置き換えて読むとわかりやすいと思います。訳が悪い章が最初に来ているので、最初だけ読んで挫折しないように注意してね。
内容は間違いなく星5つ。ですが、あえて、欠点をあげつらってみます。

この書に挙げられたテクニックは確実に計算量の係数を減らしますが、次数を減らせるかというと違うことも多いです。そもそも計算する必要があるのかについては疑問を挟まないスタンスをとっています。

未熟なプログラマ -つまり私のような- は、アルゴリズムの選択を間違えて、データ量の定数倍の時間ですむはずの計算を二乗・三乗にしてしまうとか、そもそもやらなくてもいい計算をやってしまうとか、直視したくない放蕩をやってしまうものです。そんな無駄に気付かせてくれるのは、もっとありふれたアルゴリズムのアンチョコだったりします。Knuth の The Art of Computer Programming まで引っ張り出す必要はありません。高校教科書さえあれば旧帝大に合格できるように、3000円程度の和書をマスターするだけで中級のプログラマになれます。

土台から考え直すときには、むしろ別の本を探す方がいいです。土台を固めた上で最後の無駄を削る、つまり真のハッカーにこの書は役に立ちます。


 単純なビット演算のトピックス集と侮ること無かれ。

 コードから贅肉を殺ぎ落とす工夫、例えばビット演算をすることによってバッファ変数を用いずに入れ替え(C/C++では不可能だ!)、空いたレジスタに次の演算のための変数を読んでおくことが出来たなら、あるいは秒間数千回ものループのなかで条件分岐を一段削減できたなら・・・

 単純な処理であっても、大量のデータを前に真に効率がよいコードを書ける人は少ない。Cの汎用性に馴染んでCPUのマニュアルを見ないどころか、下手したら配列の添え字の割り当て方すら考えていない人のほうが多かったりする現状では、こういう本の存在は貴重で、読まないことは先人の業績に対する冒涜的ですらあろう。

 プログラマをアーキテクトに導く、貴重な知恵の宝庫だ。


アルゴリズムの解説書は、たいていソートや文字列検索のトピックスに終始しているが、この本は違う。より根本にある算術や論理に費やされるインストラクションレベルの“体脂肪率”(=時間)削減を、極限まで極めた解説を行っている。だからといって、アセンブラを知らないと読めない本では全くない。むしろ上級のCプログラマに無理なくアセンブラの教養が身に着く。行列の転置やビットマップのウエイト算出といった、あたりまえに普段使っているコードの高速化を正面から解説してある解説書はあまりにも少なかった。巻末の論文一覧がさらに有用である。2×2行列どうしの積が7回以下の乗算でできることを既に知っている人や、J.L.ベントリーあたりの本が好きな人はぜひ!
ハッカーのたのしみ―本物のプログラマはいかにして問題を解くかを楽天で検索