Scribble at 2022-06-03 11:53:50 Last modified: 2022-06-03 22:49:45

思ったほど時間がとれなくて "Pro Go" は殆ど読み進められていない。その代わりに他の本を軽く眺めてみたので、ざっと感想だけ書いておく。

まず、少し期待はしていた Manning の "Go in Action" (William Kennedy, Brian Ketelsen, and Erik St.Martin, Manning, 2016) は、かなり困惑させられた。前にも書いたように、僕はプログラミング言語のテキストで冒頭に capability として実装例を詰め込んで紹介する〈一巡り方式〉という構成・編集方針には賛同し難いのだが、この "Go in Action" も冒頭に(断片的で実は動かない)実装例のコードを並べている。そして、それだけではない。"Go in Action" には、驚くことに制御構造の説明が出てこないのだ。どこを探しても for 文を説明する章節が見つからない。ひょっとすると "early release"(書きかけ)を読んでいるのかと思ったが、そうでもないようだ。索引で "for" が出てくる該当箇所を見ても、話のついでに言及されているていどで、for 文としての説明がどこにもない。これはどういうことなのか理解に困る。初心者向けではないのだろうか。

次に "Go Programming Language for Dummies" (Wei-Meng Lee, John Wiley & Sons, 2021) も見てみた。こちらはプログラミングという実務そのものについても初心者を想定して書かれているシリーズなので、基本的な事項については懇切丁寧に説明されているが、closure や interface などは説明が雑で、なんでそんなものが必要なのか分かり辛いと思う。スタンダードなテキストの説明で分かり辛いところがあれば眺めてみてもいいが、やはりプログラマが最初に読むような本ではないと思う。

そして、Wrox のように著者の写真を表紙に使うようになった Packt の "Mastering Go" (Mihalis Tsoukalos, Packt, 2018) だが、これも残念ながらいきなりログを保存するというプログラムを最初に説明していく〈一巡り方式〉を採用していて、しかもコマンドラインで Go を動かすにあたっての標準入力や標準出力という低レベル(*)の話と一緒になっているせいで、話題としては有益なのに Go の実装を組み合わせているせいで、余計に複雑な内容となっている。それから第2章で Go の処理系について解説されている。これは、もちろん Go という処理系の動作を知るには必要な話題だし、言語の「ユーザ」であるプログラマが知っておいてしかるべき話題だとは思うけれど、本書で後続する話題に効果的なかかわりがない限りは appendix として別に解説しておくべきかもしれない。でないと、実質的に「閑話休題」とかコラムの扱いになってしまうからだ(appendix にして無視されるよりはマシなのかもしれないが)。あと、この本では if... then とか for ループとか switch 文などの制御構造に関わる説明がバラバラに出てくるし、しかも条件文の解説がないという奇妙な構成になっている。でも、それはそのはずで、本書は入門書の類ではないからだ。 "This book is for amateur and intermediate Go programmers who want to take their Go knowledge to the next level as well as for experienced developers in other programming languages who want to learn Go without learning again how a for loop works." とあるため、既に Go をひととおり学んだ人が読むものだから省略があるのだろう。そういうことなら、逆に本書は初心者向けの説明が多くて「復習用」という印象がある。プロの技術者向けでもない。

最後に、こうして幾つかの本を眺めてみて気付いたのだが、"Pro Go" は1,000ページを超える大著ではあるけれど、思ったほど Go の機能や言語仕様について詳細かつ exhaustive に書かれているわけでもないということだ。以前も書いたように無駄な繰り返しが多いというせいもあるが、些末な事柄についていちいちコードを書いて見せるという手法をとったおかげで、思ったほど言語の仕様を十分に取り上げられていないにもかかわらず分量が膨らんでしまったようなところがある。たとえば array, slice, map というデータ・コレクションの説明をしているところでは、これだけで50ページを費やしているのに、説明されている事項は決して多くないし、逆に些末な話題を取り上げすぎて三つの違いや使い分け、あるいは要素に対する操作の直観に反するような結果についてクリアな説明ができていないという印象がある。

ということで、いつものことながら「俺が書いてやる」という気分になってくる。でも、もちろん軽率にそんなことをするつもりはない。Raspberry Pi について解説を書いたときも、PulseAudio について夥しいウェブ・ページや Linux Audio 関連のドキュメントを調べたが、本来の〈僕自身の〉目的からすれば、玄関のチャイムが聞こえたらいいのだから、PulseAudio の設定をあれこれといじくるよりも音をちゃんと拾って室内のパソコンまでデータを送ってくれるケーブルを買えばいいだけなのだ。そういうお金がない環境なら、どうにかして手持ちの道具だけでなんとかしなくてはいけないという事情から別の対応を考えなければいけないが、その場合でも〈僕自身の〉目的からすれば自分の環境を整備する方が先であって、公開用にウェブ・ページを制作するなんてことは、どう考えても二の次でよい。

Go についても、日本語で書かれた教科書は一つも見ていないので良書があるかもしれないし、洋書の大半が出来損ないだからといって、僕自身が Go の習得に困るわけでもない(それで困るくらいなら、こんな投稿をわざわざ書いたりしない。単に Go の習得をあきらめて別の言語を学ぼうとするだけだ)。どう考えても、プログラミング言語を習得して最初にやるべきなのは実績を出すことだ。とりわけ、僕らのようなプロの技術者には、それこそが技術を学ぶ第一の目的であり、初心者向けのウェブ・ページなんて実はどうでもいい話である。正直言えば、僕と同等のスキルがある人なら、勝手に読んで使い始めて実績を出せばいいだけだ。不十分ではあっても多くの著作が出ていて、それぞれ異なる指向で編集されているわけだし、とりあえず目を通して自分で何が作ってみることである。それを自力でやれて、初めてアマチュアのレベルと言える。僕らのようなプロは、そんなところで他人の良いウェブ・ページの解説がなければ困るなんてレベルでものごとを習得している筈がない。

==========

* 言っておくが、開発の話題において「低レベル」というのは侮蔑表現ではない。OS の制御機能に近いとか、マシン語に近いという意味だ。ただし、マシン語に近いという意味で言うときは「低水準」の方が使われやすいかもしれない。いずれにしても、あまりにも誤解が多いので、「底レベル」と表記した方がいいのではないかとすら思う。

  1. もっと新しいノート <<
  2. >> もっと古いノート

冒頭に戻る


※ 以下の SNS 共有ボタンは JavaScript を使っておらず、ボタンを押すまでは SNS サイトと全く通信しません。

Twitter Facebook