「普通のやつらの下を行け」。最近は、プログラミング言語が発達し、低レベルな層のことを考えなくてもコーディングができるようになってきました。もちろん、アセンブラやC言語をバリバリ使いこなして、ハードウェアに近いところの制御プログラムを書いている人もいることは分かっています。でも、低レベルな層をちゃんと理解してコーディングを行える人はどれくらいいるのでしょうか?
本書は、『Write Great Code-Understanding the Machine』の日本語版となっていて、主にコンピュータの基礎知識、さらに言うと、プログラムがコンピュータで実行される部分、に焦点を当てた本となっています。
グレートなプログラムを書くためには、どうやってプログラムが動くのかを知っている必要があります。本書は、低レベルの層の知識を勉強したい人、コンピュータに興味があるが大学で詳しく学ばなかった人、いまさらながらコンピュータの仕組みを理解したい人におすすめです。
特徴(と言うか感想?)
本書は、コンピュータの基礎知識を本当に基礎から学びたい人のための本です。読んだ感想は、「本書はプログラマだけが対象の本ではないな」ということです。
この本は、基本情報処理技術者資格の勉強をしているような感じを受ける本です。なんとなく、資格試験の勉強をしている感じというのは悪い印象を受けるかもしれませんが、本書はまったく逆です。本当にコンピュータを勉強しているような気がしてきたのです。
大学で多少でもコンピュータの知識があれば、本書を読むことでさらに深い知識を得られるはずです。逆に、まったくコンピュータの知識がない人は、ちょっと読み進めるのがつらいかもしれません。それぐらい濃くて深い内容でした。
以下、本書の目次になります。
- 数値表現
- コンピュータの基礎、ビットやx進数の話、数字と文字列の変換、BCDの話など
- 2進数の算術演算とビット演算
- 2進数の数え方、ビット計算の方法、16進数への変換、パックとアンパックの話など
- 浮動小数点表現
- 浮動小数点の演算方法、丸めなど
- 文字表現
- 文字コード、文字セット、文字列の表現方法など
- メモリの構成とアクセス
- CPUはメモリをどう読み込むか、リトルエンディアン、ビッグエンディアン、メモリアクセスとシステムクロックなど
- 復号データ型とメモリオブジェクト
- ポインタ、配列、構造体、共用体などのメモリ表現など
- ブール論理とデジタル設計
- ブール演算、電子回路とブール関数の関係、フリップフロップなど
- CPUアーキテクチャ
- 命令デコードと実行、並列化の仕組み、パイプライン、キャッシュ、マルチプロセッシングなど
- 命令セットアーキテクチャ
- オペコード長、命令、仮想プロセッサの設計、オペランド、エンコードなど
- メモリのアーキテクチャと構成
- メモリ階層、キャッシュアーキテクチャ、ダイレクトマップ、フルアソシエイティブキャッシュ、仮想メモリ、ページング、スラッシング、ヒープ、スタック、ガーベージコレクションなど
- 入力と出力(I/O)
- メモリマップトI/O、キャッシュ、DMA、システムバス、バッファリング、ハンドシェイク、割り込み・ポーリング、デバイスドライバ、外部デバイス、ディスクドライブ、USB、ジョイスティック、サウンドカード、オーディオデバイスなど
目次を見るだけでもかなり低レベルな層を広範囲に、深く書かれていると言うのが分かると思います。非常に勉強になる一冊です。
参考
- コンピュータの基礎知識&ソースコードの読み方
- 本物のハッカー(コンピュータのことを知り尽くした人)とはどんな人のことか
- Hack、Hack、Hack
- ソフトウェアに携わる人のための一冊