Seaside Laboratory

Article

コンピューター関連の推薦図書

自分が実際に買って読んだコンピューター技術に関する本の紹介。レビューを書くために再度読み直しているので新しい日付であっても古い本だったりする。

ゲームプログラマのためのコーディング技術

著者 出版社 発売日 ページ数 定価
大圖 衛玄 技術評論社 2015-06-30 256 2480 + 税

タイトルに「ゲームプログラマのための~」と冠しているが、グラフィックやサウンド関連の話は書かれていないので面食らう人もいるかもしれない。「CODE COMPLETE」や「リファクタリング―プログラムの体質改善テクニック」のような、より良いコードを書くためのノウハウをまとめた本。

ゲームプログラミングによく出てくる値の丸め処理や座標の取り扱いといった、ゲームの基礎を支えるテクニックは実践的でとても役に立つ。「組込型変数のクラス化」というフレーズは一見過激に思えるかもしれないが、制限時間を表す変数ひとつとっても、初期化、アンダーフローしないように減算、タイムオーバー判定、というように、多くの責任を持っているので、クラス化すると想像以上にコードの見通しがよくなる。

ゲームプログラムのコードが肥大化して困っている人には是非読んでほしい。

2015-08-23

C++ の設計と進化

著者 出版社 発売日 ページ数 定価
Bjarne Stroustrup ソフトバンククリエイティブ 2005-01-18 569 4000 + 税

言語設計の舞台裏に焦点を当てたものなので、プログラミングテクニックを磨くというよりは、C++ への理解を深める本。

C++ の一見奇妙に見える文法や仕様には理由 (主に C との互換性) があり、整合性を保ちながらも着実に進化していった過程を見ることができる。コードの実行効率を重視する C++ プログラマであれば、「ゼロオーバーヘッドルール」に関連する項目は読んでおいて損はない。

500 ページを超える分厚い本なので、C++ 愛がないと全て読み切るのは難しいかもしれない。

2015-09-30

ライティングソリッドコード―バグのないプログラミングを目指して

著者 出版社 発売日 ページ数 定価
Steve Maguire アスキー (Microsoft Press) 1995-03-21 261 2718 + 税

マイクロソフトのプログラマが Macintosh 版 Excel を作る過程で得た C のノウハウを惜しげもなく詰め込んだ本。大量のバグに対処できず製品がキャンセルになってしまったという苦い経験が元になっている。

C は実行効率の高い言語だが、その代わりプラットフォームによって変化する変数のサイズや、メモリの確保や解放などをプログラマが責任を持って管理しなければならない。プログラムが大きくなるにつれて管理が行き届かなくなり、最終的にはちょっとしたミスですぐにバグが発生する状態になってしまう。そうならないために必要なアサーションを使ったエラー検出や、使いやすい関数インターフェイスを設計といった、バグを未然に防ぐテクニックが紹介されている。

今となってはやや古い内容となっているが、駆け出しの C プログラマなら必読の内容だろう。

2015-10-22

Write Greate Code Vol.2

著者 出版社 発売日 ページ数 定価
Randall Hyde 毎日コミュニケーションズ 2006-12-12 637 5800 + 税

高級言語で書かれたプログラムが、実際どのような形で実行されるのかを知ることで、可読性と実行効率を両立しながら質の良いコードを書こうという内容。

前半は基礎的な内容なので、アセンブラを少しかじったことのあるプログラマには退屈かもしれないが、後半のコンパイラによる条件分岐や反復制御の最適化はなかなか知ることができない内容なのでとても興味深い。

グローバル変数はコンパイラの最適化を阻害し、巨大な関数はローカル変数 (スタック) へのアクセス速度を低下させるので、可読性の低いソースはコンパイル後のバイナリ品質も悪いという点は面白い。

この本の欠点はプログラム説明が HLA (High Level Assembly) という著者が作成した独自言語で行われていたり、機械語コードが 80x86 と PowerPC が混在しているので読んでいて疲れるところ。

2015-11-30

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

著者 出版社 発売日 ページ数 定価
Steve McConnell 日経BP社 (Microsoft Press) 2005-03-26 628 6100 + 税

執筆中・・・。

2015-12-25

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

著者 出版社 発売日 ページ数 定価
Steve McConnell 日経BP社 (Microsoft Press) 2005-03-26 628 6100 + 税

執筆中・・・。

2016-02-03

増補改訂版 Java 言語で学ぶデザインパターン入門

著者 出版社 発売日 ページ数 定価
結城 浩 ソフトバンククリエイティブ 2004-06-19 484 3800 + 税

タイトル通り Java を使ったデザインパターンの解説本。オブジェクト指向プログラミングをやっていれば当たり前のように使うパターンから、普段使う機会がなさそうな複雑なパターンまで幅広く解説されている。

「GoF 本は難しい」という噂を聞いていたので比較的やさしいといわれる本書を選んだが、デザインパターンは「プログラミングのノウハウ」と言われているだけに、馴染みのないパターンを理解するのはなかなか難しい。プログラミング経験を積み、何度か読み返すうちにだんだん理解できるようになっていくので、焦らずにわかるところから読み進めていけばよい。

Iterator や Observer のようなパターンはライブラリでも使われていたりするので、デザインパターンを知っておいた方が色々と有利なのは確か。

2016-04-25

Head First デザインパターン ―頭とからだで覚えるデザインパターンの基本

著者 出版社 発売日 ページ数 定価
Eric Freeman 他 オライリージャパン 2005-12-02 604 4600 + 税

難解になりがちなデザインパターンをわかりやすく解説した本。序章に書かれているように、各所で読者を飽きさせない工夫がされており、ページ数のわりにはスラスラと読み進めることができる。

各章には発端となるストーリーがあり、そこで発生した問題にどう対応していくかを考えながらデザインパターンを学んでいく。最初に要件を単純に満たしただけのプログラムがあり、そこに潜む問題点に対処するためにデザインパターンを適用していく、という流れ。

この本の素晴らしい点は常にデザインパターン初心者の視点に立っていることで、「たしかに有用そうなパターンであることはわかった。でもこの△△な部分はどうなってるの?」と思ったころには「素朴な疑問に答えます」というコーナーが登場し、モヤモヤしながら読み続けなくて済むよう工夫がされている。また、間違われがちな Simple Factory, Factory Method, Abstract Factory についての解説など、とにかく読者が「気になっている」部分を解消してくれる。

この本を読み終えてわかったのは「Java 言語で学ぶデザインパターン入門」は、紹介から解説まで全てが抽象的すぎてあまり頭に入っていなかったということ。

2017-11-07

Optimized C++ ―最適化、高速化のためのプログラミングテクニック

著者 出版社 発売日 ページ数 定価
Kurt Guntheroth オライリージャパン 2017-02-22 368 4000 + 税

C++ で高速なコードを書く方法について網羅的にまとめた本。闇雲な最適化に走らないよう、性能改善に関する統計的な知識や、コンピューターハードウェアの特性についても学べるようになっている。

最適化手法のうち、ビット演算による高速化は「ハッカーのたのしみ」、制御フローの最適化は「Write Greate Code」、STL コンテナの適切な使い方は「Effective STL」など、他の書籍と重なる部分も多いが、I/0 やメモリマネージャといった、普段あまり目にすることのない項目についても深く掘り下げられている。

比較的新しい本だけあって C++11 で追加された右辺値参照やマルチスレッドについても触れられており、特にマルチスレッドは近年の CPU クロックの伸び悩みや複数コア化の流れを考えると、以前に増して重要な要素になってきている。

各種最適化方法を紹介する前に性能測定の際に使用するタイマーについて長々と解説が続くので、退屈な場合は一旦読み飛ばして最後に読むといいかもしれない。

2019-12-24

リバースエンジニアリングバイブル ~コード再創造の美学~

著者 出版社 発売日 ページ数 定価
姜 秉卓 インプレスジャパン 2013-09-20 416 4000 + 税

アセンブラの基礎からアンチデバッグまでリバースエンジニアリングに関連する技術をまとめた本。

実際に逆アセンブルをやってみると簡単なアセンブラを学んだ程度では理解できないコードや、想像を超える膨大なアセンブリソースの扱い方が分からず、リバースエンジニアリングの概要は理解できていても知識が圧倒的に不足していることに気付く。

本書はリバースエンジニアリングに特化しているため、見慣れない "ebp+8" という記述が関数呼び出し時の引数へのアクセスを表していることや、C++ のクラスがどのような形にコンパイルされるかといった、知りたい情報が凝縮された内容となっている。

実際にソフトウェアのクラッキングを行うかは別として、市販ソフトがクラッカーの目を欺くためにあらゆるアンチデバッグ手法を施していることや、簡単なアンチデバッグであれば既にデバッガー側で回避する機能が用意されている話は読み物としても面白い。

Intel CPU + Windows という環境を前提としていて、アセンブリ言語は x86、Win32 API や DLL といった Windows の基礎技術が多数出てくるため、Windows アプリケーションの開発経験がない人にはお勧めできない。

2020-02-13