Yuki Watanabe's Blog

Yuki Watanabe's Blog

エンジニアリングと子育てについて

『Go言語 100Tips』を読んだ

『Go言語 100Tips ありがちなミスを把握し、実装を最適化する」を読んだので感想を書く。

読み初めの動機

本書を読み始めた動機は、業務でGoを1年以上書いているもののGoを使いこなせている感がなく、より深い知識をほしいと考えたからだ。 ここでいう"使いこなせている"とは、複数の書き方が考えた上で柔軟性・堅牢性が高い、書き方を知っている、くらいの感覚で使っている。

思い返すと以前の職場ではRubyを書いていて、ある程度使いこなせている感を得られていた。 おそらく仕事の傍らでRubyの言語仕様やベストプラクティスに関する本を何冊も読んだからであり、具体的には、『リファクタリング: Ruby エディション』や『Effective Ruby』、『メタプログラミングRuby』などの通読より一定の知見を得られていた。

1年前に原著『100 Go Mistakes and How to Avoid Them』の存在を知り、会社のSafari Booksを利用して少し読んでみたのだけれども、難易度の高いテーマを英語で理解するのに挫折してしまった。 内容が良いことは知っていたので、日本語訳版である『Go言語 100Tips ありがちなミスを把握し、実装を最適化する」の存在を知り、購入に至った。

感想

まず感想を一言で述べると、非常に良かった。 書籍のタイトルの通り100のTipsが紹介されているが、それぞれのTipsごとにおよそ下記のように構成されている。

  1. Bad practice
  2. Badである理由の解説
  3. Good practice
  4. Goodである理由の解説

そのため、解説を見る前に、なぜBadなのだろうか?なぜGoodなのだろうか?の思考をするStepを挟むことができ、その後の解説を読んだときの答え合わせ感がとても楽しいし、記憶に残りやすく感じた。

そして、タイトルには100のTipsとあるが実際にはメインの100Tipsに関連した豊富な豊富なサブTipsがある。

例えば、5つめのTipsである「インターフェース汚染」に関しては、下記の3つのサブTipsから構成されている。

  • インターフェースの概念
  • インターフェースを使う場合
  • インターフェース汚染

個人的に一番面白かった章は、第12章の「最適化」だった。難しい内容が多かったが、例えば構造体のFieldの順番によって確保されるメモリ量が異なるというのはなるほど、となった。 この章は主にCPUヘビーな処理をする際の最適化について述べられており、自分の関わるプロダクトではそこまでCPUヘビーな処理はないのだが、もし今後そういったタスクをやることになったらある程度自信を持って取り組めるのではないかと思う。

著者のTeiva Harsanyiさんは、AmazonのプロフィールによるとGoogleのSenior Software Engineerのようだ。GoはGoogle発であるため、Googleのエンジニアが書いているとなると、本書の信頼度は非常に高いように思う。

最後に

通読後には、コードを書く際やレビューする際に、テストしやすいか?パフォーマンスがよいか?と自問し、他のオプションも検討できるようになってきた。 これは元来感じていたGoを使いこなしている感を少しずつ得られているとも言える。こうした書籍は実際の課題と対峙することでより一層定着する面もあるため、1年後くらいにまた読み返してみたい。