Goならわかるシステムプログラミング 第2版の表紙

Go ならわかるシステムプログラミング 第 2 版(ゴーナラワカルシステムプログラミング ダイニハン)

ハードウェア
著者:
渋川よしき(シブカワヨシキ)
出版社:
ラムダノート
出版日:
2022年03月23日頃
ISBN:
9784908686122
在庫:
メーカー取り寄せ
5(2 件 / 楽天ブックス)
中級者向け
Goシステムプログラミングオペレーティングシステムメモリ管理低レイヤプログラミングコンピュータアーキテクチャプログラミング教育実践的プログラミングコンピュータサイエンスプログラミング言語

なぜ注目されているか

ハードウェア
9
総合100 12 ランクダウン 7 件の言及
言及数
414
出版前出版日01220222023202420252026

書籍紹介

OS やメモリのこと、もう少しだけ詳しく知っておきたい。でも何から手を付けたらいいかわからない。教科書を読んでみても、ふだん書いているコードと違いすぎていまいちピンとこない……。
本書は、そんな方々のために、アプリケーションのコードから降りていくことで俯瞰的かつ具体的に低レイヤを自分の糧にできる、たくさんのエンジニアに読まれた書籍「 Go ならわかるシステムプログラミング」の改訂版です。

Go で書かれた「ふつうのアプリケーションのコード」から始めることで、「身近なコードの世界」と「メモリや CPU の世界」との間の巧妙で豊かなつながりが見えてきます。

技書の森解説

普段書いているアプリケーションのコードから一段ずつ下へ降りていき、 OS とメモリの世界を Go 言語で確かめる技術解説書です。『 Go ならわかるシステムプログラミング 第 2 版』は渋川よしき氏の著書で、技術書出版社のラムダノートから 2022 年 3 月に刊行されました (A5 判) 。元になったのは 2016 年 9 月から 2017 年 8 月にかけて ASCII.jp の「プログラミング+」コーナーで連載された Web 連載で、これを書籍化した 2017 年刊の初版に対し、第 2 版ではコマンドシェルや実行ファイルが起動するまでの流れといった、経験的になんとなく知っているだけで済ませがちな話題の章が追加され、分量が増しています。著者は HTTP プロトコルの解説書『 Real World HTTP 』 (オライリー・ジャパン) でも知られるエンジニアです。

全 19 章の構成: デバッガーからコンテナ自作まで

構成は、デバッガー を使って "Hello World!" の裏側を覗く第 1 章に始まり、 Go の入出力インタフェースである io.Writer と io.Reader 、システムコール、 TCP と UDP のソケット通信、ファイルシステム、コマンドシェル、プロセスとシグナル、スレッドgoroutine の並列処理、メモリ管理と ガベージコレクタ、実行ファイルが起動するまで、時間の扱い、コンテナと進む全 19 章です。付録では乱数、 TLS 、 ssh というセキュリティ関連の OS 機能と、デバッガーが対象プログラムを止めたり進めたりする仕組みまで扱います。最終章で libcontainer を使ってコンテナを自作する流れは、 Docker を日常的に使う人にとってブラックボックスの底を見る体験になります。

Go で低レイヤへ降りるというアプローチ

本書のアプローチを象徴するのが、第 2 章の節タイトルにある「 io.Writer は OS が持つファイルのシステムコールの相似形」という視点です。 C 言語で学ぶ従来のシステムプログラミングでは、ポインタ演算やメモリ管理という言語側の困難が主役になりがちで、 OS の機能そのものへたどり着く前に消耗しやすいのが実情でした。 Go は標準ライブラリのインタフェースが OS の機能の写し絵として設計されているため、普段のコードの延長線上に低レイヤが見えてきます。さらにスレッドと goroutine の関係やガベージコレクタの挙動といった、言語ランタイムと OS の役割分担そのものも主題に含まれており、 Go を仕事で使う人には二重に実利のある構成です。

『ふつうの Linux プログラミング』などとの使い分け

C で学ぶ王道を選ぶなら『ふつうの Linux プログラミング』 (青木峰郎 著、 SB クリエイティブ、第 2 版 2017 年) が定番で、 gcc と C を通じて Linux の流儀を体に入れる本です。仕事の言語が Go で、バックエンドやインフラ寄りの業務からシステム層へ降りたいなら本書が近道になります。また同著者の『 Real World HTTP 』はアプリケーションから上のプロトコル方向を掘る本で、下の OS 方向を掘る本書と対をなす関係にあり、 Web バックエンドの足元を固めたい人は 2 冊で補完し合えます。

前提知識の注意点と向いている読者

注意点として、本書は Go の文法そのものを教える入門書ではないため、 Go を全く書いたことがない人は文法の入門書を先に済ませる方がスムーズです。 Linux カーネルのソースコードやスケジューラの内部実装まで読みたい人にも、カーネル専門の解説書 が別途必要になります。その上で、 Web アプリケーションは書けるがその下で何が起きているかを説明できない、ソケットやシグナルやプロセスという運用現場の語彙を実装レベルの理解へ引き上げたい、というバックエンドエンジニアにとって、手を動かした分だけデバッガーもコンテナも中身の見える道具に変わっていく本書は、費やす時間の元が取りやすい 1 冊です。

言及 Qiita 記事 (5 件)

言及 Zenn 記事 (1 件)

この本に興味がある方におすすめ

この本に関連

関連記事

関連用語

共有:Xはてブ