Top
Photo Drawings Software Writing Reading Memo Study Profile Bookmark 

Reading

在野で独学していたとき、読書案内のページを参考にしていました。
文系人間でも読める本をリストしています。

リンク

プログラミング言語関係の書籍紹介ページ

関数型プログラミング言語

Structure and interpretation of computer programs

SICPと略されている本。

Schemeを使って、数式処理や制約プログラミング、コンパイラなど を教えている。 Schemeの解説本ではなく、コンピュータサイエンス一般の教科書として書かれ ているので、Schemeの基本的な機能しか使っていない。

いろいろなところで評判がよい。 MITで教科書として使われているぐらいだから、悪い本であるはずがない。

ここがこの本のサイトで、 全文がここで 読める。
JAIST 図書館  Amazon  和訳版

プログラミング言語

Lazyな関数型言語Goferを用いてインタプリタやコンパイラを実装している。
岩波書店は嫌いだが、この本はおもしろい。

GoferはHaskell系の言語。 HaskellはMLと並ぶ関数型言語界の二大勢力のひとつなので、 ここで慣れておいたことが後で論文を読む際に役に立った。

そのほか、「継続」の考え方もこの本で学んだ。

JAIST図書館  Amazon

Schemeによる記号処理入門

上のSICPを読むためにschemeを勉強しておこうと購入。 岩波の「Scheme入門」を探していたのだが見つからなかったので、 かわりにこの本を購入した。

Schemeの機能を網羅するのではなく、 200ページほどの短さでリスト処理や制約プログラミング、継続などポイント を説明している。 MLを勉強する前に読んでも良いかもしれない。 (わたし自身がそうだった。)

JAIST図書館  Amazon

プログラミング言語理論

以下の論文は、いずれも型理論(とくに型推論)の入門として読める。
"Basic polymorphic typechecking" Luca Cardelli

"Type systems" Luca Cardelli

"On understanding types, data abstraction, and polymorphism" Luca Cardelli and Peter Wegner

Types and Programming Languages

これまでも、プログラミング言語の理論を扱う本に何度か挑戦したが、 (わたしにとっては)あまりに抽象的な議論で、 どういう風にプログラミング言語と関連しているのか 分からなくなって毎回挫折している。 その点、この本は現実のプログラミング言語の実装に即しており、 自分で処理系を作る際にも役に立つ(ような気がする)。

記述の難易度は上の論文とおなじぐらい。 ただし、"Metatheory of ..."と題するいくつかの章は、数学的な議論が続いて難しい。 でも、こういう議論についていけないと型理論は勉強できない。。。

著者は、 ペンシルバニア大学の教授で、日本の言語研究者とも縁が深い。 東大米沢研からの留学生を受け入れている。

サポートページ  Amazon

「モデルと表現」岩波講座ソフトウェア科学

前半100ページが型理論を扱っている。

JAIST図書館  Amazon

「コンピュータサイエンス入門 アルゴリズムとプログラミング言語」

第二部で大堀先生が型付ラムダ計算について解説している。

「入門」というには難しいが、前提知識なしに読んで理解できないほどではない。 ただし、「モデル」や「自然演繹」など論理学の用語が現れている箇所は 論理学を知っていないと分からないかも(とくに200頁あたり)。

JAIST図書館  Amazon

プログラミング言語の基礎理論

これも、大堀先生によるラムダ計算の解説。

扱っている範囲は「コンピュータサイエンス入門」とほぼ同じ。 違いは、「入門」の「プログラム実行のモデル」に相当する内容が扱われていないことと、表示的意味論の扱いが大きいこと、参照やサブタイプが扱われていること。

「入門」と同様で、表示的意味論はよく分からん。

JAIST図書館  Amazon

関数型言語処理系の実装

Functional Programming

strict言語とnon-strict言語の両方の実装方法を扱っている。 いろいろな話題を載せているので、最初にひととおりのことを知るにはこれがよいかも。

パターンマッチ、および型推論についての説明は、Peyton Jonesの本よりわかりやすい。 最後の方の数学的ないくつかの章はわたしには理解不能だった。

JAIST図書館

The implementation of functional programming languages

Lazyな関数型言語を、Mirandaで実装している。

上の本に比べれば話題は絞られているが、説明はわかりやすい。とくにラムダ計算での再帰やコンビネータなどに関する記述がよかった。上の本ではピンとこなかった点が、この本を読んですっきりした。

JAIST図書館

Implementing functional languages

Lazyな関数型言語を、Miranda(Haskellだったか?)で実装している。 仮想機械は、G-machineとTIM(Three Instruction Machine)を扱っている。

tutorialと副題にあるとおり、全体にわかりやすい。ただし、 いくつかの用語を説明なしに用いているので上の二冊のどちらかを読んでから の方がよいと思う。

筆者のホームページここからただで入手できる。
JAIST図書館  Amazon

Compiling with continuations

Standard ML of New Jersyの実装について説明している。

MLプログラムを、継続渡し方式(Continuation Passing Style)という形式に 変換することが基本的な考え。こういったプログラム変換が安全に可能なのが 関数型言語の特徴。

ほかのコンパイラ解説本でもそうだが、オプティマイズに関する個所は難しい。

JAIST図書館  Amazon

ZINC Experiment: an economical implementation of the ML language

MLのコンパイラ(Caml lightコンパイラ)の実装についての説明。

(その抽象機械について説明した部分を日本語で まとめたものを作成しています。)

その長い歴史を考えると、 Lispの実装についてかなりの研究成果が蓄積されているはずだと思います。 早いうちに読んでおきたい。
Lisp in Small Pieces

Lisp,Schemeのインタプリタ・コンパイラを解説している。 が、まだ読んでいない。

神保町明倫館書店(理系専門の古本屋)で4000円で入手。

Amazon

RABBIT: A Compiler for SCHEME

いろいろな書籍・論文のreferenceに挙げられている有名な論文。 著者はJAVAにも関わった有名人。 学部4年のときの論文が全米何とか賞を受賞したとか。

上のリンクで入手できるのは、 印刷されたものをスキャナで画像としてとりこんだものなので、 プリントするのがひどく時間がかかる。

まだ読んでない。

論理型言語処理系の実装

この分野をあつかった本は少ない。
The implementation of Prolog

Prologの何種類かの実装方式をLispによるコードで示しながら解説している。 分りやすい。

筆者の博士論文を出版したもの。

JAIST図書館  Amazon

Warren's Abstract Machine: a tutorial reconstruction
上の本を読んでWAMに興味を持った。よく考えるものだ。
筆者のホームページここからただで入手できる。
まだ読んでない。
JAIST図書館  Amazon

The architecture of symbolic computing
WAMに関する記述はこの本にも載っている。 が、まだ読んでない。
JAIST図書館  Amazon

その他マイナー言語処理系の実装

少なくともどこかで聞いたことがある程度には知られている言語の実装。
ICON
プログラミング言語ICONのメインサイト。
プログラミング言語ICONの実装についてのドキュメントが多数。
そのほか、"A New Implementation of the Icon Language"という文書も。
ICON言語は、'goal directed evaluation'を基礎に置く言語で、 それぞれの式が複数の結果を生成しうる。 Prologやlazyな関数言語に似ている部分がある。
Perlにとってかわられるまでテキスト処理言語として使われていたとか。

Forth
スタックベース言語Forthのコンパイラ実装方法を説明する論文がここから入 手できる。
未読。

Python
本家Pythonの実装を扱った文書は見つからなかったが、 JVM上で動作するJython(JPython)の実装に関する文書はこちら (HTML) (ps)

Smalltalk
Smalltalk-80の実装方法を説明している。
コードはSmalltalk自身で記述されているので、Smalltalkの知識が必要。

コンパイラ一般

Compilers, principles, techniques, and tools (Dragon book)
秋葉原の書泉に大量に平積みされていた。どこかの学校の教科書に使われ ているのだろう。それなら良い本だろうと思い、購入した。
卒論を書き終わってから会社にはいるまでの間に読んだ。
1日かけてやっと2ページ理解できたという日もあった。よく読ん だものだ。
本格的なソフトウェアサイエンスの本を読んだのはこれがはじ めてだった。 情報科学の学生はこんな難しい本を教科書にして勉強しているのか とうらやましく、また、これでは素人はかなうわけないなと思った。
JAIST図書館  Amazon

Modern compiler implementation in ML :basic techniques
fjで推奨されていたので読んでみた。
コンパイラの勉強というより、MLプログラミングの参考になった。
レジスタアロケーションとオプティマイズが難しい(ほかの本でもそうだが)。
JAIST図書館  Amazon

OS

UNIXカーネルの設計
初めて読んだOS本。
本物のソースコードは載っていないが、疑似コードで説明してあり分かりやすい。
JAIST図書館  Amazon

MINIX オペレーティングシステム
UnixライクなOS'Minix'の解説つきソース(ソースつき解説?)。
なんとか読み通せるサイズにソースの分量が収まっているので、 OSを覗いてみたいがLinuxやFreeBSDは巨大すぎて手が出せないとい う人におすすめ。
プロセス管理やメモリ管理など読んでおもしろい部分の コードは意外と小さく、 退屈なデバイスドライバのコードが大きな割合を占めていることが わかる。
第二版が出ている。
JAIST図書館  Amazon(第二版)

オペレーティングシステム -設計と実装-
MINIX本ほど読まれてはいないが、 この本もOSのソースコードを掲載している(すべてではない)。
MINIX本を読んだすぐ後に読んだためか、あまり印象がない。
サイエンス社(出版社)

UNIXデバイスドライバ
デバイスドライバを実際のソースコードを示して説明している。
MINIXのソースコードでは、デバイスドライバがかなりの割合を占め、 この本で説明しているデバイスドライバはいずれも200〜500行なので、 楽に読み通すことができる。
アスキーから出ている同名の本の方が読まれている様子だが、わたしは未読。
JAIST図書館  Amazon

FreeBSD カーネル入門
タブレットのデバイスドライバを例に、これも実際のソースコードを示して説明している。
上のデバイスドライバ本よりは難しいが、内容はまとまっている。
アスキー(出版社)

Linkers & Loaders
コンパイラが生成したものをOSに渡せる形に加工するのが、リンカとローダ。
込み入った部分を文章だけで説明していて分かりづらい。 図を増やして説明してほしかった。
オーム社(出版社)

Network

UNIXネットワークプログラミング
ネットワークプログラミングの決定版。(私が読んだのは初版)
訳者がJAISTの教官。

Amazon

Illustrated TCP/IP
Volume 1では、TCP/IPの仕様を解説するとともに、 ネットワーク上でデータが実際にやり取りされる様子を 小さなネットワーク上でUNIX付属のコマンドを使って検証している。
Volume 2は、BSDのTCP/IP実装15,000行を1000ページを費やして説明している。 神保町明倫館書店にて4000円で見つけ、購入。
ネットワークを専門にしていないのであれば、読まなくてよいかも。 Volume 2を読む代わりに、Volume 1を繰り返し読んだ方が身についたのではと思う。
Amazon(3 volume set)

ハードウェア

コンピュータの構成と設計
「パタヘネ」と略されている本。
電子・電気が分からないこともあり、 ハードウェアには興味がないのだが、 一通りのことは知っておこうと思い、これを読んだ。
出版が日経BPなのでそんなに難しい本ではないだろうと考えて購入。 帯のキャッチコピーも「定番」とか「名著」とか、 読まないとまずいかなと思わせるものだった。
わたしのような文系人間でもなんとか読める。
JAISTでも講義の教科書になっているみたい。
日経BP(出版社)

Windows

仕事ではほとんどWindowsを対象としていたので、Windows関連の書籍には金と時間と本棚のスペースを費やした。
とくにCOM関係は内容が複雑なので、勉強のしがいがある(使うには大変だろうけど)。 その後、JAVA RMI、JAVA Beansの仕様書を読んだが、あっさりとしすぎて物足りなかった。
結局仕事ではVBしか使わなかったので直接に役立ったことは労力の割に少なかった。
プログラミングWindows XX
いわゆるPetzold本。
わたしが読んだのは3.1対応の版だったが、いまは第五版(2000対応?)が出ている。
コードはCで記述されている。
VBプログラマであっても、この本を読んでおくと役に立つ。
ただし、実際のアプリを書く場合、C++とMFCなどのフレームワークを用いるのが主なのでこの本だけでは不足。
アスキー(出版社)

改訂第三版 Advanced Windows
著者はMSJでおなじみのJeffrey Richterなので読みやすい。
Win32 - Win16を扱っている。
アスキー(出版社)

Inside COM
現在のWindowsプログラミングではCOMを知っておく必要がある。
C++がわかるならば、最初はこの本がよい。
そして、MSDN中のCOM SpecificationとDCOM Specificationを読む。
アスキー(出版社)

Inside DCOM
DCOMとあるが、Distributedに特化した部分は少ない。Inside COMの次に読むとよい。
アスキー(出版社)

COM Specification
COMの仕様書
Inside COMとInside DCOMを読んだら次はこれ。

Distributed Component Object Model Protocol
DCOMのプロトコルの仕様書
MSJJ(現MSDN)に似たような記事があったのでまずそちらを読んだほうがわかりやすい。

Essential COM
MSJ執筆者のDon Box著。
COMの基本的な部分を扱っている。
Addison Wesley(出版社)  Amazon(和訳版)

msdn magazine
MSJとMIDNが合併した雑誌(?)。
最低限C++、Win32、COMの知識が必要。C++、Win32、COM、MFC、VBがわかれば、ほとんどのページが楽しめる。(デバイスドライバ関係の記事はわからんが。)
MSJ時代には購読していたが、JAISTでWindowsプログラミングをす ることはないだろうと思ったのでmsdnは購読をやめていた。が、COMに替って Net.Frameworkなるものが登場したので、置いておかれないようにと最近購読 を再開した。

Effective COM
50項目からなる「べき・べからず」集。
Addison Wesley(出版社)&nsbp; Amazon(和訳版)

Inside OLE 改訂新版
COMの応用技術であるOLEを扱っている。
しかし、OLEを実装することはほとんどないので、読まなくてもすむと思う。
現在COMを使うとすれば、OCXやビジネスオブジェクトを実装する場合がほとんどだと思うので、それらについては別の書籍に当たった方が良い。
アスキー(出版社)

データベース

管理運用を扱った書籍に比べ、開発者の視点からデータベースを扱った書籍は少ないように思う。 とくに中級者レベル以上を対象にしたもの。
ひところ、"DB Magazine"という雑誌があったそうだが、すでに廃刊?
An Introduction to Database systems
bitで紹介されていたので購入。
relational algebra/calculusに関する章がおもしろい。
現在は第七版がでている。私が読んだのは第六版。
Addison Wesley(出版社)

トランザクション処理システム入門
MTS(Microsoft Transaction Server)との関連で読んでみた。
MSJでDon Boxが推薦していた。
わかりやすい。ほかに感想はなし。
日経BP(出版社)

プログラマのためのSQL
SQLに関しては、入門書の次のレベルの本はこれぐらいしかない。
Amazon

SQLクイズ
上の本と同じ著者。
理解できたのは半分ぐらい。

RDBMS技術開発
データベースシステムの理論的な面を数学的な記法を用いて説明している。
SRCから出ている本にしては良い本。
ただし、誤字脱字が多すぎる。10ページに一個は見つかる。
JAIST図書館