2019年11月29日金曜日

読書環境

今日読んだ本、Go Systems Programming: Master Linux and Unix system level programming with Go (Mihalis Tsoukalos(著)、Packt Publishing)の感想。

タイトルのSystems ProgrammingのSystemsってどういう意味か気になって本著を読んでみることに。というのも、オペレーティングシステムといえばC/C++で書かれていて、最近流行ってるっぽい新しい言語、Rust、Swift、Go言語等だと、この順に低級の部分まで書けるという印象をなんとなく持っていて、Rust、Swift等だと実際の詳細はどうか分からないけど、低い部分、OSも書けるのかもと思ってたけど、もしかしたらGo言語でもそうなのかもと思って。

実際に本著を読み終えたら、Go言語でシステムを書くというのではなく、Go言語でシステムを扱うコード、プログラムを書くといった感じだった。なので、かなり低い部分のことまでGo言語で書けるのかどうかは分からず。

内容は、Go言語の基本的なことをさっとおさらいしてから、アルゴリズムの話があったり、テキスト処理や正規表現、システムファイルの扱い、プロセス管理、さらにWebやネットワーク周り、SQLとNoSQLの両方のデータベース等のことまでGo言語でコードを書いてプログラムを作成していくといった内容だった。実際にUnixやLinuxの様々なコマンドのcp、wc、whichなどをGo言語で作成していくといった進んでいく感じ。

また、Go言語の特徴である並行処理の書きやすさについての話、goroutines等の解説の割合も多かった。また、解説に加えて上記で作成したコマンドを並行化してよりGoの良さを生かした書き方、アルゴリズムに変更、修正していく感じも速くなっていくのが楽しかった。

全体的にバランスがいい印象だった。一つは著者の考えについて。文章を読んでいると、特に前半あたりの部分で著者はGo言語がお気に入りなんだなぁという印象を受けつつも、Go言語に固執するのではなく、RustやSwift、PythonやPerlとGo言語の違いを比較して、Goのみを勧めるのではなくRustやSwift、あるいはC言語も勧めていること。また、本著はGo言語で解説した本ではあるものの、LinuxやUnixのシステムプログラミングを学ぶことの重要性を強調していること。

他にバランスが良いと感じたのは、上記のこととも関連することだけど、Go言語とUnixやLinuuxの話のバランス。あくまで、Go言語を学ぶというよりは、Go言語でUnixやLinuxなどのオペレーティングシステムについて学ぶという感じだったこと。

なので、Go言語をすでに知っているけど、システムプログラミングはよく分からない、UnixやLinuxについて全然知らないという人に良さそうな一冊。また、UnixやLinuxのシステムプログラミングを通してGo言語をしっかりと学ぶのにも良さそうな一冊。もちろん、どちらも同時に学ぶというのにも最適。

ただ、Go言語を全く知らないという人にはちょっと難しかも。そういう人は、Head First Go等のGo言語の入門書を読んでから本著を読み始めた方が良さそう。

注意点としては、Go言語のバージョンがちょっと前1.8のだったり、そして本著では主にmacOSを使用してるけど、そのバージョンも現行のmacOS Catalinaではなくその前のmacOS 10.14 Mojaveの前のmacOS 10.13 High Sierraのさらに前のmacOS 10.12 Sierraだということ。Go言語のバージョンは現在1.13で、以前に読んだ改訂2版 みんなのGo言語に色々と変わった分があると書かれていたけど、本著にはそれが反映されてなかったり。また、macOSのバージョンについても、出力結果が多少違う箇所があるかも。出版日が数年前の2017年9月26日みたいだからしょうがないことではあるけど。

もう一つの注意点としては、Windowsについての言及がないこと。UnixやLinuxのシステムプログラミングをGo言語で学ぶという内容だからこちらも仕方ないことではあるけど。ただ、syscallパッケージを使用したコードや、シグナルハンドラーについてなどの部分はWindowsでは動かないコードもあるかもしれないけど、多くのコード、プログラムはWindowsでも使えそうなものだった。なので、OSとしてのWindowsを学ぶことにはならないかもしれないけど、WindowsでもLinuxやUnixのシステムプログラミングを学ぶことが出来そう。

ということで、本著によりGo言語とUnixやLinuxのシステムプログラムを学んだり復習したり、Go言語の良さを学べたり出来きで良かったし、また、学べたといってもまだ本著を読み終えただけで実際に手を動かしてコードを書いてプログラムを実行したり、Exercisesに取り組んだわけではないから、これから実際に手を動かして取り組んでいくのが楽しみだし、さらに、本著が面白かったから著者のMihalis TsoukalosさんのMastering Go、こちらは本著よりシステムよりもうちょっと上の部分だったりアプリケーションの部分っぽい、を読む機会を作ろうと思った今日この頃。

0 コメント:

コメントを投稿