Go Study

TL;DR

この記事はMoney Forward Kyoto Advent Calendar 2020の10日目の記事です。 本日の担当はluccafortでお送りします、なお本日誕生日なのでご祝儀シェアをお願いいたします :bowc:

adventar.org

今日はRailsエンジニアがプロダクトでGo言語を習得するために行ったインプットやアウトプットのご紹介をしたいと思います。

オンラインコンテンツ

  • A Tour of Go
    • 過去にサラッと読んだことはあったのですがどこまで覚えているか不安だったので再入門しました。
    • Rails Tutorialsにも感じたことですが、初心者が学習するために必要なものをチュートリアルとして公式で用意してくれているのは非常に助かります。
  • プログラミング言語Go完全入門
  • uber-go/guide
    • GoにおけるベストプラクティスやよりBetterな書き方、そしてBadな書き方が記載されているので「このケースのときどう書くのがいいんだろう?」がわかりやすくまとめられているのでおすすめです。
    • 日本語版を翻訳していただいてるかたと知り合う機会にも恵まれて最高でした。

イベント

Go関連のイベントやカンファレンス、勉強会などに参加しました。 独学だけでは知ることができない点や議論をすることでより理解が深まることを期待して参加しています。 あと単純になにか新しいことを知ったり、学べることは楽しい!というモチベーションの維持の面もあります。

  • 社内のGoエンジニアの勉強会に参加
    • いままでGo言語は独学&誰かにレビューしてもらう、ということがなかったのでこの勉強会で課題を出してもらい、それを解くという形で進めてもらったのが体験としてよかったです。
    • 課題の答え合わせや質疑応答、議論をGoを習得したい熱量が高いメンバーと一緒に行えたので脱落することなくやりきれたかなと思います。
  • MoneyCon(社内ISUCON)
    • ISUCON10の開催が決まる前に社内ISUCONが開催されました。当時まだGoを学び始めたばかりのメンバー2名+Goを習熟しているメンバー1名で参加しました
    • せっかく学んだ技術なので使わないともったいない!Give it a tryだ!!ということでGo言語を無謀にも選択したのですが結果は思ったより悪くなくて成功体験として実績を積めたのは非常に大きな経験でした。
  • ISUCON10にGoで参加
    • 社内ISUCONでの成功体験に味をしめて同じメンバーで参加してみました……が結果は惨敗でGo言語がどうこうではないレベルとGoの習熟度が高ければもっと貢献できたなという悔しい思いをしました。
    • 社内の他のエンジニアも参加して本戦突破していたので次回は本戦突破できるようきちんと過去問を解いてリベンジしたいと思います。
  • Kyoto.goを主催
    • 関西にはUmeda.goがあります。
      • 京都にも気軽に平日夜に参加できるコミュニティーがほしいなと思って作りました。
      • Goコミュニティーの懐の深さとコミュニティー運営の難しさを実感しています。
  • GopherCon 2020参加
    • 初海外カンファレンスに参加しました、単純に英語わからなすぎる問題やGoの理解度が追いついてない問題など、自覚している課題を強く意識するよい機会になりました。

書籍

読了したもののみを記載しています。 買ったけどまだ読めていないものはいっぱいある……いっぱい。

  • Go言語による並行処理
    • 同期的プログラミングをいままでしてきたのでgoroutineのような並行プログラミングをあまり経験しなかったので購入しました。
    • どういう点に気をつけるのか?どういうときにgoroutineを使うのが有効か?が知りたくて読了しました。
    • 社内の輪読会イベントがあるのでより理解を深めることができそうだと期待しています。
  • スターティングgRPC
    • GoだけではなくgRPCを理解するため、そしてgRPCを介してGoとRubyをどうやって通信するのか?という点を学習したくて購入しました。
  • Goのポインタを完全に理解する本
    • 技術書典で見かけてGoのなにがわかってないのだろう?というお気持ちになったので購入。少なくともポインタは理解してそうだという確認ができました。

Go言語による並行処理

Go言語による並行処理

booth.pm

まとめ

今年1年を振り返るとそれなりにGo言語に投資してきた感がありますが、まだまだ不足していると感じています。 来年はもっとRubyの比率を減らして、Goの比率を上げていきたいと考えているのでそのときまでに必要なインプットは完了させておきたいと考えています。

反面、手を動かさずに物事を覚えられるほどぼくは頭がよろしくないのでデザインパターン再入門を兼ねてGoで実装してみる、を試してみようと考えています。 ちなみにやろうとしていることはすでに先駆者のかたがいて実践済みだったりしますw

github.com