yoshikipom Tech Blog

Webエンジニアが「低レイヤこわい」を治した技術書7冊

はじめに

Webエンジニアが低レイヤを学んだ方がいいと思っている理由は大体以下の感じ。

  • システム開発・運用に役立つ(例: スケーラブルなアプリケーション開発、パフォーマンス起因の障害調査)
  • 各技術の得意不得意が理解しやすくなる

学ばなくても機能の開発は可能かもしれないが、質のいいソフトウェア開発を行うためには避けて通れない。

キャリア初期は当然「低レイヤこわい」だったが、ある程度本を読んでいると「全体像は理解している」+「各領域の基本的な部分はちょっと調べれば思い出せる」くらいのレベルにはなった。自分の低レイヤのレベルはここにある本だけでも丁寧に取り組めばかなり自信がつくはず(自分は飛ばし読みしてしまったところもある、、、)。

低レイヤ全般の本

この2冊は低レイヤ周りの技術書記事でもよく見かけるので新鮮さに欠けるかもしれないが、自分も読んで良書だと思った。

プログラムはなぜ動くのか 第3版 知っておきたいプログラミングの基礎知識

プログラムを実行するときにCPUやメモリで何が起きるかわかるようになる本。図を用いてわかりやすく説明されており、まず全体感を知りたいなら最もオススメな本。自分は第2版を読んだので少し古い情報があるところが欠点だったが、2021/05に第3版が出ているのでその問題は解消されていそう。

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

論理ゲート、CPU、バーチャルマシン、コンパイラ、OSとボトムアップでコンピュータを作っていく本。各コンポーネントの役割説明と仕様が与えられて下から上に作り上げていく過程でコンピュータの仕組みを実感できる。エミュレータでハードウェア部分の仕組みの理解やデバッグが行え、実装例もインターネット上にたくさんあるのでかなり学びやすい環境ができている。それでもなおここにある中で一番時間をかけた本ではあるが、学びも多かったのでやってよかった。

トピックごとの知識を深める本

ここにあるような入門系の本を各トピック読んでおくと細かいことをググったときの理解度が上がるはず。

入門 モダンLinux ―オンプレミスからクラウドまで、幅広い知識を会得する

カーネル、シェル、アクセス制御、ファイルシステムなどLinuxがOSレベルでサポートする機能について学べる本。"モダンLinux"が対象になっている点も実用的で良い。

ゼロからのOS自作入門

独自のOSを作る本。説明が丁寧でカバレッジが広く、ウィンドウ処理やマルチタスクなど実用的なものを動くサンプル有りで教えてくれるところがスゴい。分量が多く(700ページ超)動かすコストも小さくなかったので途中からは読むだけになってしまったが、他の本ではカバーできていなかったどう動いているか知りたいところを知ることができた。

プログラマーのためのCPU入門 CPUは如何にしてソフトウェアを高速に実行するか

ソフトウェア実行を高速化するためにCPUが持つ様々なハードウェア・ソフトウェア最適化を学べる本。どういう条件だと効率化が難しいといった例をたくさん示してくれる。本来難しいはずの内容だが、わかりやすい構成や各機能の背景の説明によって楽しく理解できた。各種トレードオフにそれぞれのCPU実装がどう対応しているかもわかりやすくまとまっていてよかった。

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

ネットワーク関連の基本となるプロトコルを体系的に学べる有名な本。入門編だが、アプリケーション開発で基本となっている部分はわかりやすくカバーしてくれる。

Goならわかるシステムプログラミング

Go言語を使いながらシステムプログラミングを学べる本。 特に実際に使われているプログラミング言語がどうOSと連携しているのか学ぶことができた。言語に依存しない説明も十分にあるがGo言語に結びついた面白い話がたくさんあったため、Go言語を書くならオススメ。

おわりに

こうして振り返ってみるとコンパイラ周りはもう少し知識を深めてみるのも良さそう。