『初めてのGo言語』 - O'Reilly Japanを読了したので、その書評を記します。読了までにかかった時間は、合計で約25時間でした。
本書の概要
公式サイトの紹介文から引用します。
イディオマティックなGo言語の解説書。構文がシンプル、静的型付け、タイプセーフでメモリセーフ、バグが入り込みにくい、並行処理が得意、実行速度が速い……これらの魅力的な特徴を生かすためには、Go言語らしい書き方を可能にする「イディオム」を学ぶ必要があります。Go言語のイディオムをマスターすれば、効率的で読みやすいコードを書けます。本書では、Go言語の基本機能を明快かつ簡潔に説明しつつ、イディオマティックなGoコードの書き方やGoプロジェクトの設計方法を解説します。読者はベテランのGo開発者のように考える術を学べます。
前提
筆者について
- 情報系(数理)の大学院生であるが、コンピュータサイエンス全般にはまだ精通していない
- プログラミング経験およびグラフ理論・最適化・アルゴリズムなどの数理系の知識はあり
- 一方で、ネットワーク、データベース、OSといった分野については現在学習中
- PythonやJuliaなど、複数のプログラミング言語の使用経験あり
- Go言語は今回が初めて
読書の背景
私は現在学生で、比較的まとまった時間が取れる今のうちに、コンピュータサイエンスの基礎を幅広く学びたいと考えています。最近はさまざまなCS関連書籍を読み進めており、その一環としてGo言語に注目しました。
Goを学ぼうと思った理由は以下の通りです:
- Goならわかるシステムプログラミング 第2版を読みたかった
- GoでWebアプリを開発してみたかった(Go Web Programmingに興味)
- Kubernetes開発に関心があり、その基盤となる言語としてGoが使われている
- 「GoogleのC言語」と称されることを知り、低レイヤーにもアクセスしつつモダンで書きやすい点に魅力を感じた
本書を選んだ理由
Go言語の入門書としてよく挙げられる教材には以下があります:
まず「A Tour of Go」で基本的な文法を一通り学んだうえで、「実用 Go言語」と本書を比較検討しました。前者は実践的なテクニックが中心であるのに対し、本書はGoの全体像を体系的に学べると感じたため、本書を選びました。
感想
正直に言えば、入門書としてはかなり難易度が高く感じました。副題にある「他言語プログラマーのためのイディオマティック Go実践ガイド」が示すように、他の言語に習熟したプログラマが対象であることが読み取れます。
実際、「対象読者」の説明には次のように書かれています:
この本の対象読者は、2番目(あるいは5番目あたりかもしれませんが)にマスターするプログラミング言語を選ぼうとしているソフトウェア開発者です。
私自身は7章あたりで一度つまずき、「A Tour of Go」を最後までやり直してから再読しました。それにより多少読みやすくなりましたが、それでも難しい所は多かったです。
また、本書ではコンピュータサイエンスに関する知識が頻繁に登場し、それらの背景がないと理解が難しい場面が多くありました。常に「なぜGoはこのような仕様になっているのか?」という視点で論じられています。
特に印象的だった点(具体例)
- (特に前半では)コード例がほとんど登場せず、概念的な説明が中心
- 7章のインターフェース解説では、「暗黙的実装のメリット」がいきなり議論され、GoFなどを引用して話が展開。ハウツーの説明より先に深い議論が入るため、Goでの設計経験がないと理解が追いつきにくい
- 10章ではgoroutineのランタイム実装とOSのスレッド管理の違いに触れているが、スレッド・プロセス・スタック・スケジューリングに関する知識がないと難解
このように、本書は単なるハウツー本ではなく、Go言語という実践的なツールを通じて、コンピュータサイエンスの考え方を深めるための書籍だと感じました。
読むのに時間はかかりましたが、非常に多くの学びがありました。一度読んだだけでは理解できなかった部分も多く、今でもGoのコードを書く中で、辞書的に繰り返し参照しています。
次に読みたい本
現在は先に挙げた Goならわかるシステムプログラミング 第2版 を読み進めています。その後は、Go Web Programming に取り組む予定です。
そのほか気になっている書籍:
こんな人におすすめ
- 「A Tour of Go」などを終えて、基礎的な文法は身についているが、体系的にGoを深く学びたい人
- Goを通じて、コンピュータサイエンスの根底にある思想や設計を学びたい人
- 他のプログラミング言語に習熟しているが、Goは初めてという人