はじめに
こんにちは、Wantedly でエンジニアをしている南です!
突然ですが、2016 年もあと少しで終わりです。皆さんは明日から始まる3連休、またその後に訪れる正月休みをどうお過ごしの予定でしょうか? 「実家に帰ってゆっくりする」や「街に繰り出して楽しく過ごす」などいろいろな過ごし方があると思いますが。。。エンジニアであれば、「長期休暇は技術書を読みまくるぞ」という考えの方もいるのでは無いかと思います。むしろ、真のエンジニアであれば、長期休暇は技術書を読むためにあるといっても過言ではありません。
そこで今日は、長期休暇で読むのにぴったりなオススメ技術書を紹介してみたいと思います!
テーマは「低レイヤーの仕組みを知る」
今回選ぶ技術書のテーマは、「低レイヤーの仕組みを知る」です。
ソフトウェアの開発をする際、僕らは様々なものを利用します。Rubyの様なプログラミング言語、Rails などのフレームワーク、PostgreSQL や Redis などのミドルウェア、HTTP/2 などのプロトコル、Linux などのOS、CPU や GPGPU などのプロセッサ。それぞれのレイヤーで適切なものを利用しながら、1つのシステムを作り上げます。
ここで気になってくるのが、僕らが利用してる “それら” の仕組みはどうなっているのか?という事です。Rubyは内部でどういう動作をするのか、あるいはLinuxカーネルは、あるいはCPUは。。。
考え出すときりがありませんが、僕らが依存している「低レイヤー」の「仕組みを知りたい」という気持ちはどんどん湧いてきます。
今回は、そんな気持ちに応えるために「読む事で仕組みを知ることができる」技術書をまとめてみました。
- Rubyのしくみ -Ruby Under a Microscope-
- 正規表現技術入門 ――最新エンジン実装と理論的背景 (WEB+DB PRESS plus)
- 内部構造から学ぶPostgreSQL 設計・運用計画の鉄則 (Software Design plus)
- ハイパフォーマンス ブラウザネットワーキング ―ネットワークアプリケーションのためのパフォーマンス最適化
- Hacking: 美しき策謀 第2版 ―脆弱性攻撃の理論と実際
- Linuxカーネル2.6解読室
Rubyのしくみ -Ruby Under a Microscope-
Rubyのしくみ -Ruby Under a Microscope- は Ruby コードを実行した時に、内部でどういった処理が行われているかを解説している書籍です。
CRuby (C言語によるRuby処理系の実装。matz さんら日本人のコミッターが多い)の内部動作に対する説明が中心で、特にRuby 1.9から導入されたYARVというVMに対して理解を深める事ができます。YARVがスタックマシンとして実装されている事も興味深いですし、バイトコードを解釈してからYARVが内部で行う動作の説明も大変面白いです。この本を読むと、変数探索や定数探索、メソッド探索、大域ジャンプの際に行われる処理や Object, Block の内部表現を知る事ができます。 また、おまけとしてJRubyやRubiniusなどのCRuby以外の処理系との比較も載せてあり、それぞれの利点や欠点を知ることもできます。
と考えているエンジニアにオススメです!
正規表現技術入門 ――最新エンジン実装と理論的背景 (WEB+DB PRESS plus)
正規表現技術入門は、正規表現エンジンの動作について解説している書籍です。
興味深いのが、正規表現エンジンには大別して2つの種類が存在するという説明。オートマトン型と呼ばれる実装では受理できるのは「正規言語」に限定されるものの、パフォーマンスに優れます。一方、VM型と呼ばれる実装では再帰的な構造を受理できる表現力をもつものの、入力文字列長に対して指数的に性能が劣化します。 Google RE2 やPCRE、鬼火など各正規表現エンジンの機能、性能の違いが実装の観点から説明されていて、とても分かりやすい上におもしろかったです。また、図やコード例が豊富で、簡単に概略をつかめる様にもなっています。JITコンパイルなどの最適化、正規表現の表現力の限界の理論的な証明など、細かい部分も詳細に解説されています。
と考えているエンジニアにオススメです!
内部構造から学ぶPostgreSQL 設計・運用計画の鉄則 (Software Design plus)
PostgreSQL の内部構造について説明し、その理解をもとにPostgreSQLの利用方法を解説している書籍です。
PostgreSQL 内部では複数プロセスが協調して動作しているのですが、この書籍ではどういったprocessがどういった役割を担っているか、どんな風にprocess同士でコミュニケーションをとるのかなどが記載されています。また、DBのデータは結局はファイルに書き込まれる訳ですが、どういったディレクトリ構成でどういったデータレイアウトでデータが書き込まれるのかも分かります。その他、JOINのアルゴリズムやクエリ実行計画の話も載っています。 中身を知らないとブラックボックスとしてみてしまいがちな RDB が、1つのアプリケーションに過ぎないことを実感できて、とても面白いです。
- PostgreSQLを内部の仕組みも理解した上で利用したい
と考えているエンジニアにオススメです!
ハイパフォーマンス ブラウザネットワーキング ―ネットワークアプリケーションのためのパフォーマンス最適化
Web の通信部分でのパフォーマンスについて解説している書籍です。TCP、TLS といった低レイヤーから説明を積み上げていき、HTTP/2 や Web RTC といった高レイヤーのプロトコルにまで詳細な説明が及びます。
Web の通信においては「レイテンシ」がボトルネックになる事、ラウンドトリップを減らしレイテンシによるパフォーマンスへの影響を小さくする為にプロトコルレベルでの改善が図られている事などが分かりやすく説明されています。特に、HTTP/1.x が抱える問題点の説明が秀逸で、HTTP/2 が求められていた理由や解決している問題が自然と理解できる様になっています。 また、TCPやTLSのレイヤーでもラウンドトリップを減らすために様々な最適化が取り入れられている事が分かり、興味深いです。レイヤーをまたいだ最適化の話が出来るのは、この書籍の強みだなと感じます。
変化球的な話題としては、4Gなどのモバイルネットワークについても詳細な説明があります。モバイルネットワークの詳細な解説はあまり見かけないので、その意味でもお得な一冊かもしれません。
と考えているエンジニアにオススメです!
Hacking: 美しき策謀 第2版 ―脆弱性攻撃の理論と実際
ソフトウェアの脆弱性がどんな部分に存在するのか、脆弱性をついた攻撃手法はどんなものか、といった事を解説している書籍です。
バッファオーバーフローの様な定番の脆弱性は誰もが知っていると思いますが、それがどれほど危険な事か、脆弱性をついた攻撃がどれほど簡単なのかについては、全員が知っているとは言いがたいと思います。この書籍では、脆弱性の存在するprocessを1章で実装し、後の章ではそのprocessを攻撃してroot権限を奪う鮮やかな手並みが紹介されています。その一連の手順を見た後だと、「root権限で動くprocessに脆弱性があるとすごく危険」という事実を、実感できる様になります。
また、この書籍の主題ではないものの「C言語処理系によって生成されたバイナリ」の動作に対する説明もとても充実しています。メモリレイアウトなどを知らない人に「脆弱性の説明」をしても伝わりづらいためだと思われますが、とても親切な良書です。
- 脆弱性が存在するとどれほど危険なのか、ちゃんと理解したい
と考えているエンジニアにオススメです!
Linuxカーネル2.6解読室
Linux カーネル 2.6 のソースコードを元に、カーネルの設計思想や機能、実装などを解説している書籍です。
Linux カーネルの内部動作がソースコードを元に解説されていて、「実際にどう動いているのか」のイメージをつかむことができます。この書籍を読むと、Linux カーネルも「システムコール発行」や「割り込み」による要求を受けて処理を行う、1つの「イベント駆動型のソフトウェア」に過ぎないと実感できる様になります。(そういった説明が1章でなされています)
OSの仕事として「プロセス管理、メモリ管理、ファイルシステム、ネットワーク、デバイス管理、システムコール」などがあるのは広く知られていますが、それらの機能が実際にどう実装されているかはあまり知られていないと思うので、とても興味深い内容となっています。図が豊富で、説明も充実しています。
- Linux を内部の仕組みも理解した上で利用したい
と考えているエンジニアにオススメです!
まとめ
「低レイヤーの仕組みを知る」をテーマに、6冊の技術書をオススメしました。
少しでも興味を持って頂ければ幸いです!
また、今回は自分が読んできたものを中心にまとめてみましたが、他のエンジニアなどもそれぞれオススメの技術書を持ってると思います。いつの機会かまた、こういった形で共有したいと思います!
Wantedly, Inc.では一緒に働く仲間を募集しています