独学でプログラミングをやってきた中で良かった技術書50選

今まで読んできた技術書の中で良かったものを挙げていく。 そろそろ本棚が溢れるので捨てる前に書き留めておく。

私は独学でプログラミングを始めたので情報系専攻の人には何をそんなという本も混っているだろうが価値は人それぞれ違う。

一応私自身について語っておくと学生時代はプログラミングに興味を持ちつつも数学科に進んだ。 しかしそこでもプログラミングへの興味は薄れず、色々本を読んだり同学年の情報科学科の真似をしたりしていた。 今思えば日本の精鋭たる東大情報科学科の人達に勝てる筈もなかったのだが学生時代に我武者羅になれたのは悪い経験ではなかった。 私が興味があったのは主にプログラミング言語そのもの、特にLispとその周辺。

何故本か

挙げていく前に1つだけ。Webに大量に情報がある今、何故本かについて説明したい。簡潔に言うと

  • 文章が推敲されていて読み易い
  • 1つの情報ソースに多彩な内容が載っている
  • 巨大な情報の中で一貫性が取れている
  • 出版されている以上ある程度内容に責任を持って書かれている

どれもWebの情報は断片的で無責任に書かれているような書き方だが凡そ間違ってはいないと思う。 私のブログだってよく間違いが書いてある(そして申し訳ないことに面倒くさがって修正しないままのことも多々ある)。 本屋に足を運んでパラパラ捲って気に入った本を買うのが一番確実な情報収集の仕方だと思う。勿論本だけでは足りないことも多いが。


では、本を挙げていく。順不同で、本棚を見ながらあれこれ挙げることにする。

1. 作りながら学ぶRuby入門

この本は私がプログラミングを学び始めた時にお世話になった。初心者には0からアプリケーションを作るまでのノウハウがない。それを丁寧に教えてくれる。 よく「プログラミングを始めたいんですがどうやって覚えました?」と聞かれるが、毎度この本と下記の逆引きを勧めている。

もしかしたらRubyのバージョンが古くてサンプルコードが動かないかもしれない。

2. Ruby逆引きハンドブック

私の人生を変えたともいうべき1冊。プログラミングを英作文に例えるならこの本は和英辞典にあたる。 そして初心者にとっては「○○したいから□□する」は「へー。○○したいという需要があるんだ、そして□□で出来るんだ」と同時に2つを教えてくれる。 この1冊前部読むことでRubyを書くときの手札を確認出来た。

惜しいことにこの本も少し古くなってきた。

3. メタプログラミングRuby

Rubyをやるならこの本を一度は読んだ方がいい。method_missingなどRubyコミュニティでは非常に重要なテクニックが載っている。私は初版を読んだが第2版が出ているようだ。

4. Emacsテクニックバイブル

るびきちさんの本を紹介したのでついでにこの本も。Emacsの便利な使い方から人気プラグインまで様々に解説されている。Emacsを使い熟したい方にお勧めする(そして私のように帰ってこれなくなるといい。)。 今ではいくつか動かない/入手出来ないプラグインはあるものの基本的な使い熟すための指南というか思想は色褪せない。

5. Emacs Lispテクニックバイブル

同じくるびきちさんの本。コピペだけでinit.elを書くのが嫌な人、片手間程度でもEmacs Lispを書く人にお勧めする。私もこの本を境にして片手間程度にEmacs Lispを書くようになった。 さらにComon Lisperである私にはCommon Lispマクロの解説が非常に分かりやすくて参考になった。

6. 入門vi

例え熟練のEmacsユーザでもviは使えた方がいい。サーバに入った時にviしか使えないこともある。 Emacsをインストールしようにもインストールするための設定をviで書く必要がある。 nanoもあるが、リッチテキストエディタに馴れた手にはviの方が馴染む。

そういう人に、この本は良い。Vim入門のようにごてごてしてなくて欲しい情報だけが書いてある。

7. 実践Common Lisp

私はほぼRubyでプログラミングに入門したがRubyはLispを参考に作られたと言われたらその原典たるLispにも興味が出るのは自然の流れ。当然私もCommon Lispを始めた。 Common Lispに入門するにあたって一番お世話になった一冊。早見表もあれば関数の解説もあり、実践の名の通りアプリケーションを作るところまでいける。 Common Lispといえばまずこの本をお勧めする。

8. Land of Lisp

オライリーの中でも異色の表紙で有名なこの本。このエイリアンはオライリーの本が出る前からLisp界隈で活躍していたりする。 モチーフは「他言語プログラマから見たLisper」なのでLisperのペットというようりはLisper自身。

閑話休題。この本は実践Common Lispよりも易しいというか丁寧で、分かりやすく書いてある。 そしてちょこちょこゲームを作りながら進んでいくので飽きない。手を動かしたい人には本書を、後のリファレンスとしても役立てたい人には先の実践Common Lispをお勧めする。

9. On Lisp

大半がマクロについて書かれているPaul Grahamのマクロの本。Common Lisp中級者向けの必読書。 Common Lispを使っていてマクロを書く必要が出てきたあたりでこの本を読むといいと思う。 変数捕捉の問題から逆に変数を捕捉させるアナフォリックマクロの話、マクロを使って作る継続と非決定性計算などなどが載っている。

他言語プログラマでも非衛生的なマクロを持つ言語を使うならこの本を読むと良いと思う。私の知る限り世界で一番マクロに詳しい本だ。

マクロの本とはいったがLisp流のボトムアッププログラミングを指南していたりオブジェクトシステムやパッケージについての解説があったりと中々役に立つ指南書でもある。 また、名言も多いのでLisp界隈でよく言われる元ネタを知りたい時にもいい。

訳者が高校生の時に訳し始めたので日本語はやや読みづらい。Webで無料で公開されていたりする。

On Lisp

10. LET OVER LAMBDA

過激な本。LOLの名で呼ばれる。Land of LispはLoL。一歩間違うと命を落しかねないので注意。「Common Lispこそが史上最高の言語だ」のスタンスで進んでいく。 LET OVER LAMBDA(lambdaの上のlet)とは、ラムダでletで作った変数を捕捉する話、クロージャの話をメインに据えている。 サーカスのようなプログラミングテクニックもあるかと思えば割と便利なツール、あるいはパフォーマンスチューニングについてなども載っていて、飽きない本。

余談だが某所で「Land of Lispは聖典」と言われていたが本当にバイブル的な意味では先のOn Lisp、宗教的な意味ではこのLET OVER LAMBDAが聖典になると思う。

11. Real World OCaml

Lispが函数型言語と言われいると他の函数型言語にも興味が出る。OCamlに半ば足を突っ込んでる時にこの本が公開されて読んだ。Webで草稿が公開されている。 普通に初心者に易しい内容だしコマンドラインのパースとか非同期プログラミングとかもあり充実満足な内容。 さらにランタイムシステムやコンパイラプラグインなどの深い話もあってOCaml上級者にも役に立つらしい(私はまだ初級者)。 数少ないOCaml書籍。オライリーでは唯一?

このノリでReal World Standard MLとか出ないかな、出ないよな。Standard MLの書籍少ない…。これくらい?

12. プログラミングErlang

どうせなら他の函数型言語も試してみるといい。例えばErlangとか。これは飛行機本として有名なErlangの入門書。Erlang作者のJoe Armstrongが著している。 Erlangのアクターモデルについて何も知らなくても恐れる必要はない。この本がついている。全くの初心者からErlangの考え方、ETS、DETS、OTP、Mnesiaなどを学べる。

13. すごいErlangゆかいに学ぼう!

Erlang界隈では先の飛行機本が定本らしいが私はこのすごいE(r)本の方が肌に合った。ノリ良く進むしEUnitやDialyzerなどについても解説してある。 Erlang最高!なノリだが「うまい話ばかりじゃないですよ」とちゃんと現実も見ている。

14. 7つの言語 7つの世界

さらにプログラミング言語に興味を持ったならこの本を読むといい。様々な言語を広く浅くやっている。 普通のプログラマなら言語の10くらい書けるものだがCライクな言語10個書けたところで大したことはない。 比してこの本はそれぞれにパラダイムの違う言語を7つ紹介している。Ruby、Io、Prolog、Scala、Erlang、Clojure、Haskell。 Ioなんかは中々知っている人は少ないのではないだろうか。そういう言語に3日だけ触れてみるのも悪くない。

15. Java言語で学ぶデザインパターン入門

人は、あまりに分かり易い解説を読むと初めてでも既知のように感じる。この本はそういう体験をさせてくれる。 プログラマとして生きる以上知っておかないといけないデザインパターンについて非常に分かりやすく丁寧に解説してある。 著者が物書きもしている結城先生なので日本語も非常に読み易い。

大きな本だが解説を丁寧にするために膨らんでいるだけなので臆せず読んで欲しい。

16. Java言語で学ぶデザインパターン入門 マルチスレッド編

マルチスレッドプログラミングは複雑で、書いてる本人すら状況を把握しづらい。 先にこの本を読んで基本的な考え方を身に付けているかいないかは大きく響く。 分かりやすい解説に加えて図解もあるので頭の中で動きをイメージしやすい。

17. プログラミングコンテストチャレンジブック

いわゆる蟻本。プログラミングコンテストに興味がなくてもこの本は良い本だ。 様々なアルゴリズムの解説とその実践が出来る。そしてグラフ関連のアルゴリズムに詳しい。 私がアルゴリズムに興味を持つきっかけになった一冊。

18. アルゴリズムイントロダクション

アルゴリズムやデータ構造に詳しくなりたいのならこの本をお勧めする。 相当数のアルゴリズムやデータ構造が載っているばかりか、ちゃんと計算量の解析なんかもしている。しっかりと「考え方」が身につく本である。 練習問題も豊富にある。中々分厚いが辞書と思えば妥当でもある。

ただ、内容は堅いのでかなりとっつきにくい。さらに、載っているのは疑似コードなので実際に試したいならそれなりに頭を使って自分の言語に翻訳する必要がある。

アルゴリズムやデータ構造に関して、触りだけでいいならこの本がある。

随分前に借りて読んだ本で、本棚にも並んでないので記憶が朧げだがプログラミング初学者~初心者に丁度いいくらいの内容だったと思う。

19. Purely Functional Data Structures

この本はアルゴリズムイントロダクションの延長にあると言える。 最初に「ならし計算量」(償却計算量)を導入したあと、いくつかのデータ構造を下限オーダの操作のまま簡潔に関数的に実装していく。古い本なので恐らくは多くの人に馴染のないStandard MLで書かれているが簡潔な実装は一目瞭然、SMLを知らなくても読めるだろう。 その後遅延評価を導入して、上手く高速化する話、償却しなくても下限の計算量を維持出来る話、データ構造に「ひずみ」を溜めない話なんかが出てくる。Qiitaに一部の解説があるのでこれを読んで興味が湧いた人は買うといいと思う。

20. 関数プログラミング 珠玉のアルゴリズムデザイン

この本を読んだ時、衝撃を受けた。まず、内容が難しくて理解が及ばなかった。先述のアルゴリズムイントロダクションを読んだ上でだ。 そしてそれ以上に衝撃だったのが複雑なアルゴリズムをHaskellを使って驚くほど簡潔に実装していた点だ。 アルゴリズムを下限のオーダーで実装するのを前提として、「運算」を使って定数倍の高速化を試みる。魔法のようだった。

比較的小さな本だが内容は見た目の3倍はあると思って読んだ方がいい。

函数型言語を触る人なら必ず読んだ方がいい。難しいので完全に理解は出来なくてもこういう世界があることは知っておきたい。

21. 人間に勝つコンピュータ将棋の作り方

LispはかつてAIの言語として表舞台に立った。ならばLisperとしてAIは知っておきたい。当時まだ探索初心者だった私にとってこの本は色々ためになった。 min maxやnega max、αβ木探索なんかは初めて知ったし評価関数のパラメータを機械学習で決めるのも初耳だった。 読み物程度で詳しい技術の話は載ってないがAIに興味を持っていた私には面白い本だった。

22. コンピュータ囲碁

将棋AIが人間に勝つようになって、そろそろ別のゲームか、と思い始めてこの本を手に取った。 先の本とはうってかわってつぶさな実装が載っている。将棋とは違ったモンテカルロ法のアプローチが新鮮で面白い。 モンテカルロ法の探索を知らないのなら一度は読むと良いかもしれない。

最近では画像認識によく使われるCNNを使った手法なんかもあるようだが今の囲碁AIはどうなっているのだろうか。

23. やさしいインタープリタの作り方入門

Lisperは一生に一度は自分のLispを作ると言われている。ならば、とこの本を手に取った。 プログラミング言語がどう動いているのかも知らない初心者には丁度良い内容だった。

一応言うと私はこの本を参考にインタプリタを作った訳ではなくサラサラと眺めて概略だけを知った。 図書館で借りた本だったのでゆっくり読む時間がなかった。

24. やさしいコンパイラの作り方入門

私が作りたいのはインタプリタだったが姉妹本ということで一緒に借りて読んだ。 感想はインタプリタと同じ。今Amazonのレビューを見ると酷評されていたのでゆっくり読むには向いてない本なのかもしれない。

25. コンパイラ―原理・技法・ツール

いわゆるドラゴンブック。コンパイラの定本。もう少しコンパイラに詳しくなろうと手にとった。著者達が構文解析の専門家のようで、本の半分くらいが構文解析に割かれている。 さらっと正規言語(正規表現)についても載っていたりする。私みたいにLispを作りたい人には複雑な構文解析の話は退屈だったが後半の翻訳や最適化の話は非常に面白かった。 中々堅いというか難しい本ではあるが、馴染めるならこれ以上のものはない一冊。

余談だが著者のエイホはAhoと綴る。I am AHOというとめちゃくちゃコンパイラ出来る人と思われるだろう。

因みにドラゴンブックと並び語られる本にタイガーブックがあるが私はまだ読んだことがない。その内読まねばと思っている。

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

ドラゴンブックよりも最適化についてページを割いている本。人によりけりだがドラゴンブックよりもこの本を勧める人が多い。私もそれが妥当だと思う。 文体はさしてドラゴンブックと変わらないが変にカタカナ文字を日本語にしておらず(インタプリタ、コンパイラを解釈系、翻訳系と訳すなど)読み易い。

27. きつねさんでもわかるLLVM

理論の話が出来ても現実のコンパイラを作るのは難しい。その1つにコードを吐く部分が泥臭い点がある。 LLVMを使えればそういう泥臭さを軽減出来る。さらにLLVMは低レベルな最適化もやってくれるのでコンパイラを作る時の手間をかなり省かせてくれる。

LLVMは巨大だがこの本を読めばどこで何をやってるのか、LLVM IRがどんなものかは分かるようになる。 さらにパスやバックエンドなどそれぞれのプラグインの書き方も載っているので色々な切り口からLLVMを使いたい人にも役に立つ。 少なくともこの本を読まずしてLLVMが分からないと言ってはいけない。分かってなくて分かりたいなら読むべき。

ところでLLVMといえばもう一冊あるがこちらはClangのためのLLVMといった感じでClangをハックしたい人向けな内容になっている。

28. 言語実装パターン

パーサジェネレータのANTLRの開発者が著した本。実際にいくつかDSLなどを作りながら進むのでエンジニア向けなのかもしれない。 一度借りて読んだ後本棚に置きたいなと思いつつまだ買っていない。

29. 正規表現技術入門

一度書評を書いた。 Webではまず得られない正規表現のまとまった情報が得られる。 ドラゴンブックでも扱われている正規言語だがこちらの方がコードを交えながら解説するので詳しくて分かりやすい。

Onigmoのコードが載っているのでそれを見て最適化し、最終的にはパッチがRubyに取り込まれるまでの流れが出来た私にとっての思い出の1冊でもある。

語彙が足りなくて申し訳ないが素晴しいの一言に付きる。

30. 型システム入門 −プログラミング言語と型の理論−

コンパイラを作っていて外せないのが型システムの話題。それについて深く扱っているのがこの本。いわゆるTaPL。 初めて読んだ時、λだけで様々な関数を実装していくのが不思議でならなかったし、不動点コンビネータにも感動した。 2回目に読んだ時にはもう少し余裕があって操作的意味論も追えた。 次に読む時はもう少し深くまで読みたい。少くとも手を動かす必要はあるだろう。

有名な定本ではあるが理論の本なのでどういうことを論じているか分からないまま読める本ではない。 しかし本棚に置いておくと「あれ?System F_ωってどんなシステムだっけ?」などとなった時にサッと引けて便利ではある。

31. プログラミング言語の基礎概念

TaPLよりも軽くやりたいならこの本がある。TaPLに比べてずいぶん(物理的にも)軽く、要点を押えた内容で入り易い。

読書会も開かれている

この本とTaPLの中間というかもう少しプログラミング言語の意味論に焦点を当てたものとしてWeb上だがソフトウェアの基礎がある。Coqの練習がてら手を動かすと良い。

ソフトウェアの基礎

こちらも読書会が開かれている

32. 計算機プログラムの構造と解釈

もう少しエンジニア寄りのコンピュータサイエンスの本ならこれがある。 言わずと知れた名著、いわゆるSICP(しっくぴー)。表紙から魔導師本などとも言われる。計算機科学への深い洞察を与える。 訳が堅いとも言われるが大学生の教科書なんてみんな同じようなものだ。解析概論に比べたら読み易い。 初心者にプログラミングを教える時に適当な例を挙げるのに困ることがよくあるが、この本の題材の選び方は完璧だと思う。 理解の妨げになる余分な脂肪は落として完璧なまでに簡潔にしつつも関心を失わせない興味深いものを取り上げている。 題材のプログラミング言語としてSchemeが選ばれているが、そこも正解だと思う。Scheme自身にも余計な脂肪がない。

最初のレベルはプログラミング初心者に合わせてあるが中身は計算機科学なのでストイックな初心者がゆっくり読むかある程度レベルをつけてから読むのが良いと思う。

33. Linuxプログラミングインターフェース

普段OSのインタフェースがどうなってるかなんてプログラミング言語が隠蔽してくれるが、自分でプログラミング言語、Lispを作ろうと思ったら知る必要がある。 そういう時にこの本は役に立つ。

C言語の良い所の1つにmanが充実している点が挙げられるが、この本はmanの編集者が著した本だ。 しかもmanよりも詳しくて、Linuxに出てくる概念のつぶさな説明、それぞれのインターフェースの細かな違い、早見表、違いを実感出来るコード例、Linuxに限らないコードの可搬性の話などなど枚挙に暇がない。

今回挙げる中でも随一の重量を誇るが一番お勧めしたい一冊。無人島に1冊だけ持っていくとしたらこの本を選ぶ。

34. Operating Systems

やはりOS上でLispを動かす以上OSについては避けて通れない。

これはいわゆるMINIX本で、UNIXライクな小さなOS、MINIXを題材にOSについて論じる。 私は英語版を読んだが日本のAmazonに出回ってないようなので日本語版のリンクを挙げておく。 MINIXを題材とはいいつつも副題にDesign and Implementationとあるが、Implementationの部分でMINIXのコードリーディングが挟まる程度。Designの部分はMINIXに限らない一般的なことを論じる。

IOについて、プロセスについて、メモリ管理についてなどなど、普段のプログラミングで使っているのに詳しくないのなら一度は読むべきだ。

特に、IPC(プロセス間コミュニケーション)の部分はOS関係なく役に立つ。

OSについてなら最近だと定本ではあるがMINIX本よりこちらの方が良いと勧められたことがあるがまだ読んでいない。

4部構成らしいが、なぜかvolum4が見当らない。

35. Computer Organization and Design

やはりCPU上でLispを動かす以上CPUについては避けて通れない。

これも名著。いわゆるパタヘネ。副題にThe Hardware/Software Interfaceとある通り、ハードウェアとソフトウェアの境界を行ったり来たりして進んでいく。 コンピュータの中身なんて丸で知らない初心者でも読めて、CPUの構造や(MIPS)アセンブラを知ることが出来る。 本を通してCPUの構造を解説しつつその知識を使って行列計算を高速化していく。それで最後は200倍まで速くなる。高速なコードを書きたい人は是非読むと良い。

また、この本は最新のCPU事情を追い掛けることも目的としていて、頻繁に改訂されている。 古くからある本だがこの第5版には大規模データセンターやモバイルデバイスでのCPUについても論じられている。

尚、日本語版もあるが私は読んでないのでコメントは控える。

余談だが、最初にパタヘネと間違えてヘネパタ、CPUを作る人向けの本を買ってしまったので勿体なくて読んだが私には早すぎたようだった。

こちらも日本語版があるらしい。

36. データマイニング入門

LispをやるならAI、AIでは機械学習が使われいるということから簡単な入門書を選んだ。 最初、これを選んだ時にはそこまで深く考えた訳ではないのだが後にこれ以上の入門書に出会ったことがない。 取り上げるトピックや理論と実践の配分、理論の踏み込み具合、図、などなど絶妙である。

他にも統計や機械学習の入門書は色々に読んだが全てこの本の前には霞んでしまったのでこれしか挙げられない。

37. エンジニアのための データ可視化[実践]入門

この本の通称何なのだろう。3D円グラフ本?あんちべ本?あんちべ本はこれか。

小中学校の社会や算数で習ったグラフの発展といったところ。しかし世の中思った以上に可視化の手法があって驚きが多かった。 データを可視化することがあるなら一度手を止めてこの本を読むだけの価値がある。

詳しくは著者のブログを見るといい。

エンジニアのためのデータ可視化実践入門という本を書いた - あんちべ!

38. 詳解 シェルスクリプト

Lispの処理系マネージャをシェルスクリプトで書き始めたのが大学3年生のこと。そのあたりでこの本を買った。 シェルスクリプトを書くときには是非この本をお勧めする。便利コマンドやTipsの他にシェルの引数の評価順序、互換性の話などこの本くらいでしか扱ってないような情報が多数載っている。 シェルのテキストベース、行指向の考え方を身につけることが出来る。私も知人からはシェルスクリプトの人と認識されているがその知識の根底にあるのはこの本。

39. BSD Hacks

古き良きBSDハッカーに思いを馳せたいならこの本を読むといい。FreeBSDを主としているがNetBSDやOpenBSDについての注釈もある。「telnetでメールを読む」など個人的にはすごい好きな本なのだが恐らく今の時代に需要はない。

40. マスタリングNginx

NginXのパラメータやビルドオプションについて詳しい説明がある。 説明だけでなく、「CPUネックの時はワーカ数をコアと同じだけ、IOネックの時はコア数の1.5~2倍にするといい」など、パラメータ設定の目安もある。 NginXを扱うことがあるなら是非読んだ方がいい。そんなに分量はないので隙間時間に目を通せる。

最近はnginx実践入門が話題だがまだ読んでいないので何も紹介出来ない。

41. 初めてのSQL

今更この本を挙げると笑われそうだが初学者の私には役に立った。SQLは割とノリで書けるところはあるが、GROUP BYなんかは知らないと書けない。

42. SQLアンチパターン

こういう本は中々ない。いわゆる勘所みたいなのを書いてある。 ちゃんと、アンチパターンを挙げるだけでなくじゃあ代わりにどうしたら上手く解決出来るのか、とかアンチパターンとは言ったがこういう場合は使っていいだとか建設的な議論がされている。 ここで挙げられているアンチパターンには実際に問題が明みになるまでアンチパターンと気付けないようなものも少なくなく、この本で予習するかしないかで生死が分かれる。 テーブル設計のミスは中々に致命的である。

43. 理論から学ぶデータベース実践入門

アンチパターンは超絶実践的な話だったがこちらは理論の話。リレーション代数や正規形の話、インデックスのアルゴリズムなど。第4正規形だとか関数従属性だとかが分からないならこの本を読むといい。

型がある人がやるから型破りとはいう実用上正規形を崩すにせよがまずはこの本で理論的に綺麗なテーブル設計を知ると良いと思う。

44. Redis入門

Redisの機能を使いつつアプリケーションをいくつか作っていく。最初読んだ時に割と「そこまでRedisでやるのか」と思った。 入門とはいいつつもシャーディングやLuaによるスクリプティングなども取り扱っており、中々読み応えがある。

45. 7つのデータベース 7つの世界

先に7つの言語 7つの世界を挙げたがこの本も良書だ。むしろ私はこちらの方が好きだ。

PostgreSQL、 Riak、 Redis、 HBase、 MongoDB、 CouchDB、 Neo4j。思うに、プログラミング言語に比べてデータベースは重くて気軽には試せない。 それを考えると7つというのは非常に大きな数字だ。色々なデータベースを知って適材適所使おうと思うならこの本こそ最適だ。

46. 適応的分散アルゴリズム

この本は昔図書館で借りて読んだ。なんとなく名前だけに惹かれて借りた。そして退屈だなと思いつつ読み終わって返した。 しかしそれから幾許か。分散データベースやアクターモデルなんかが頻繁に出てくるようになってよくこの本を思い出す。

ノードとノードの間にどれだけ遅延があるかも分からないメッセージが届かないかもしれないノードが故障しているかもしれない、あるいは間違った情報を送ってくるかもしれない。 そんな中で合意形成したりリーダを選出したりマルチリードマルチライトなメモリを作ったりと面白いことを議論してある。

次本屋で見付けたら絶対書いたい。そんな本。

47. Parallel and Concurrent Programming in Haskell

Hey Hey Haskell本(?)。和訳も出ている。

オンラインで読めるのでそれで読んだ。 内容がHaskellと密結合しているのでなんとなくでもHaskellを読めないとこの本も読めない。

個々のプログラミング言語の機能の1つとして並列/並行のAPIについて述べられていることはあるがここまで様々に扱っているのは見たことがない。 よく「これ以上詳しく書こうとすると本が一冊書けてしまう」と流される部分を実際に本一冊書いてしまったような内容。

並列/並行プログラミングに興味があるならHaskellを読めるようになってこの本を読むと良いと思う。

48. Reactive Messaging Patterns with the Actor Model

デザインパターンのアクター版。Akkaを題材に扱っている。 これこそ「人類が既に解決している問題」であり、Akkaを使うにあたって読むといいと思う。 Akkaに固有の話もあるが大部分はBeamVMを始めとした他のアクターシステムにも共通する内容になる。

Akkaを使う各社で読書会が開かれてその内和訳が出るところまで見えた。

49. Unicode標準入門

自分の作ったLispでマルチバイト文字を扱おうと思うとUnicodeについては避けて通れない。 バイト列とエンコーディングとコードポイントと文字集合と文字とグリフとフォントと、これらの違いと関係について分かってないのならUnicodeについて勉強した方がいい。 ただでさえ複雑なUnicodeなのに基本の概念が分かってないのなら話にならない。

扱っているのがUnicode3.0とやや古いものの基本的な部分は変わらない。というか、最近のUnicodeのバージョンアップは文字集合が拡大されているだけと思ってるんだけど合ってるかな?

50. セキュリティコンテストチャレンジブック

セキュリティコンテストに興味がなくてもこの本は役に立つ。 プログラマなら「こういうコードを書くと脆弱性になる」とは知っていても実際にどういう攻撃が可能なのか知っている人はそんなにいないのではないか。 この本を読めば少しは分かるようになる。話題もバイナリ解析からネットワーク、Web、SQLと色々ある。

ところで今目次をみたら酷い誤植があった。やたらバイナリ解析したいらしい。


おわりに

お気に入りの本を挙げていったら50冊近くあったのでキリ良く50冊にした。 思ったよりも50冊は多くて、日曜日の半分が潰れたが色々吐き出せてよかった。

Written by κeen