プログラムを動かす環境の本

プログラムをどう動かすというか、どうやって命令を発行するかという本を挙げて、プログラムをどう書くかという本もあげた。


これで、Seasarカンファレンスでの話での本の紹介は終わりなのだけど、ブログのエントリとしては、どうやって実際にプログラムが動くかを理解できるような本がないと完結しない。
ということで、プログラムを動かす環境の本を挙げることにする。
まだ読んでない本がほとんどなので、こういった分野の勉強も必要だという程度の意味でしかないけど。長いことプログラマやってれば、なんとなく知ってる分野ばっかりになってるはずだけど、系統的に勉強しなおすのもいいと思う。
このあたりの分野は「タネンバウム読んどけ」でだいたい大丈夫みたいなんだけど、いきなり読むのはつらいので、そこにたどりつくまでの本を。

コンピュータの仕組み

まず、プログラムを動かす中心となるCPUとか周辺ハードウェアの本。パイプラインとか聞いたことなければ、読んでおくべし。

CPUの謎―CPUの中で何が行われているか?

CPUの謎―CPUの中で何が行われているか?

インテルCPUの歴史の本なんだけど、インテルCPUの歴史というのはそのままCPUの歴史でもあるし、パソコンアーキテクチャの歴史でもある。そして、パソコンアーキテクチャは、サーバアーキテクチャにもなってきてる。
CPUだけじゃなくて、メモリとかバスの説明もあるから、パソコン全体についての概要がわかる。
具体的な製品の中身と時代背景がわかると理解しやすいしね。
内容はちょっと古くて、Pentium4くらいまでの話なんだけど、PCI Expressやらも出てきてるし、だいたいいいんじゃないだろうか。
ただ、Pentium4までのインテルCPUで使われていない技術には触れられていないので、例えばVLIWという言葉は出てこない。インテルCPUでVLIWを取り入れたのはItaniumかららしく、そこまでは触れられていない。そういうわけで、コンピュータアーキテクチャの概観とまでは行かないけど、ちゃんとした本がかなり読みやすくなるはず。


ちゃんと知りたければこのあたりを。「CPUの謎」読んだあとだと、かなり理解しやすくなると思う。

コンピュータの構成と設計~ハードウエアとソフトウエアのインタフェース 第3版 (下)

コンピュータの構成と設計~ハードウエアとソフトウエアのインタフェース 第3版 (下)


タネンバウムさんなら、範囲は少し広くなるけどこのあたりとか。

構造化コンピュータ構成 第4版―デジタルロジックからアセンブリ言語まで

構造化コンピュータ構成 第4版―デジタルロジックからアセンブリ言語まで


メモリの使われ方を勉強するときは、C言語のポインタの本が参考になる。

C言語ポインタが理解できない理由

C言語ポインタが理解できない理由

OS

次にOSの本。

LinuxとWindowsを理解するためのOS入門

LinuxとWindowsを理解するためのOS入門

LinuxとかWindowsとか、具体的なOSと関連付けられてるので、ほかの「オペレーティングシステム」という名のついた本より読みやすい。
Amazonの書評がひどいけど、たぶん「LinuxWindowsを使うためのOS入門」と勘違いして買った人が、図の抽象度が高くて何がいいたいのかわからないと言ってるんだと思う。本屋でもLinux入門の横に並んでたし。確かにビッグエンディアンとリトルエンディアンは逆だとは思うけど。「まるで教科書みたい」と言われても共立出版ですから、教科書ですから。
専門書を一般書だと勘違いされて低い評価がついた悲しい例。☆3つくらいはつけてあげて。☆4つとかは言いがたいけど。サポートページがYahooグループで、ID取って参加しないと見れない & 見てもなんにもない、というのは悲しい。
まあ、概要を知るにはいいんじゃないかと。


ちゃんとした本が読みたければ、こちらで。

モダン オペレーティング システム 原書 第2版

モダン オペレーティング システム 原書 第2版

ネットワーク

ネットワークのことは知らないで済むものではない。
けれど、ネットワークとか嫌いだ。ネットワークが嫌いというか、ネットワークというのは決め事の世界で、ぼくは決め事の世界が嫌いだ。なので、TCP/IPとかプロトコルの本は読みたくない。「こう決まっています」という決まりごとの羅列だからだ。
そういうことなので、他の分野なら並んでる本を片っぱしから手にとってみるのだけど、もうシリーズを信用して、この本を読むことにした。


ネットワークとかプロトコルとか大好きなら、こんなの読めばいいと思う。

コンピュータネットワーク第4版

コンピュータネットワーク第4版

他にも、TCP/IPと書いてある本はたくさんあるので、そちらで。


プロトコルを設計するなら、この本が参考になるかも。

俺流プロトコル実装入門 ~Private Implementation Protocol~

俺流プロトコル実装入門 ~Private Implementation Protocol~

よくわからんが楽しそうな文章。書いている人そのままだと思った。


最近は、クラウドとかが流行っていて、その基礎技術としてのネットワークを知りたければ、この本がいいと思う。

P2P教科書 (インプレス標準教科書シリーズ)

P2P教科書 (インプレス標準教科書シリーズ)

クラウドの基本は、サーバー同士が対等に接続することで、対等に接続することでどのサーバーが落ちても大丈夫という仕組みをつくりあげている。コンピュータ同士が対等に接続するということはP2Pであるということなので、クラウドの基礎技術としてP2Pの話が参考になるという話。で、P2Pの技術的な解説書といえば、この本しかないと思う。分散ハッシュテーブルにも触れられてます。

クラウド

クラウドという言葉を出したので、クラウド関連と言える本をもう少し。クラウドは今後重要だと思うので、ちょっとだけ。
クラウドの技術的な解説は、雑誌だけどこの本。UNIXマガジンのクラウド特集

技術的なところでは首藤さんの記事は必見。分散ハッシュテーブルの解説とか、基礎技術について書いてある。あとは製品やサービスの紹介なので、興味があるところを。


あと、クラウドというのは、技術的にはP2Pと仮想化だと思うのだけど、P2Pの本についてはネットワークのところで挙げた。ということで、仮想化の本。

仮想化技術Xen-概念と内部構造

仮想化技術Xen-概念と内部構造

この本はXenの解説書というよりはXenを題材にした仮想化技術の解説書。面白そうなので買ってみたのだけど、まだ読んでない。

コンパイラとかVM

簡単なプログラミング言語なら自分で実装できるようになるべき。ということで、言語が解釈されて動くまでという本なら、とりあえずこれ。

コンパイラとバーチャルマシン (IT Text)

コンパイラとバーチャルマシン (IT Text)


コンパイラをちゃんと勉強したいなら「中田 育男」で検索して出てくる本を片っ端から読めばいいと思う。これとか。

コンパイラの構成と最適化

コンパイラの構成と最適化


あと、この本も定番らしい。

コンパイラ―原理・技法・ツール〈1〉 (Information & Computing)

コンパイラ―原理・技法・ツール〈1〉 (Information & Computing)

(2)は、もう売ってないのね。

データベースの本

最後にデータベース。
あんまりデータベース好きじゃないのだけど、この文脈だと取り上げざるを得ないので、無難なところを。


まずは基本。リレーショナルデータベースの理論的な背景が書いてある。

リレーショナルデータベース入門―データモデル・SQL・管理システム (Information&Computing)

リレーショナルデータベース入門―データモデル・SQL・管理システム (Information&Computing)

うちにあるのは古くて、増刷じゃない薄いやつで、今、売ってるのはファイルアクセスにも触れてあるようだ。


あとはこのあたり。

プログラマのためのSQL 第2版

プログラマのためのSQL 第2版


リレーショナルデータベースの内部構造について知りたいときは、この本。

トランザクション処理 上

トランザクション処理 上

本がでかくて厚くて文字が多くて、全然よみすすまないんだけど。

数値計算

ついでに数値計算の本。微分方程式とか、連立方程式とか、そいういう計算をやりたいときに読む本。

数値計算のはなし―パソコンを使って解こう

数値計算のはなし―パソコンを使って解こう

サンプルはBASICだけど、コンパクトでわかりやすい。微分方程式を目標にして、そこに向けてまっしぐらという感じ。
この本で概要をしっておくと、他の本がよみやすくなる。


もう少しやりたいならこれとか。

Javaで学ぶシミュレーションの基礎

Javaで学ぶシミュレーションの基礎


ニューメリカルレシピも挙げるべきだろうか

ニューメリカルレシピ・イン・シー 日本語版―C言語による数値計算のレシピ

ニューメリカルレシピ・イン・シー 日本語版―C言語による数値計算のレシピ

いろいろ指摘されて原書は改訂されてるのだけど、日本語版は古いままなのが気になるけど。