Go Language Specification輪読会 #8に参加した
最近参加しているkyoto.goでGo Language Specificationを読んでいきたいという提案が出されていて、「そういえばGo Language Specification 輪読会というのに参加したいと思ってたんだった」と思い出して参加してきた。
Goのspecは気になったところを雑に読んだりしてたけど、きちんと読んだことはなかった。輪読をきっかけにしてもう少し深い付き合いができるようになればいいなというのが主な参加動機。
当日のタイムテーブルはこんな感じ。
意思疎通が難しくなりがちなリモート環境で、どうやって輪読会を運営しているのかという点にも関心があった。今回の記事ではそのへんの話だけ書きます。
ツール
まずはGo Language Specification 輪読会(「Spec輪読会」と略す)で採用されているツールについて、kyoto.goと比較しつつまとめてみる。
Google Meet
Spec輪読会はGoogle Meetを使ってリモートで開催されている。各自がボイスチャットで参加して、司会のsyumaiさんがspecのページを画面共有するという形で進行する。
PCからブラウザ版を使って参加したけど、特に問題なく2時間半のセッションを終えられた。UIも直感的で使いやすいという印象を持った。2021年3月までは最大で24時間まで連続してビデオ会議できるとのこと。
kyoto.goもコロナ禍の影響でリモート開催が続いていて、こちらではZoomを使っている。使い勝手はGoogle Meetと大きく変わらないが、無料版ではミーティングの時間は40分に制限されている。強制的にタイムアップされるのも緊張感あっていいのでは、という気がしているけど、Spec輪読会では休憩を挟みつつ2時間半という長めの時間枠(kyoto.goでは19:00〜20:00の1時間枠)でもダレることなく議論が続いていた。
Slack
イベント開催中以外のやりとりはGophers Slackの#spec-reading-20-jaで行われている。
これはkyoto.goも同じ。
Scrapbox
kyoto.goと同じくScrapboxが用意されている。
後述のGoogle Docsがよく使われていて、いまは主に参加者の自己紹介テキスト置き場として使われている。
Google Docs
Specを丸ごとGoogle Docsに貼り付けている。各自が気になった箇所にコメントをつけることができる。
syumai/gpgsync
同時編集できるGo Playground。見慣れた編集画面でコードを同時編集できるのはかなり面白くて感動した。
このツールのおかげで輪読中に出てきた疑問点を即座に検証して全員で共有することが可能になっていて、輪読の効率がかなり高まっている。
プラクティス
運営上のプラクティスのように見えたものをまとめてみる。プラクティスと表現したけど、おそらく明文化されているわけではなくて、輪読会を繰り返すたびにゆっくりと暗黙的に形成されていったパターンも多いのではないかと思う。
(初回参加だし、どんな意図があるのか他の参加者に確認したわけではないので内容はまったく的外れかもしれない。)
開始前の雑談
- やること: 最初の10分ぐらいで参加者が三々五々集まってきて雑談をする
- 効果:
- 簡単なアイスブレイク
- インフォーマルな情報共有: Spec輪読とは直接関係ないけど面白そうな話題を簡単に共有できる
自己紹介タイム
- やること: Scrapboxに簡単な自己紹介文を書いて、順番に短く自己紹介や近況報告を行う。
- 効果:
- 定型的なアイスブレイク: 他の人の自己紹介文を見ながら自己紹介を書くので初参加でもハードルが低そう
- インフォーマルな情報共有
自己紹介で「Goのほかに○○という言語を使っています」とか「言語処理系を作っています」みたいな情報が開示されていれば、「これは○○という言語ではどうなっているんでしょうか?」とか「パーサーを書くときってこういう文法の処理難しくないですか」みたいに発展的な話をするきっかけになる。
自己紹介の内容をScrapboxに書くというのは以下のようなメリットがありそう。
- 自分の番が回ってきてから何を話すか考えるという時間の無駄を省ける
- 参加回数が多い人の自己紹介が上のほうに書かれているので、フォーマットを真似して書ける
- 「あの人はどういう人だったっけ?」と思ったらあとから再読できる
全部入りScrapboxページ
- やること: 会に参加するために必要なリソースへのURLをScrapboxの各回のまとめページの上部に貼っておく
- 効果: 各回のまとめページに直接掲載しておくことで、初めての参加者の参加準備が楽になる。
- Scrapboxの招待リンクとかは「はじめに」のページだけに書きがち。
Goクイズ
輪読会終了後に、その会で話題になったエッジケースを組み合わせて「このコードの実行結果はどうなるか?」というクイズをTwitterで出題する文化(?)があるらしい。
#gospecreading #goquiz #golanghttps://t.co/Qbj8xlpDbf
— ドキュネオ (@DQNEO) 2020年10月14日
package main
type User struct {
}
var u User
func main() {
if u = User{} ; true {
}
_ = u
}
アウトプットをすることで学習の理解と定着が進むというのはよく知られているけど、クイズを出題するというやりかたは楽しくてよさそう。クイズという形式はTwitterと相性がよさそうだし、参加してなかった人も輪読会で出てきた知見を得られるというのもよさそうな感じがする。
自分でも作ってみた。
taskさんの問題のバリエーション作ってみました https://t.co/FN20XZ0pmC#goquiz
— yebis0942 (@yebis0942) 2020年10月15日
type S struct { i int }
func (s S) Print1() {println(s.i)}
func (s *S) Print2() {println(s.i)}
func main() {
s := S{ 1 }
p1 := s.Print1
p2 := s.Print2
s.i += 1
p1()
p2()
}https://t.co/VWaZUmwtEh
この挙動は https://golang.org/ref/spec#Method_values で規定されていそう。
所感
輪読会に途中参加してついていけるか心配だったんだけど、ようこそ新規参加者という雰囲気で迎えていただけてありがたい。自分の担当箇所では理解があいまいなところを訂正していただいたりして勉強になりました。