「退屈な Go」あらため『初めての Go 言語』はよい本
なんと! この記事で本ブログ1,500本目なのですよ1。
🥁 ドンドンドン! パフパフ! 🎺
日記は別として,ブログは SaaS も含めて色々と遍歴してるんだけど,今まで千本も続いたことはなくって。 じゃあ,1,000本超えたところで記念記事を書けばよかったんじゃ? と思われるだろうが,そのときは完全に頭からすっぽ抜けてて,気が付いたら1,200超えてたのだ。 まぁ,でも,7年で1,500って凄くない?
というわけで記念記事だが,『初めての Go 言語』の感想というか紹介を書くことにした2。 パチパチパチ。
- 初めてのGo言語 ―他言語プログラマーのためのイディオマティックGo実践ガイド
- Jon Bodner (著), 武舎 広幸 (翻訳)
- オライリージャパン 2022-09-26
- 単行本(ソフトカバー)
- 4814400047 (ASIN), 9784814400041 (EAN), 4814400047 (ISBN)
- 評価
2021年に出た “Learning Go” の邦訳版。私は版元で PDF 版を購入。 Go 特有の語法(idiom)を切り口として Go の機能やパッケージを解説している。 Go 1.19 対応。
実際には紙の本ではなく版元の O’Reilly Japan でデジタル版を購入した。 技術関連本はやっぱ PDF が最善だよな。 いくらでも書き込みできるのもいい。
退屈な Go
この本はまず「まえがき」が面白い。 のっけから
だもん(笑) まぁ Go にネガティブな反応をする人の多くは「Go はつまらない」って言うみたいなので,たぶん間違ってない。 そして
と続く。 うんうん。
ここから Go のメリットについて記述があるのだが,これは
という一文に集約されるだろう。 Go が「退屈な言語」であることには意味があるというわけだ。
まぁ,実際に Go が「何十年にも渡って」使われる言語になるかどうかは分からない。 Go はようやく10代の思春期に入ったばかりだ(笑) でも上の「意図」に共感できるなら Go を選択するのは悪くないと個人的には思う。
今は20世紀の頃のような「変化しない要件を前提に堅牢な設計を組んでから忠実に実装する」時代ではない。 書籍『Clean Architecture』では
とし
と述べている。 これから数十年後に残っている言語がどんなものかは分からないが,コードを書くにあたって,この「戦略」の実行を容易にする言語がメインストリームに残っていくと私は思っている。
2021年に書いた「Go を褒め殺ししてみる」で,私は Go の特徴を「はやく作って はやく改(なお)す3」と評した。 Go が長期に渡って残っていく言語になることを期待したい。
2022年最新の Go 技術解説書
訳者まえがきでも述べられているが,原著の “Learning Go” が出版されたのは2021年で,いわゆる Generics が登場する Go 1.18 より前である。 このため日本語版『初めての Go 言語』では15章の「ジェネリクス」が全面的に書き直され,他の章でも Generics 関連の記述が調整されているらしい。
あと日本語版の特徴は,なんといっても付録。 特に「実例で学ぶGo言語入門」は多くのサンプルコードが適切なサイズで載っているので「試しにちょっと動かして確認したい」人には便利だと思う。 翻訳者の方の気合の入りようが分かる。 他の言語からやってきた人は付録のコードを動かすところから始めてもいいかもしれない。
なお,日本語版のサンプルコードは以下の GitHub リポジトリから取得できる。
サンプルコードも含めて日本語版は2022年最新の Go 1.19 で動くよう調整されているそうな。 なので,この本は2022年時点で最新の Go 技術参考書と言ってもいいかもしれない(笑)
本文では,特に12章の「コンテキスト」と15章の「ジェネリクス」は分かりやすくてよかった。 Generics についてはネット上では日本語でも既に色々と記事があるけど,書籍の形でまとまった内容になっているのはとても助かる。
「イディオマティック Go 実践ガイド」
副題に「他言語プログラマーのためのイディオマティック Go 実践ガイド4」とあるように『初めての Go 言語』は Go 特有の語法(idiom)にフォーカスを当てている点で,いわゆる「入門書」とは毛色が違っている。 このため
としている。 といっても1章でコンパイラのセットアップから linter の使い方までかなり細かく紹介しているので,全くのプログラミング初心者がどうしていいか分からなくて途方に暮れる,ということもないだろう。 なお,開発環境として VS Code と GoLand は紹介されているが Vim への言及はなかったので vimmer には不満かもしれない(笑)
この linter にまでちゃんと言及してるってのは個人的にポイントが高い。 Go に限らず,ある言語に於いてよく知られた idiom に沿ってコードを書くことで,うっかりミスやセキュリティ脆弱性が紛れ込む可能性を減らすことができる。 Idiom に気を配ってコードを書くのであれば linter は必須の道具と言えるだろう。
この本で言うところの「イディオマティック実践ガイド」な本というと「Effective ◯◯」みたいなタイトルを冠していることが多い。 『Effective Java』とか。 ただ,この手の本は大抵の場合,入門レベルを終えた人が次のステップに上がるための参考書に位置づけられる。 そういう意味でも『初めての Go 言語』はだいぶ変わった本という印象を受ける。
なお Go の公式ドキュメントとして “Effective Go” というコンテンツは存在する。 入門レベルの最終ドキュメントという感じだろうか。 これがあるせいで “Learning Go” にせざるを得なかったとか(笑)
Go の2番目の教科書
私は Go の教科書として普段は『プログラミング言語 Go』を推している。 入門書はとかく「使い方」に偏りがちで,言語仕様に踏み込んだ「何故そのようになるのか」に関してはどうしても薄くなってしまう。 私が『プログラミング言語 Go』を教科書として推す理由は,この本が真面目に言語仕様に踏み込んだ内容になっている点である。
とはいえ,言語仕様を(ある程度)理解できればスラスラとコードが書けるのかと言うと,そうもいかなかったりする。
たとえば『プログラミング言語 Go』を読めば reflect
や unsafe
といったパッケージの機能や使い方は分かるが,実際のプログラミングにおける使いどころや注意点は分からない。
また,前節で述べたように,どんな言語でもバグを引き起こしやすい書き方ってのはあって,これを避けるコーディングは言語仕様を見ただけでは分からないものである。
したがって「プログラミング言語を習得したければ大量のコードを読むことと大量のコードを書くことだ」という話になりがちである5。 また「プログラミングを独習するには10年かかる」というのも,まぁ仕方ないかなとは思う。
そんな『プログラミング言語 Go』に足りない部分を多少なりとも補ってくれるのが『初めての Go 言語』ではないかと思う。 なので,私としては『初めての Go 言語』を Go の2番目の教科書として推したい。 どちらを最初に読むかは難しいところだが, Go に近づく最初の1フィートとして読むなら『初めての Go 言語』を,ある程度 Go に慣れたところで「そろそろちゃんとやろう」というのであれば『プログラミング言語 Go』がいいのではないだろうか。
その上で更に『Goならわかるシステムプログラミング』や『Go言語による並行処理』や『Go言語による分散サービス』といった本に手を付けていくのが順当だろう。
ブックマーク
参考図書
- プログラミング言語Go (ADDISON-WESLEY PROFESSIONAL COMPUTING SERIES)
- Alan A.A. Donovan (著), Brian W. Kernighan (著), 柴田 芳樹 (翻訳)
- 丸善出版 2016-06-20
- 単行本(ソフトカバー)
- 4621300253 (ASIN), 9784621300251 (EAN), 4621300253 (ISBN), 9784621300251 (ISBN)
- 評価
著者のひとりは(あの「バイブル」とも呼ばれる)通称 “K&R” の K のほうである。この本は Go 言語の教科書と言ってもいいだろう。
- Go言語による並行処理
- Katherine Cox-Buday (著), 山口 能迪 (翻訳)
- オライリージャパン 2018-10-26
- 単行本(ソフトカバー)
- 4873118468 (ASIN), 9784873118468 (EAN), 4873118468 (ISBN)
- 評価
- Goならわかるシステムプログラミング 第2版
- 渋川よしき (著), ごっちん (イラスト)
- ラムダノート 2022-03-23
- 単行本(ソフトカバー)
- 4908686122 (ASIN), 9784908686122 (EAN), 4908686122 (ISBN)
- 評価
- Go言語による分散サービス ―信頼性、拡張性、保守性の高いシステムの構築
- Travis Jeffery (著), 柴田 芳樹 (翻訳)
- オライリージャパン 2022-08-03
- 単行本(ソフトカバー)
- 4873119979 (ASIN), 9784873119977 (EAN), 4873119979 (ISBN)
- 評価
- Clean Architecture 達人に学ぶソフトウェアの構造と設計 (アスキードワンゴ)
- Robert C.Martin (著), 角 征典 (著), 高木 正弘 (著)
- ドワンゴ 2018-08-01 (Release 2018-08-01)
- Kindle版
- B07FSBHS2V (ASIN)
- 評価
実務に即効性のある技術解説書というわけではないが,ものの「考え方」を示す本としてはよく出来ている。ソフトウェア技術史の読み物としても面白い。
-
厳密には削除したり移動したりして obsolete な記事があるので,それを含めた延べ数ならとっくに1,500超えてたんだけど。 ↩︎
-
どうも「はじめての〇〇」ってタイトルを見ると一歩引いちゃうんだよなぁ。昔「はじめての C」ていう本があって「エロ本か思うた」とかいうジョークがあったが(ABC の古い隠語を知らない若い人にはごめんなさい),そういう時代を連想してしまう(笑) ↩︎
-
「改す」を「なおす」と読むのは辞書的に正しい日本語ではありません。念のため(笑) ↩︎
-
原著では
An Idiomatic Approach to Real-World Go Programming
となっている。 ↩︎