サーバーサイドエンジニアの森谷です。
ヤプリではtenntennさんに技術顧問を務めていただいており、tenntennさん同席の元に隔週ペースでGoの社内勉強会を行なっています。
tenntennさん主導のレクチャーから業務コードの実装相談・モブプロなど様々な取り組みを試みており、最近は標準パッケージのコードリーディングを行っています。
このコードリーディング会ですが、数回実施してみて中々の好感触を得ましたので進め方や良かったことなどをまとめようと思います。
会のスタイル
毎回持ち回りでファシリテーターを2名選出し、事前準備として
- 対象パッケージと範囲の選定
- いくらかの予習
を行うようにしています。
勉強会当日の流れは
- ファシリテーターから参加者へ、読んで欲しいポイントや目的の共有 [5分程度]
- みんなでもくもくコードリーディング [30分程度]
- 感想戦 [20分程度]
- 次回の担当決め等々 [5分程度]
といったタイムスケジュールで進行しています。
このスタイルで良かったこと
ファシリテーターの2名体制
この勉強会のメンバーは10名前後で、最近入社したGo初学者から毎日Goを業務で書き続けて数年といったレベルの方まで幅広く参加しています。
初学者でもできるだけ尻込みせずにファシリテーションをしてもらえるよう、2名体制で片方がサポートできるようにしており、今のところいい感じにワークしています。
事前準備ルールはゆるふわに
「いくらかの予習」と前述しましたが、事前準備のハードルを極力上げないようにあえてゆるふわなルールに留めています。
30分のもくもくリーディングタイムで読める程度の範囲さえ決めてもらえれば滞りなく会を進められますし、またルール化せずともなんだかんだと関連記事をまとめたりといった準備が見受けられるため、ベストエフォートで結構ベストを出せているのでは? と感じています。
もくもくリーディング
自分はもくもく会に参加したことがあまりないんですが、コードリーディングをもくもくやるのは意外とアリだなと思いました。
これにはポイントがありまして、毎回の勉強会の開始時にSlackに「わいわいするスレ」を立てているのですが、ここで各々が気になった箇所を上げたり誰かがそれを掘り下げたりといったやりとりが発生しており、勉強会に参加する意義のあるもくもく会が出来ています。
感想戦
コードリーディング会を始める前はシーンとならないか心配でしたが、わいわいスレに疑問点などがいくらか上がった状態で始まるため、大体いつも時間内に納まりきらないほど盛り上がります。
また、「ファシリテーターが事前準備中にわからなかった点があればこの時間で逆に質問するのもアリ」としているため、初学者を置いてけぼりにしない空気づくりも出来ているのかなと思っています。
標準パッケージのコードリーディングをして良かったこと
会のスタイルとは関係なく標準パッケージを読んでみて良かったと思えたこととして、単純にGoの知識が増えたことはもちろんそうなのですが、それ以外に
- 普段から標準パッケージのソースを頻繁に読むクセがついた
- よく目にするイディオムがわかるようになってきた
- 「並行処理をいい感じに書きたい→contextパッケージを参考にするか」といった脳内DBが広がった
あたりはやってみて気づいたメリットでした。
個人的には1番目がかなり顕著で、標準パッケージを読むハードルがグッと下がりました。
参加メンバーからの感想
- コードリーディングする時間を事前に確保せずにみんなでもくもく読めるのが助かっている
- 全員で同じところを同時に読むので、いろんな視点での気づきを知れる
- 初学者からの視点で、「慣れている人はこういう観点で見ているのか」と知れて良いという意見も
- 各回で別々のパッケージ / 箇所を読むので、一度予定が合わなくても次回参加が容易
- 30分と区切って集中して読むのでいい頭のエクササイズになる
- ゆっくり時間が取られているのでさらっとで済ませずにじっくり読める
- コードを読む力が鍛えられる
- Goに慣れていても新しい気づきがある
- 曰く「標準パッケージは噛めば噛むほど味がするコードが多い」という意見も
といった感想が集まりました。
中でも「いろんな視点を知れる」という声は多く、自分も「一人で読んでいては絶対読み飛ばしただろうな」と思ったことは何度もありました。
まとめ
今の勉強会の形式に至るまでには様々な試行錯誤があり、時には参加コストが重くなりすぎて人数が片手で数えられるほどに落ち込んだ時期もありました。
しかし参加コストを下げたことで人数も増え、人数が増えたので会の質も上がり、そして何より人数が増えたので盛り上がって楽しい(これ重要)という会になってきました。
継続的な勉強会の開催にあたっては、参加容易性を高めることが思っていたより大切なのかもと学んだ次第です。
良い会になってきたもののまだ取り組みたい事はあって、欲を言えばコードリーディング後にテックブログに内容をまとめていきたい等の目論見があります。
そういったアウトプット含め、さらなる改良のもとより強い会を構築していきたいです。
最後に、Go力を伸ばしたいエンジニアの方がいらっしゃいましたら是非気軽にお声がけください!