Go 関連の本を読んだり,サンプルコードを写経するだけではなく,もっと実践的に勉強したいなと思って調べていたら,VOYAGE GROUP の Treasure 2017 と言うインターンシップの研修資料が GitHub に公開されていることを知って,さっそく挑戦してみた.数日間取り組んでみて,とにかく素晴らしかったので,紹介したいと思う.suzuken 先生,素晴らしすぎます!
学べるテーマ
Go の研修資料とは言え,幅広いテーマで Go を学ぶことができる点が素晴らしかった.ザッと挙げるとすると以下のようになる.テーマを見るだけで,もうワクワクしてくるのではないだろうか?
- アルゴリズム実装とテストコード
- フィボナッチ数
- スタック
- CLI
- net/http
- curl 実装
- スクレイピング実装
- コンカレンシー
- goroutine
- Data Race
- du 実装
- ウェブアプリケーション
- Wiki 実装 / Go
- TODO 実装 / Go + React
テーマ以外で,個人的に良いなと思った点があった.
- TDD を尊重し,テストコードを書くことが前提になっていること
- 基本課題に加えて,発展課題も多く提供されていて,もう一歩深く学べる仕組みになっていること
- 独学というよりは,チームで学んでいくスタイルを前提に研修が組まれていること
感想
実際に取り組んでみた感想をまとめておこうと思う.
フィボナッチ数
アルゴリズム実装としては一般的だけど,インクリメンタルに実装を進めていくプロセスが非常に楽しかった.実装,テスト,リファクタリング,CLI を流れるように学べるので,非常に実践的で資料としても素晴らしかった.
- フィボナッチ数を返す関数
fib()
を実装し,適当にmain()
から呼び出せるようにする - マイナス値などの異常値が入ったときのエラーハンドリングを実装する
testing
パッケージを使ってテストコードを書くことで,安心してリファクタリングが行える体験をするTableDrivenTests
を使ってテストコードをさらに DRY に書き換えるos.Args
を使って,フィボナッチ数を返す CLI を実装する
スタック
ペアプロでスタックを実装するという内容になっていて,組織文化の色が良く出ているなと感じた.今回は自分で実装もテストコードも書いたけど,職場のメンバーにもコードを見せて,アドバイスをもらったりもした.また「スタックに最大長を設定できるようにし,溢れた場合はキューのように FIFO でデータを削除する」という追加要件が出てくるのも良かった.仕事でも追加要件が出てくることは頻繁にあり,そういった状況を感じさせる,実践的なテーマだった.
net/http
仕事では Gin を使って API を書くこともあるけど,net/http を深く活用したコードは今まであまり書いたことがなく,curl 実装は考えることが多かった.CLI で指定された URL に GET リクエストを送る実装はしたけど,POST 対応はまだだし,本家 curl にあるオプションの実装もまだという感じで,発展課題には着手できていない.今後のタスクとして残している.また golang.org/x/net/html
の html.Parse()
を使ったスクレイピングを自分で実装できたのも大きな収穫だった.
Wiki アプリケーション
Go で Rails のようなフルスタックなウェブアプリケーションを実装した経験もなかったので,実際に仕事で書くかどうかは別として,単純に楽しかった.以下の Wiki をベースにして「記事にコメントを登録できるようにする」という発展課題に挑戦してみた.
実際に comments
テーブルをマイグレーションで追加して,記事に紐付くコメントを登録するエンドポイントを用意して,登録されたコメントを表示できるようにした.Router + MVC の流れだったり,html/template
を使ったビューの実装を知れたのが収穫だった.以下の画像は,記事に紐付くコメントを表示できるようにしたところ.
TODO アプリケーションも動作確認まではしたけど,フロントエンドの実装がわからなくて Go 以外の部分でハマりそうだったので,ここは着手せずにスキップしてしまった.
今後の残タスク
コンカレンシーの部分が,個人的にまだまだ理解が浅いなと感じている.du 実装の課題に着手できていないため,goroutine と channel あたりの理解を深めつつ,挑戦してみたいと思っている.他にも,curl のオプションを実装したり,Wiki の発展課題にも挑戦してみたいと思っている.なお,今回実装したコードは以下のリポジトリに push しておいた(参考にならないとは思うけど).
まとめ
- Go の実装スキルをステップアップするために Treasure 2017 の研修資料が最高だった
- 冒頭に書いた通り,幅広いテーマで Go を学べる点がとにかく良かった
- 基本課題に加えて,発展課題も多く提供されているので,モチベーション次第でいくらでも挑戦できる仕組みになっているのも良かった
以下の記事には Treasure 2016 のレポートがまとまっていた.
ポエム : 技術指導の今後とは
研修資料を GitHub で無料で公開をすることが一般的になった現代では,「研修資料を売る」というスタイルは古く,エンタープライズを含めても,今後どんどん減っていくのではないかと思う.誰でも学びたいときにすぐ学べる時代になっている.じゃあ技術指導は必要なくなるのか?と聞かれれば,そんなことはなく,今後最も価値があるのは「研修資料」ではなく「教える人(講師/テクニカルトレーナー/サポートエンジニアなど)」だと考えている.ようするに技術指導のメインコンテンツは「資料」ではなく「人」に推移しているということで,同じ資料を使っていたとしても,教える人のパフォーマンスによって学んでいる側の成長曲線が全く変わってくることを意味している.「教える技術」は属人性が高く,市場価値が高いとも言える.インターネットの普及により「学習の高速道路が整った」と言われることもあるけど,独学では実現不可能な速度で成長してもらうことが「教える人」の価値で,僕は技術指導にすごく興味関心がある.副業でプログラミング講師をしているのもそうだし,今まで個人的にハンズオン勉強会を実施してきたのも「教える」ということに対するモチベーションが高いからと言える.そういう背景もあり,今回の Treasure 2017 研修資料は「教える人」も含めて最高だと感じた.
- GitHub - kakakakakku/elasticsearch-hands-on: Elasticsearch study materials for beginners 🌵
- GitHub - kakakakakku/docker-hands-on: Docker study materials for beginners 🐳
- GitHub - kakakakakku/mysql-beginner-hands-on: MySQL study materials for beginners 🎹
- GitHub - kakakakakku/redash-hands-on: Redash study materials for beginners 📊