ちりもつもればミルキーウェイ

好奇心に可処分時間が奪われる

Go Conference 2024 に参加しました & 発表しました

発表したもの

gob のバイナリとにらめっこして仕様を洗って、そこから性質を理解しようみたいな発表をしてきました。たのしかったです!

speakerdeck.com

発表をしようと思った背景

個人的な活動としてメッセージエンコーディングの仕様を見るというのをちょいちょいしていました。これとか

convto.hatenablog.com

あとそれ用のバイナリにらめっこツールも書います。

convto.hatenablog.com

まあこんなことを趣味でやっていたんですが、その流れで実際にエンコードされたバイナリ表現が、メッセージエンコーディングとしてのいくつかの性質に重要な影響を与えることを知っていました。

これはデータ指向アプリケーションデザインのエンコーディング周りのセクションを読んだことがある人も知っているはずです。

www.oreilly.co.jp

これ自体はそうだねという話なんですが、実際メッセージエンコーディングの選定にあたってバイナリ仕様をあんまり気にしてない人が多いことが気になっていました。

ポータビリティがあるか、パフォーマンスがいいか、サイズが小さいか... などはよく評価されているのを見かけますが、その他にもバイナリ表現としての仕様を見ることでわかる性質などもあるはずです。そのあたりも概要を把握した上で選定する方が望ましいと思っていました。

ちょうど Go は gob という独自のエンコーディングを持っているし、その仕様に詳しい人は(観測範囲では)ごく少数でした。go のユニークなエンコーディングのバイナリを眺めて性質を評価する姿を「みんなで一緒に楽しめる」ような発表ができたら、聞いてくださった方たちのバイナリを眺めるハードルが少しだけ低くなるかもしれないな〜と考えました。

そして少しだけ下がったハードルからちょっとでもバイナリ仕様にも興味を持ってもらえたら、ゆくゆくはより多角的な観点からの妥当な技術選定の背中を押せるのでは!それってハッピーじゃん!

と思い立ち、ほなやってやるかと思ってプロポーザルを書いてみた次第です。

発表を通してやりたかったこと

まず、この発表を聞いてくださった方々に対して

  • バイナリ表現はエンコーディングにとって重要な性質を規定する場合があること
  • なのでポータビリティやサイズ効率だけでなく、バイナリ表現も理解したほうが適切な意思決定ができる場合があること

あたりを伝えたかったです。

また、バイナリを眺めて

  • 雰囲気わかった気になってもらうこと
  • 妥当な意思決定のためにバイナリ表現からわかる性質もあることを伝えて、興味を持ってもらう(そして少しでも心理的ハードルを下げる)

という要素も重要だと考えていました。

こういう目標のもと資料作ったりしていたので、聞いてくださった方が「gob 完全に理解した」「他のも雰囲気同じっぽいことを魂で感じ取った」「バイナリ仕様もからわかることもありそう」みたいなことを感じてくれていたとしたら、ぼくの発表は大成功です。

宿題出してるのも半分は冗談だけど、半分はそういう意図をうけてのものです。あとでやってくれる人が一人でもいればいいし、いなかったとしてもその場で「おろ?これワンチャン読めるか?」と思ってもらえた方がもしいれば、それだけでも嬉しいです。

誤解されたくなかったこと

発表の構成的にも難しいかったのですが、積極的に gob を使いましょう!という旨の主張として受け取られないように意識しました。

先ほど触れたデータ指向アプリケーションデザインでも、言語固有のメッセージエンコーディングは強い理由がなければ使わん方がええで(意訳)のように言及されています。この点は明確に発表の冒頭でも口頭で触れていました。

僕もこれについては完全に同意見で、なにかとシステムの選択肢を制限する方向に働くので、言語固有のエンコーディングの採用には慎重になった方が良いと考えています。

逆にいうと、言語固有のエンコーディングだからとただ採用を見送るのではなく、用途や性質を見極めて妥当であれば自信を持って採用してほしいとも思っています。そしてその適切な評価のためには深い理解が必要、という関係性です。

このあたりはバランスが難しいものの、意図しない伝わり方をしないように意識しました。

発表で気を付けていたこと

ばいなりこわ〜いとならないようにかなり気をつけていました。

資料もできるだけ要素を分解してステップバイステップに仕様を紹介していき、資料だけでも理解できることを目標にしていました。

あとは、地味なテーマだけどやっぱり楽しく聞いてもらいたいので、自分がちゃんと楽しそうにしゃべることも意識していました!

バイナリにある程度興味を持っていそうな方が発表を聞きに来てくださっていて、そこには大いに助けられました。
発表序盤で「ここにはバイナリをはやく見たくてたまらないアツい人々しかいないはずなので〜」みたいなことをいったとき、みんなややウケくらいの感じで笑ってくれてとても安心しました。オフラインのややウケは実質大爆笑なのでよかったです。

発表の反省

資料を作りすぎた都合で、序盤にしっかり早口になったのは反省しています。

目的に「ハードルを下げる」「興味を持ってもらう」みたいなことを掲げていたので置いてけぼりにしてしまうのは本意でなく、時間に意識を取られすぎていました...

また、誤解してほしくないことのセクションにも書きましたが、十分気をつけていたとはいえ

  • この発表は積極的に gob の採用を進めているわけではない
  • ちゃんとシステム性質に合わせて、判断できることが一番いいことだよ、そのために知識を貯めようね
  • その上で用途に合うケースがあるなら自信を持って採用すればいいんじゃないかな

みたいなことは1枚スライド作ってしっかり明示しておくべきだったなと思っています。後追いで資料に追記しておきます。

発表総括

目的は達成したと思うし、みんな楽しく聞いてくれていそうだったし、なにより僕自信めちゃめちゃ楽しかったので大成功だったと思っています!わーい

今後もなにか発表する機会があれば、よりうまく伝えられるように精進します

オフラインでの発表

最高でした。またやりたいです。とにかく最高だった。

リアルなフィードバックを感じながら発表するのってめちゃめちゃいいな〜というのを魂で感じました。ふたたびオフラインでカンファレンスができるようになって本当によかったです。感動した。

参加者として

朝の早起きに失敗して 11:10 くらいに現地到着しました。僕の負けです。

そのあとはスポンサーブースや各 session を見させていただいてました。
写真全然とってないけどめちゃめちゃ楽しかったです!

スポンサーブースも楽しかったし、他の発表も学びになることが多かったし、古い知人と久しぶりに会って近況を話したりもできました。
初めて会う人と発表についての話をさせてもらったり、完全に一期一会達成できた〜〜

スタッフの皆さん、会場スポンサーの CA さん、その他スポンサーの方々本当にありがとうございました〜〜〜〜〜