私がやってきたGolang勉強法を振り返る

## □ はじめに
この記事は[DOG#2](https://techplay.jp/event/735792)の登壇用の資料です
なので初心者による初心者のための初心者向けの資料となっております

---

## □ 何故このテーマを話そうと思ったのか
- golangをやってみよう！と思うものの、どうやって勉強していこうか...
- という人も多いのではと思い、私の経験と知っている情報をお伝えできればと

---

## □ この資料で伝えたいこと
こんな感じになってくれればOK
- golangの学習ってこんな感じにやっていけばいいのね
- なんとなーく、どんな感じなのか温度感つかめたわ

---
 
## □ 自己紹介
- i-dach (@secondly)
- 職業
    - 現在：カイゼンエンジニア
    - 将来：カイゼンムキムキエンジニア (トレーニング中)
- 所属 (※所属としての意見を書くことは基本ありません)
    - [DesignOne Japan, inc](https://www.designone.jp/)
        - DOG主催
        - diet部部長,キックボクシング部部長
        - ジェネラリストとしてカイゼン&越境活動
        - 設計周りの監修的なこともしてたりします
    - [TAG](https://theagileguild.org/)
        - チームでありたい人のための「共同体」
- 趣味
    - 呼吸法の研究
    - エンジニア
    - DIY（Iot）　←予定
- 経歴
    - 神奈川出身・在住
    - テコンドー →合気道 →キックボクシング
    - 受託開発 & 新規事業企画 → ASP → 口コミサイト
    - Android →フロント →サーバーサイド →SREと進むうちにカイゼン活動に目覚める

---

## □ 私とgolang
---
### ○ 初めての出会い
- 2-3年くらい前に初めて本で見かけて、基本構文だけ試したレベル
- 「なんかこの人見かけたことあるわ」
- 「ちょっとこの人Cっぽい？ん？何が違うん？」

= 全く知りもしないし興味もありませんでした

---

### ○ それから月日は空けて
- 「なんや、golangって最近よく聞くようになったな」
- 「あれ、Dockerってgolang製なんか」
- 「scalaの次はgolangの時流が来るんかなぁ」
- 「久々に試してみるか。お、こいつ早く動くしえらいシンプルやな」

= 段々と興味が惹かれる存在となり...

---

### ○ そして今は...
- 「golangええわ！」
- 今までの構成と考え方がちゃうから視野が広がる
- 何よりもシンプルに考えられる
- 軽量かつ早い

= すっかり虜に

---

## □ ではどんな勉強をしたのか
- [A Tour of Go](https://go-tour-jp.appspot.com/welcome/1)
- golangの設計思想をざっくりと把握する (本、公式、イベント資料)
- 主要な利用方法がなにか、得意分野はなにかをざっくりと把握する
- golang系のイベント資料を片っ端から読み漁る
- 基礎系の記事を読み漁る
- 勉強になった人の記事を読み漁る
- デファクトスタンダードなディレクトリ構成を学ぼうと調べる
- golangのイベントで参加できそうなものは片っ端から参加
- 事例や先人たちの学習法をgolangに詳しそうな人に聞く
- OSSのコードを読み漁る (Docker, k8s, gRPCなど)
- 公式のライブラリを読み解く
- 実際に運用のことも考えた簡単なAPIでも作ってみて知見を貯める

---

## □ 一つずつ紹介

---

### ○ [A Tour of Go](https://go-tour-jp.appspot.com/welcome/1)
- 初心者オススメ度: ★★★★★
- いわずも知れた公式のチュートリアル
- ブラウザ上でgoの挙動を確認しながら進めることができるスグレモノ
- golang始めるなら絶対通ったほうがいい道

---

### ○ golangの設計思想をざっくりと把握する (本、公式、イベント)
- 初心者オススメ度: ★★★★★
- 体系的に紹介されているので、全体的なイメージが付きやすい
- また情報も確か
- でも英語で書かれていることもある
- オススメ書籍
<table cellpadding="0" cellspacing="0" border="0" style=" border:1px solid #ccc; width:300px;"><tr style="border-style:none;"><td style="vertical-align:top; border-style:none; padding:10px; width:108px;"><a href="https://rpx.a8.net/svt/ejp?a8mat=2NDO5M+AABOLE+2HOM+BWGDT&rakuten=y&a8ejpredirect=http%3A%2F%2Fhb.afl.rakuten.co.jp%2Fhgc%2Fg00q0724.2bo11c45.g00q0724.2bo12179%2Fa16020146334_2NDO5M_AABOLE_2HOM_BWGDT%3Fpc%3Dhttp%253A%252F%252Fitem.rakuten.co.jp%252Fbook%252F14286944%252F%26m%3Dhttp%253A%252F%252Fm.rakuten.co.jp%252Fbook%252Fi%252F18064662%252F" target="_blank" rel="nofollow"><img border="0" alt="" src="http://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/0251/9784621300251.jpg?_ex=400x400" /></a></td><td style="font-size:12px; vertical-align:middle; border-style:none; padding:10px;"><p style="padding:0; margin:0;"><a href="https://rpx.a8.net/svt/ejp?a8mat=2NDO5M+AABOLE+2HOM+BWGDT&rakuten=y&a8ejpredirect=http%3A%2F%2Fhb.afl.rakuten.co.jp%2Fhgc%2Fg00q0724.2bo11c45.g00q0724.2bo12179%2Fa16020146334_2NDO5M_AABOLE_2HOM_BWGDT%3Fpc%3Dhttp%253A%252F%252Fitem.rakuten.co.jp%252Fbook%252F14286944%252F%26m%3Dhttp%253A%252F%252Fm.rakuten.co.jp%252Fbook%252Fi%252F18064662%252F" target="_blank" rel="nofollow">プログラミング言語Go （ADDISON-WESLEY　PROFESSIONAL　CO） [ アラン・A．A．ドノバン ]</a></p><p style="color:#666; margin-top:5px line-height:1.5;">価格:<span style="font-size:14px; color:#C00; font-weight:bold;">4,104円</span><br/><span style="font-size:10px; font-weight:normal;">(2019/6/26 15:45時点)</span></p></td></tr></table>
<img border="0" width="1" height="1" src="https://www10.a8.net/0.gif?a8mat=2NDO5M+AABOLE+2HOM+BWGDT" alt="">

---

### ○ 主要な利用方法がなにか、得意分野はなにかをざっくりと把握する
- 初心者オススメ度: ★★★★★
- そもそもどんなシーンで活用されるべきなのかを理解する
- 英語で（ry
- オススメ書籍
<table cellpadding="0" cellspacing="0" border="0" style=" border:1px solid #ccc; width:300px;"><tr style="border-style:none;"><td style="vertical-align:top; border-style:none; padding:10px; width:108px;"><a href="https://rpx.a8.net/svt/ejp?a8mat=2NDO5M+AABOLE+2HOM+BWGDT&rakuten=y&a8ejpredirect=http%3A%2F%2Fhb.afl.rakuten.co.jp%2Fhgc%2Fg00q0724.2bo11c45.g00q0724.2bo12179%2Fa16020146334_2NDO5M_AABOLE_2HOM_BWGDT%3Fpc%3Dhttp%253A%252F%252Fitem.rakuten.co.jp%252Fbook%252F14286944%252F%26m%3Dhttp%253A%252F%252Fm.rakuten.co.jp%252Fbook%252Fi%252F18064662%252F" target="_blank" rel="nofollow"><img border="0" alt="" src="http://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/0251/9784621300251.jpg?_ex=400x400" /></a></td><td style="font-size:12px; vertical-align:middle; border-style:none; padding:10px;"><p style="padding:0; margin:0;"><a href="https://rpx.a8.net/svt/ejp?a8mat=2NDO5M+AABOLE+2HOM+BWGDT&rakuten=y&a8ejpredirect=http%3A%2F%2Fhb.afl.rakuten.co.jp%2Fhgc%2Fg00q0724.2bo11c45.g00q0724.2bo12179%2Fa16020146334_2NDO5M_AABOLE_2HOM_BWGDT%3Fpc%3Dhttp%253A%252F%252Fitem.rakuten.co.jp%252Fbook%252F14286944%252F%26m%3Dhttp%253A%252F%252Fm.rakuten.co.jp%252Fbook%252Fi%252F18064662%252F" target="_blank" rel="nofollow">プログラミング言語Go （ADDISON-WESLEY　PROFESSIONAL　CO） [ アラン・A．A．ドノバン ]</a></p><p style="color:#666; margin-top:5px line-height:1.5;">価格:<span style="font-size:14px; color:#C00; font-weight:bold;">4,104円</span><br/><span style="font-size:10px; font-weight:normal;">(2019/6/26 15:45時点)</span></p></td></tr></table>
<img border="0" width="1" height="1" src="https://www10.a8.net/0.gif?a8mat=2NDO5M+AABOLE+2HOM+BWGDT" alt="">

---

### ○ golang系のイベント資料を片っ端から読み漁る
- 初心者オススメ度: ★★★☆☆
- 最前線で戦ってる人が基礎部分を色々とまとめてくれている
- ブログで詳細まで説明されているケースも多い
- ただし、超初心者には深すぎるケースもある
- オススメイベント
    - [メルカリ](https://mercari.connpass.com/) 
    - [golang.tokyo](https://golangtokyo.connpass.com/)

---

### ○ 基礎系の記事を読み漁る
- 初心者オススメ度: ★★★☆☆
- 基礎系記事は結構上がっている
- 中には詳細に解説してくれる人もいる
- が、それが合っているかどうかは判断できない
- オススメ記事
    - [Goならわかるシステムプログラミング](https://ascii.jp/elem/000/001/235/1235262/)

---

### ○ 勉強になった人の記事を読み漁る
- 初心者オススメ度: ★★★☆☆
- イベント資料などで参考になった人をストーキングする
- 登壇される方は大抵ブログとかをやってるのでほぼ見つかる
- オススメブログ
    - [budougumi0617さんのブログ](https://budougumi0617.github.io/)

---

### ○ デファクトスタンダードなディレクトリ構成を学ぼうと調べる
- 初心者オススメ度: ★★☆☆☆
- 実際にどういう構成で作っていけばいいんだろう？
- 構成は公式でも出ている、OSSみると結構違うのもある...
- オススメ：公式の構成で行きましょう

---

### ○ golangのイベントで参加できそうなものは片っ端から参加
- 初心者オススメ度: ★★★★☆
- 色々な事例が聞けます
- が、レベル高いものが多いので何言ってるかわからないことも多い
- 時間もコストもかかるので、ご利用は計画的に
- オススメイベント
    - [メルカリ](https://mercari.connpass.com/) 
    - [golang.tokyo](https://golangtokyo.connpass.com/)

---

### ○ 事例や先人たちの学習法をgolangに詳しそうな人に聞く
- 初心者オススメ度: ★★★★★
- イベントに登壇してる人に直接聞いてしまおう！
- golangを布教したい方なら丁寧に教えてくれます！
- 資料や発表以上に色々な情報がゲットできるかも!?

---

### ○ OSSのコードを読み漁る (Docker, k8s, gRPCなど)
- 初心者オススメ度: ★★★★☆
- 実際に世に可動しているものを学べます
- テストコードだったり、golangっぽい書き方だったり、パッケージの単位だったりを学べます
- 意外と読みやすいものも多いのでオススメ

---

### ○ 公式のライブラリを読み解く
- 初心者オススメ度: ★★☆☆☆
- golang先人たちに聞いた一番勉強になる資料はこれ
- が、結構解読が困難なのでおそらく中級者向け
- 読むなら[stringパッケージ](https://golang.org/pkg/strings/)がオススメ

---

### ○ 実際に運用のことも考えた簡単なAPIでも作ってみて知見を貯める
- 初心者オススメ度: ★★★★★
- 実践に勝る貴賎なし
- 運用のことまで考えながら作っていくと大分足りないものが掴めてきます
- 実プロダクトにいきなり載せようとすると必ず失敗するそうなので（先人たちの教え）まずは本番に近い形で経験値を貯めましょう！

---

## □ 初心者へのオススメの勉強は？
個人的には上の中でこれをやるのがオススメです
- [A Tour of Go](https://go-tour-jp.appspot.com/welcome/1)
- golangの設計思想をざっくりと把握する (本、公式、イベント資料)
- 主要な利用方法がなにか、得意分野はなにかをざっくりと把握する
- golangのイベントで参加できそうなものは片っ端から参加
- 実際に運用のことも考えた簡単なAPIでも作ってみて知見を貯める
- 基礎系の記事を読み漁る
- OSSのコードを読み漁る (Docker, k8s, gRPCなど)
- 事例や先人たちの学習法をgolangに詳しそうな人に聞く
- 公式のライブラリを読み解く

---

## □ 余談
- golangに対応してないフレームワークやライブラリも多々ある
- 対応しててもver0.xだったり...
- 先人に自分がなるしかないケースもまだある
- ので、言語特性や内部処理を理解しておくのは絶対大事

---

## □ 今後の展望
- 並列処理やテストについて知見を広げていきたい
- また、よりOSに近い挙動の部分を理解して行きたい
- 初心者　→中級者になるためのオススメ募集中