Bookshelf

May 12, 2017  

お気に入り、あるいは、役立ったと感じた書籍の紹介。

ソフトウェアエンジニアリング

 特定のプログラミング言語(e.g. C, Pyhton)、ソフトウェア(e.g. Docker、Elasticseach)、ライブラリ(e.g. Tensorflow, Vue.js)に関する書籍は、すぐに陳腐化してしまうので、Web上のリファレンスやチュートリアル、テックブログなどを読む方が良い。 特定の実装に依存しない知識でも(コンピュータサイエンスは進歩するので)陳腐化していくが、前者よりは遅いので、体系化された本で学んだ方が効率的だと思う。

珠玉のプログラミング 本質を見抜いたアルゴリズムとデータ構造

 基本的なアルゴリズムやデータ構造も学べるが、どちからというと、プログラミングの難しさと面白さとは何かを教えてくれる書籍と感じた。なので、古い本ではるものの現在でもその価値は珠玉である。話は入門的なので、コードを書き始めた頃に読むと良い感じ。

アルゴリズムクイックリファレンス 第2版

 読んだのは第1版なので、その感想。僕はあまり数学が得意ではないので、理論より実装よりのこの本は気軽によむことができた。具体的には、各アルゴリズムの計算量に対する議論はあるが、数学的証明ではなく直感的な解説がなされている(やや、もやっとはする)。浅く広く、アルゴリズムとデータ構造の引き出しを増やせる本。

Hacking: 美しき策謀 第2版 ―脆弱性攻撃の理論と実際

 コンピュータセキュリティの本で一番面白かった。ソフトウェアの脆弱性とは実際にはどういうものかが良くわかる本。即効性が欲しいのであれば、診断にしろフォレンジックにしろ監視にしろ、いろんなツールの使い方を覚える方が良いと思うが、コンピュータセキュリティの問題を理解するなら、本書が良いと思う。

暗号技術入門 第3版

 読んだのは第2版なので、その感想。あまり数学数学してない暗号本。タイトル通り入門書で、とてもわかりやすい。セキュリティ専門でない人なら、この本の知識で暗号関連記述の理解は十分な気がする。3版欲しい。

SQLアンチパターン

 副題のAvoiding the Pitfalls of Database Programmingが、適切な紹介。DBの実装や運用に関する話は0で、設計とSQLプログラミングにフォーカスしている。個人的には、過去に踏んだ間違いがいくつもあって、感慨深かった。アンチパターンの説明に加え、ソリューションはもちろんのこと、アンチパターンを用いても良い場合も解説されていて、面白い。

マスタリングTCP/IP 入門編 第5版

 読んだのは第4版で、「ネットワークはなぜつながるのか」とどっちが良かったか悩んだ。各種プロトコルの概要がわかる本(確か無線通信周りの話はほとんど無かった)。学部生の頃に読んで、入門書として良い本だと感じた。

ふつうのLinuxプログラミング Linuxの仕組みから学べるgccプログラミングの王道

 Linuxを使い始めた頃に、Linuxコマンドがどう作られているのかとか、ネットワークプログラミングとはどういうものかとかがこの本で少し理解できた。この本を読む前からWebアプリケーションプログラミングとかはしていたが、HTTP通信のイメージがよりクリアになった気がする。

[Web開発者のための]大規模サービス技術入門 ―データ構造、メモリ、OS、DB、サーバ/インフラ (WEB+DB PRESS plusシリーズ)

 Webサービスをどうスケールさせるかの話も面白かったけど、Webサービスを構成する要素の全体像がわかりやすいと思った。アプリケーションサーバーにしろデータベースにしろ、個々の技術に関する書籍はあるけど、Webサービス全体像が分かる本は(読んだこと)無かった。

コンピュータシステムの理論と実装 ―モダンなコンピュータの作り方

 NAND回路でテトリスを作る話。個々の要素は必要最低限の解説だけど、コンピュータを構成する要素全体を通して学べてよい。アーキテクチャに詳しい人だと退屈かもしれない。

はじめて読む486―32ビットコンピュータをやさしく語る

 暇つぶしに手に取った本だけど、内容が濃くて驚いた。CPUとOSとアプリケーションの関わり合いが実装レベルで解説されている本。OSの話が中心なので、Windowsの入門書としても良いのかも。シリーズ本らしく、他の本も読んでみたい。

増補改訂版 Java言語で学ぶデザインパターン入門 マルチスレッド編

 並行処理を書く機会がでてきたときに、登場する概念がよくわからなかったので、本書を読んだ。こういうパターンは、自分で思いつける気がしないので、並行処理を書く前に読んでおいて良かった。

その他

 アプリケーションやビジネスアイデアを考えるとき、あるいはそれらに付随する作業の意思決定で、役立ったと感じた本。ソフトウェアエンジニア本に比べて、陳腐化の速度は遅いと思うが(時代が変わればルールも変わるので、本当に遅いかはさだかではない)、役立ったの判断は難しい。書くのに疲れたので、個別の紹介は割愛する(また書く)。