Go言語を始めました。
何か新しいことを学ぶ時には、ワンストップで体系立て全体像が把握できる、書籍を読むやり方が好きです。
今回「Go言語による並行処理」を読んだのですが、とても良かったので、ここに感想を書きました。
並行処理は思いつきでは書けない
Go言語の面白い所の1つは、並行処理(非同期処理)の仕組みが言語レベルで備わっている所かと思います。
並行処理関連の文法そのものはシンプルで、Go言語の入門書にも必ず載っています。
しかし問題は
「文法は分かるけど、じゃあ実際にそれを使って並行処理させようとした時、どう使っていいのかサッパリ分からない」
のです。
並行処理はアルゴリズムやデザインパターンに近く、文法を知っていれば自ずと導き出せるものではなく、知らないと出てこない類のものです。
しかも、並行処理に関するまとまった情報はあまり多くなく、自分で意識して情報を集めていく必要があるのですが、 この本ではそれらを、体系立てて網羅的に学ぶことができるので、とても学習効率がいいのです。
文法と並行処理実装のギャップが大きいので、文法の知識だけであーだこーだやっていても、実装レベルに到達することは難しいかなと思うのですが、 この本では、順を追って実装にまで導いてくれるので、知識ギャップを埋めるのにとても役立ちました。
Go言語の入門書を一通り読んだ後、あまり間を開けずにこの本を読んだのですが、おかげで回り道することもなく、時間の節約ができてよかったです。
並行処理を自分で考えられるようになる
Go言語の並行処理文法を学んだ後すぐに、並行処理実装例を見た時は、何でこんな使い方が思い浮かぶんだと、自分では到底使いこなせそうになく感じました。
しかしこの本では、その発想のプロセスが記載されているので、本を読んだ後では、ゼロから理論立てて並行処理実装を考えることが、ある程度できるようになります。
並行処理は、並行処理文法を組み合わせて、いかにやりたかった並行処理をできるようにするかの、パズル問題のようなものです。
そこに気づくと、並行処理それ自体が、プログラミングおもちゃの様に楽しくなってきます。
この本のおかげで、並行処理を難解なコンピューターサイエンスではなく、ホビーと感じられるようになりました。
Go言語やるなら並行処理
Go言語にデフォルトで並行処理文法が組み込まれているということは、並行処理はGoogleがGo言語で絶対にやりたかったことで、 他の言語ではなく、あえてGo言語を選択するのなら、並行処理を使わないのはもったいないです。
ただ、そのためには、前述のとおり、単にGo言語の文法の学習だけでは足りず、別途Go言語を使った並行処理の学習が必要なのですが、この本は今のところ、ざっと調べた範囲では、そのための唯一の書籍かと思います。