先日「Goならわかるシステムプログラミング」を読み終わった。
Goならわかるシステムプログラミング(紙書籍)
https://www.lambdanote.com/products/go
概要
この本は元々ASCII.jpで連載されていた同連載を加筆修正して書籍化したものだ。
ASCII.jpの連載「Goならわかるシステムプログラミング」がパワーアップして書籍化されます
http://blog.shibu.jp/article/181327596.html
なので、「内容が気になるけど読めるかわからない」という人でもWebの連載を見て雰囲気や内容がつかめる。
ASCII.jp:Goならわかるシステムプログラミング
http://ascii.jp/elem/000/001/235/1235262/
じゃあWebの連載を見れば買う必要が無いのかというと、タイマーやクロック、セキュリティについての章を追加されていたり、 加筆も大量に行われているとのこと。 また、単純にボリュームが大きいので、Webで見てスクロールで行ったり来たりするよりも、本のほうがより内容に集中できると思う。
所感
まったくのプログラミング初心者には厳しいと思うが、ある程度プログラミング経験がある人ならばとても読みやすいのではないか。自分の知識はだいたい以下の感じだが、すんなり読めた。
- 大学の時情報系だったので、基本情報技術者くらいのシステム原理はなんとなく覚えている
- 2,3年前に一度Goを勉強していて、Goの文法は一通り理解している。
「Go難しそう」と思う人もいるかもしれないが、著者の渋川さんが書かれている通り、
システムプログラミングの本はだいたいC言語で書かれているので、相対的にはかなり優しい(シンプルな)サンプルコードになっている。
また、自分はvim-goの操作方法を覚えるという目的もあったため、コードはだいたい写経した。
https://github.com/budougumi0617/gsp
最初に実行・デバッグ環境の構築方法が書いてある
この本では最初のVisual Studio CodeによるGoの環境構築、デバッグ方法がまとめられている。
なので、あまりGoに詳しくないひとでも簡単に写経してブレークポイントを貼って挙動を確認することができる。
サンプルコードがシンプルで動かしやすい
この本はシステムプログラミングを理解するのが目的なので、実際に動かしてみることが大事だと思う。
文中にあるサンプルコードは特定のある処理にフォーカスしたサンプルコードのため、長くても1ページ程度に納まるコードだ。
なので、1機能として切り出されているので、(自分はあまり書けてないのだが、)テストコードを書く練習もできそうだ。
(テストしやすいin/outにしてあるわけではないので、そこは自分でいい感じに変える必要がある)
練習問題や自分で考えるネタも含まれている
4章くらいまでは章末に練習問題についており、理解を確認することができる。
また、それ以降でも少し省略されているコード(たとえばcontext
を使わない実装になっているetc)があるので、
自分でサンプルコードを改良したりして手を動かすことができる。
練習問題については、回答がどうしてもわからない場合はWebの連載を確認すれば解答が載っている。
Goの実装パターンの勉強としても読む価値があり
システムプログラミングとしてもそうだが、Goの標準関数の理解あるいは実装パターンの勉強・確認としても良い内容だった。
「os
ってこういう関数最初からあったのか」だったり「sync
ってこんな感じで使うのか」ということも発見もあってGoの勉強にもなった。
最終章のコンテナの章だけ要Linux環境
それまでの章はOS依存はあまりなく、あってもOS別の実装方法や確認方法が記載されている。
が、最後のコンテナの章だけはLinux環境じゃないとサンプルコードを動かすことができない。
自分はMac環境だったので、それ用にLinuxのDockerコンテナを作った。
[Goならわかるシステムプログラミング]libcontainerで実装したLinuxコンテナを起動するためのDockerfile
終わりに
今は読書会で同著者の「Real World HTTP」を読んでいる。
そちらもGoのサンプルコードで実装が示されているので、同じように楽しめながら読めそう。