GopherCon2020の個人的注目ポイントなどを抜粋してみた…の巻。

TL;DR

先日社内で↓のようなエンジニアブログを書くので協力お願いできませんか?という話があり「よっしゃ!!!」と二つ返事をしたところ、思った以上の量になってしまった。 会社ブログのほうは抜粋されたものが掲載される、ということだったのでより詳細なものは個人ブログで書いてしまおう、ということになりこっちでも個人的なGopherCon2020の「これは聞いておきたい!」と思ったものを勝手に紹介していきます。

moneyforward.com

あまり意識したことはなかったけども、RubyKaigiやPHPConferenceなどの大きなカンファレンスに参加するときは無意識に「これをみる、何故ならこういうことが知りたいから」みたいなメモを書いてることが多い事に気づきました。 まあこれはあとでブログ書くときのネタにするため、という側面が強いけど。

GopherCon2020で何を得たいと考えているか?

期待することとしては大きくエンジニア視点で3つ、個人として2つ。

Goに対する理解を深める

どういう課題を解決したいのか? 何故そうなったのか? その背景はなにか?

これらを理解することで実際に自分たちがそれらの言語仕様を使って何かを実装するときにとり得るアプローチに差が出ると思います。 知識の補強、そして背景への理解、よりよい最適解への道筋などの知識理解度を深めることを期待しています。

GopherConに参加することを通してMF内でGoのプレゼンスを上げる

マネーフォワードの京都開発拠点では主に同僚が主体となって活動してくれていますが やはり世間一般のエンジニアにとってマネーフォワードといえば?と聞くとどうしてもRuby/Railsなイメージが強い。 それ自体は悪いことではないけどマネーフォワード内外におけるGoの存在感をより光を当てていく。 それによって今後あとに続くひとが社外だけでなく社内からも増えることを期待して、その一助になればと考えています。

そもそもGoが好き

Goの何が好きか?と言われると返答に困るのですが、普段Ruby/Railsを書いている反動なのか型があり、無用なところで議論が発生しにくいGoという言語が好きです。 また簡潔に書きやすいところが個人的に気に入っています。 テストがrspecに比べて愚直になる傾向があるのでそこはもう少し頑張ってほしいなと思うことはありますけどね! (↑同僚から炎上しそうだから消したほうがいいかも、と言われたw)

海外のカンファレンスに参加する敷居を下げる

ぼくは頭が良くないので英語に対してどうしても苦手意識があります。 いままでは現地にいくしかなかったわけですが、言葉が通じないという不安がつきまとうので敬遠してきた過去があります。 ただ今回、飛び込む機会を得られたこと、日本にいながらにしてイベント参加ができることでだいぶ心理的ハードルが下がりました。 これが契機になって次回以降海外カンファレンスにも臆せず参加できるようになれば、知識の吸収する場がグンと増えるのでそうなるとよいなと期待しています。

英語学習に対するモチベーションのブースト

前述しているように英語が苦手です。 得意だ!というかた以外は概ね賛同いただけると思うのですが、英語学習ってとにかく続かないですよね。 モチベーションの維持がしにくく、また日本国内で生活していると上達具合もなかなか体感しにくいです。 以前知り合いのエンジニアが「海外カンファレンスに行って英語が全く聞き取れなかった、悔しい」といってその悔しさをバネに1年後カナダへ留学するほどの熱意を発揮していました。 留学がしたいわけではないのですが、人間お尻に火がつかないとなかなか頑張れないので、そういう意味で発破をかけていきたいと思ってます。

ぼく的GopherCon 2020の見どころ

本題です。

TOP3 in GopherCon 2020 all days

まず結論から。

  • Day1の「Write Once, Use Many: A Simple & Useful Package to Call Internal APIs」
  • 同じくDay1の「Reordering 59 Million New York Times Publishing Assets Using Go and BadgerDB」
  • Day2の「How to Write a Self-Hosted Go Compiler from Scratch」

全日程を通して特に期待しているのは上記3つになります。 理由は後述してありますが、これら3つのセッションはタイトル、そして説明をみているだけでワクワクしてくるものがありました。 他にも魅力的なものはあり、悩んだのですがどうしてもTOP3を選べ、と言われたらこうなるかなと。

以降、各日程ごとに期待しているセッションTOP3を記載しています。

Day1(11月11日)

Typing [Generic] Go

f:id:luccafort:20201105003525p:plain

いままでRob Pikeの思想によって散々議論されてきたGenericsがついにGoに採用される。 これは今までのGoの世界にとって大きなパラダイムシフトになり得る、そういう意味でみんなが注目しているだろうけどもぼくもやはり注目している。

Write Once, Use Many: A Simple & Useful Package to Call Internal APIs

f:id:luccafort:20201105003710p:plain

正直なところタイトルで釣られた感があるが紹介文をみてより強く興味を引かれたのがこのセッション。 実務として使うことが予想されるInternalなAPI、それをシンプルに書き、拡張や保守を容易にしている、という文言に自分が今後作る、あるいは保守をするサービスに活かせる知識を知る、あるいは補完することができるのではないか?と期待しています。 (自社の素晴らしいパッケージ紹介で終わってしまう、という可能性を少しだけ危惧しています、少しだけね!)

Reordering 59 Million New York Times Publishing Assets Using Go and BadgerDB

f:id:luccafort:20201105003811p:plain

世界でも有数の記事データ量を誇るNYT、その5900万件のイベントをどのようにしてメモリ内で並べ替えたのか?というセッションのようなのでこれはMFという巨大データを抱える我々にとってもよい教訓が含まれているのではないか?ということで期待しています。 BadgerDB というのは寡聞にして聞いたことがないので軽く調べたのですがGoだけで作られたKeyValue型のDBのようです、これがどう活かされているかはセッションの中で語られることでしょう。いまから楽しみです。

https://github.com/dgraph-io/badger

Day2(11月12日)

Deterministically Debugging Go Programs

f:id:luccafort:20201105003902p:plain

あまりGo開発者にも知られていないデバッグの簡単&パワフルなdelvesについて、そのエレガントな問題解決を紹介してくれる、ということでGoビギナーなぼくにとって知りたい&実務で役立つ知識になりそうと判断しました。 効率の良いデバッグを知ることは効率の良い開発が出来ることにつながるので期待しています。

Pardon the Interruption: Loop Preemption in Go 1.14

f:id:luccafort:20201105003941p:plain

Go 1.14では、スケジューリングとガベージコレクションのためにゴローチンが先取りされる方法が大幅に変更された、ということでその詳細から言語仕様、設計思想、ベストプラクティスを学べる機会だと感じたため、恐らく難解であることを覚悟で聞きたい!と思いました。

How to Write a Self-Hosted Go Compiler from Scratch

f:id:luccafort:20201105004038p:plain

タイトルをみてメルカリのDQNEOさんだ!と気づいてしまったやつ。 DQNEOさんはPHPを書かれていた頃からウォッチしているエンジニアの1人であり、今回登壇されると知って絶対に聞きたい!!!と思っていたので当然聞く。

それだけではなくGoのエクスパートでもコンパイラのエクスパートでもないDQNEOさんがGoでコンパイラを実装し、そこから得た学びとは何なのか? それはぼくにとってもエンジニアとして還元することが出来るものではないか?というエンジニアとしての成長につながるなにかがあるのではないか?と期待しています。とても楽しみ。

Day3(11月13日)

Functional Programming with Go

f:id:luccafort:20201105004114p:plain

関数型プログラミングが現実問題をどう解決するのか、関数型プログラミング特有の概念をどうGoで表現するのか?を理解することを期待。 Ruby/Rails(OOP/MVC)とは思想からして異なるのでいまいちど原点に立ち返るのはよいかもしれないと考えたのが理由です。

Working with Errors

f:id:luccafort:20201105004228p:plain

プログラミングはエラーとの戦いだと思う。 そのエラーについて過去の経緯やどうあるべきか、なども含めて知ることが出来る貴重な機会。 紹介文をみていると丁寧にエラーについて話す予定のようなのでそれだけでも価値があると考えました。

Optimizing Performance using a VM and Go Plugins

f:id:luccafort:20201105004241p:plain

みんな大好きパフォーマンス改善! Goにぼくらマネーフォワードが期待することの1つにパフォーマンスの向上があります。 だが如何に言語のパフォーマンスがよくても実装したコードが駄目だと無用にパフォーマンスを劣化させてしまう。 そこでこのセッションで避けるべき実装、真似るべき実装を学ばせてもらう。

まとめ

ここであげた以外にも気になるセッションはありましたが全日程で3つ、各日程ごとで3つという縛りを課して選んでみました。 業務に近い、あるいはエンジニアとしての成長につながるだろうと感じられるセッションが多く選出された傾向を感じています。

逆にインフラやSREな領域のようなセッションへの興味は薄めだったかなと感じています。 興味はあるけどあまり前のめりじゃない、そんな雰囲気でした。

さて、初めての海外カンファレンス!(オンラインだけど)に参加できるというだけでいまからワクワクしてきますね。 当日が楽しみです!!!

よければ皆さんもGopherCon2020で期待している内容をブログに書いてみませんか?!