写経しながらだったため思いの外時間がかかったがようやく昨晩読み終えた。
Go言語によるwebアプリケーション開発
読書の目的
- Go言語に対する理解の深化
- 当初の目的を達成したと言える
- goroutineの利用方法を理解
- どのように実装すればいいのか?に対する1つの解答を得た気持ち、おおよそ当初の目的は達したように思う
- Go言語のベストプラクティスな手法や設計の習得
- 少しだけ理解した、ただinterfaceやgoroutineに対する理解がまだまだ浅いように感じるのでもうちょっとこの辺を鍛えたい
書評
対象者のレベルがマッチするかどうかで評価が変わる。 今回はぼくにとってどうだったかで判断させてもらう。
初級者には悪書、初中級者には良書になりえる。 上級者にとっては不足が目立つだろう。
感想/まとめ
書評でも述べたがターゲットとする対象者のGo言語に対するレベルによる。 個人的には良い技術書だと思う。 恐らく意図してはいないだろうが幾つかの箇所でハマりどころがあるがそれがまたよいアクセントになっているように思う。
但し、Tour of Goなどで一通りGo言語の基礎的な部分を理解していないとこのハマりどころでなにが問題となっているのかわからなくなってしまって投げ出す危険性があるのでその点は注意。
本書の書き方も随分と著者が当たり前だろうと考えている内容に関してはかなりの部分省かれていたりするのでそういった意味でも初級者に進める1冊…とはなりにくい。 いわゆる書いて覚える系の書籍ではないということは理解しておくべきかと。
ターゲットとしては中級者向け(あるいは初級者を抜け出そうとする人向け)という印象。 幾つかのコードの書き方や実装方法などがきちんと理解できていないところがあるので今後写経したコードを元に改善していきたいと考えてる。
また本書内の課題として敢えて実装方法が書かれずに読者に考えさせる箇所があったのでそちらにも挑戦するつもりだ。
考えさせるところがあるという意味では買ってよかったと思えるし、書籍の進め方も非常に良かったように思える。 ただちょっと不親切かなあと感じることが多かった。
1から10まで説明するのではなく、3教えたからじゃあ6までやっておいてね!9や10にするのは○○という課題があるので自分で考えよう!みたいな? これで伝わるのかわからないが。
重要
以下のamazonレビューでもあるがタイプミスなどのちょっとした、だけども気づかないと盛大にハマるであろう罠が書籍内にいくつかある。 多少の知識と実際に手を動かしてGoに触れたことがある人にとっては問題ないレベルの内容となっているかと思う。
全くGo言語に触れていない、Go言語でHello, Worldすら実行していない人にとって本書は良書にはなりえないと思う。 そういう方は東京などで有志が行っているハンズオンや勉強会、あるいは独習のほうが効率が高いと思われる。
事前に気になった/重要そうな箇所
- 読んでコードを写経していた感じなので重要そうな箇所という意味ではあまりなかったように思う。
- Go言語によるWebアプリケーション開発にオライリー社がサンプルコードを公開しているので写経するならその前にこのコードをクローンしておくとdiffが取りやすくなって良い。
- なお本家はこちら
反論/異論
本書の各所でいわれる「早すぎる抽象化」は必要になったら変更すればよくてそれまでは各パッケージやコードで定義したほうがいい…という主張だったがこれがいまいちフィットしなかった。
例題のコードでは確かにその通りの規模感なのだがプロダクションとして公開するコードにおいてこの手の変更というのは中々大きな変更になり得ると感じているのでそこを早すぎると断言してしまうのはちょっと乱暴かなぁと感じた。
ただ一理はあると思うので恐らくはテストコードを適切に書いたり、リファクタリングが可能な状況を用意すれば問題がないのかもしれない。
まとめ
ちょっとわからないコードの実装意図などはあったものの非常に勉強になったので良書扱いさせてもらおうと思う。 ただ今回の写経を通じて感じたのはGo言語は非常にプログラミングやコードを書くことに集中させてくれるバランスの良い言語だと思うのだがWebのようなフロントよりなちょっとした変更をすぐに反映したいなどの場合にはマッチしないなと改めて感じた。
バックエンドのAPIや管理画面などの機能でJSONを返すだけ、あるいはサーバ上で動くコマンドツールなどの場合は非常に強力なツールとして機能しそう。
だけれども普通に考えてWebアプリケーションを開発するならRuby on RailsやLaravelなどを使ってバコッと作ってしまったほうが楽なのではないかと思う。 使いどころを考えないといけないかなと改めて感じた、ただgoroutine周りの設計はシンプルで素晴らしい設計だと思う。 if err != nil 地獄には辟易したが…。