株式会社メディアドゥさんで2回目のハンズオンを開催しました!
was updated last. 2 months ago
Go言語初心者向けハンズオン#2を開催しました!

ずっとWIPなのはもったいないので、ついに書きました!
このハンズオンは、11月に開催された第2回目のGo言語 初心者向けハンズオン #2の開催レポートです。

はじめに、謝辞

足を運んで頂いた参加者の皆様、本当にありがとうございました。
また第3回の開催もありますので、是非ご参加ください。

そしていつも会場をご提供頂いているメディアドゥ株式会社様、
設営やサポーターとしてお手伝い頂いているスタッフの方々も本当にありがとうございました。

感謝感謝<(_ _*)>

イベント開催までの軌跡

第1回に引き続き、座学と課題の内容にがっつり関わらせて頂きました。
今回は基礎構文からの次のステップとしての位置づけで、以下の内容としました。

  • Goコマンド
  • 標準パッケージ
  • レシーバー
  • インターフェース
  • 並列処理/ゴルーチン
  • 並列処理/チャネル
  • コーディング規約
  • ユニットテスト
  • 課題(一般課題と並列処理課題)
    • じゃんけんシミュレーター
    • チャネルを使った会話ゲーム

私が内容を手がけた部分で一番悩みが多かったのは、やはり並列処理です。
個人的に普段Goでコードを書いていて、触れる機会は少ないところではあるのですが、
Goの一番の強みだと思っている分野なので学習の機会を得られたのは本当に良かったと思います。

以下に参考にさせて頂いた資料を置いておきます。

座学部分の全体のボリュームが大きすぎた、というのもあるのですが、
チャネルの概念をいかにわかりやすく伝えるか、ということに注視し過ぎてしまい、
内容が少しばかり薄くなってしまったのは反省点です。

func main() {
	ch := make(chan int, 5) //容量5のチャネルを初期化

	go func() {
		ch <- 99  //送信文
		close(ch) //チャネルを閉じる
	}()

	v, closed := <- ch //受信の2番目の返り値でcloseかどうかの判定

	fmt.Println(v)      // 99
	fmt.Println(closed) // true
}

例えばこのコードですが、コメントで親切にしているように見えて、
具体的なチャネルのイメージが全く湧きません。

概念の理解しにくいモノについては、図と解説を使って徹底的に理解に落とし込める流れを作る必要があると感じました。
堅苦しい事を書きましたが、要はもっと受け取り側の気持ちになって丁寧にやろうぜ!という事ですね。

開催当日の雰囲気

当日のつぶやきはこちらに纏めています。
https://togetter.com/li/1292863

改めて参加者の皆さん、本当にありがとうございました!
初めての方とお話できる機会も多かったので、良い緊張感に包まれた雰囲気だったなと感じています。

次回に活かす反省点

全部挙げるとキリがないので、いくつか目立つ反省点を整理しておきます。

座学部分のボリューム

次回は学習のスコープをもう少し狭め、フォーカスして深堀りできるようなテーマを考えています。

今回はチャネルとゴルーチンが含まれていた面も影響したのですが、かなり全体のボリュームが大きく駆け足状態となってしまいました。

座学と課題のバランス感

もちろん初心者向けを継続していきたいので、座学を外す予定は今のところありませんが、
全体の時間配分は改めて見直し、議論をしていきたいと考えています。

これは特に指摘を頂いている訳ではないのですが、
どうしても課題が終わらない為に課題時間の不足感、物足りなさを感じさせてしまっているようです。

課題の内容

座学と課題のギャップを埋めつつ、良い課題感、程よい難しさを突き詰めていこうと思っています。

今回の課題で浮上してきた問題として、内容が難しすぎる、Goの構文以外のところで躓いてしまう等の問題がありました。
もちろんそれらも学習の促進という意味では悪いとは言い切れないのですが、
あまり本質でないところで足を止めてしまうのは良いとも言えません。

告知

第3回目のハンズオンが2019年2月に予定されています!
次回は少し役割を入れ替えまして、

座学: @yukpiz 課題: @kentfordev

の役割で予定しています。

開催の告知は、

などで行われる見込みです。