20代エンジニアのためのプログラマー勉強法 ～Matzがおくる「生涯エンジニア」になるためのプログラミングとの向き合い方～

9/29(金)に開催された、サポーターズcolab主催のまつもとゆきひろさんの講演に行ってきました。
↓講演情報
https://supporterz-seminar.connpass.com/event/96550/

他にも多くの方がqiitaやはてなブログ等にメモを上げておりますが、個人的な記事作成の練習も兼ねて投稿させてもらいます。

※聞きながらとった断片的なメモをもとに、話の内容を思い出しながら加筆しています。
　そのため、見出しに対して内容の異なる箇所があるかもしれません。

<details><summary>　<strong>※10/2追記</strong>　</summary><div>

思った以上に多くの方に見ていただいておりびっくりしてます。ありがとうございます。

特に公開するつもりもなく取っていた雑メモを基にしているため、自分の中で咀嚼しきれなかった部分などメモを取ってない部分が結構ありますのでご了承ください。

また当日参加された方で、「ここ違うよ」という部分があればコメントなり編集リクエストなりいただければ幸いです。

（[折りたためる](https://qiita.com/matagawa/items/31e26e9cd53c3e61ae07)のを最近知ったのでやってみたかった）
</div></details>

## 講演メモ
### まつもとゆきひろさん自己紹介
・Rubyのパパ
・日本では「まつもとゆきひろ」、英語では「Matz」として活動。
　ひらがなで活動しているのは、日本にいる他の「まつもとゆきひろ」さんと差別化を図るため。
　また、海外ではfirst nameで呼ぶ文化があるが、「ゆきひろ」と呼ばれるのは慣れないので名字をもじったニックネームを名乗るようにしたとのこと。

---

### 社会人の勉強について
#### 導入：学生の「勉強」と社会人の「勉強」
得てして、解決すべき問題は複雑になりがち。
なぜなら人間が複雑だから。人間が複雑なので、人間同士のコミュニケーション、人間が形成する社会は複雑。
人間は複雑な事象を理解することは難しいが、事象を「抽象化」することで理解しやすくなる。

◆抽象化のメリット 
　・抽象度を上げてパターンを抽出
　　→背景知識を活用できる
　　→理解しやすくなる

◆デメリット
　・抽象化のモレ
　　→抽象化しすぎてはいけない(over simplify)。区別すべきものは区別する。
　　　→cf)アーキテクチャ宇宙飛行士

##### 「勉強」ってなに？
今回の講演のテーマは「社会人の勉強」。
勉強、というと学生時代の受験勉強が思い出されるが、学生の勉強と社会人の勉強は一括りに語れるか？over simplifyではないか？
　**→学生・社会人の勉強の違いについて考える**

---

#### 学生・社会人の勉強の違い
##### 苦手克服 vs 得意分野を伸ばす
・学生
　満点が決まっているため、得意を伸ばしたところで伸びしろがない。
　苦手克服のが得策
・社会人
　満点が決まってないし、苦手分野も克服する必要はない。
　得意な分野だけを伸ばし、10万点取ればいい。

##### 記憶 vs 把握
・学生
　学生の試験は記憶での勝負。
　試験に教科書は持ち込めない。
・社会人
　知識のインデックスだけ持つ。
　詳細はググればいい。

##### 試験 vs 常在戦場
・学生
　試験のための勉強
・社会人
　明日のための勉強。常に勉強しなければならない。

##### 一次元vs多次元
学生の勉強は評価軸は次元が少なくなりがち、点数で評価できる

##### メインvsサブ
学生は勉強がメイン
社会人は働くことがメイン

##### 間接的vs直接的
・学生
　勉強は社会で直接的に役に立たない
・社会人
　技術を学べばそのまま仕事で使える。
　javascriptを学べばjavascriptの仕事ができる

##### 安定vs変化
・学生
　勉強すれば試験で点を取れる
・社会人
　いつまでも同じ技術は使えない
　jsの技術は1年後には使えないかもしれない


講演のタイトルには、ミスリードを誘うためあえて「勉強」という学生を彷彿とさせるワードを使っている。
社会人の場合は「勉強」ではなく「学習」というべき？

---

#### なぜ勉強するのか？
・成功したい
・収入を上げる
・良好な人間関係がほしい
・嫌なことをしたくない
・好きなことで生きていく

→これらを実現する確率と高めるには？

・高評価
・尊敬される
・尊重される

→どうやって？

内省(self reflection)する。
・好きなもの、嫌いなもの
・得意、苦手
　→「好きこそものの上手なれ」

---

#### 尊敬されるには？
人は基本的にミーハー、有名人はなんかすごい気がする
例えば、別に好きじゃない有名人でも、街で見かけると謎の嬉しさがある。

→知名度は価値と可換。有名≒価値がある
　×成功して有名になる
　○有名になると成功できる

#### 有名になるには？
・キャズム理論
　https://swingroot.com/chasm/
>「最新テクノロジーを使うような商品は、いち早く手に入れたがる層と、流行が浸透してから手に入れたがる層とでは、商品を欲しがる理由が全く違う」というマーケティング理論です。

ニッチに進出して信頼を得る → 横展開し、別の仕事もできるようになる。
まつもとさんの場合は、Rubyの開発で信頼を得る→講演や執筆の仕事もするようになる。

勉強法を学ぶことは、自分のマーケティング戦略を立てること。
埋没しない戦略を立てていく。1000人いる場所で争うより、100人の場所で争うようにする。
→自分のスキルのインベントリ（棚卸）をする

---

#### まつもとさんの場合
大学ではコンピュータサイエンス専攻→就職
就職した会社には未経験者もいて、cs専攻は200人中6人だけ
　→埋没しない！

下のレイヤー（アプリより、ツールとかフレームワーク）が好きだったので
フレームワークを作り、現場の生産性を高めていたが、バブル崩壊で社内ツール開発チームが解散。
まつもとさんは既存ツールのメンテ要員として残されたが仕事はない。
暇だったのでRubyを開発した。（！）
言語を作って公開した（ニッチに進出）ことで業界の有名人に。
しかし、今日の講演でrubyの話はしていない
　→横展開！

---

#### じゃああなたは？
インベントリ（棚卸）し、自分の在庫について真剣に考える。
・何がしたいのか
・どうなりたいのか
・どこで差別化するのか
・何を妥協できるのか、どこまで意地を張るのか
・職種
・住む場所

#### 人生をいいほうに転がす確率を高める
予想は外れる、決めたことを変えてもいい
未来、将来を考えても無駄
→自分の傾向をつかむ

---

#### 具体的に何すればいい？

◆モチベーション管理
・好きなことはほっといてもやる。
・「暇だ、退屈だ」はモチベーション管理ができてない注意報。
　暇を撲滅する。

◆時間管理
・何かをする時間の長さは、その人の中での優先順位の高さ。
　ツイッターが大事な人はツイッターに当てる時間が長いし、
　ゲームが大事な人はゲームに当てる時間が長い。

・プライベートは犠牲にしてはいけない。
　社会人の勉強は就業時間中にするべき。
　自分の生産性を高める活動を仕事中にさせてくれない会社は滅びるべき（！）

・短い時間で成果を上げる
　作業見込み時間の報告は、3倍がちょうどいい。
　就業時間フルフルでは働けない。割り込みは入るし、割り込まれた後はローディングの時間が発生する。見込みより早く終われば、その時間を勉強にあてる。

◆アウトプット

・アウトプットには心理的障壁がある。
　ユーチューバーは誰でもできることをやっている、スライムの風呂とか
　なんで一般人はやらない→？心理的障壁

・まずはアウトプットを繰り返す。クオリティは棚上げ。
　→アウトプットが楽になる
　→アウトプットが最適化されていく
　→心理的障壁がなくなる

---

#### なにを学ぶべき？

◆コンピュータサイエンス
　今後変化しにくい。

◆英語
　・新しい情報は大体英語。
　・「タイムマシン経営」が可能に
　　→日本より1年ほど進んでいるアメリカの流行りを取り入れる。
　・→ガラパゴスを出る
　・最低限読めればいい
　・語学は場数
　　どれだけしゃべったか、どれだけ読んだか
　　完璧を目指さない

◆コンフォートゾーン（快適なゾーン）を出る
　普段やらないことをあえてやってみる
　変化を恐れない訓練
　→変化はどうしても起こる
　　→年齢によって人間は勝手に変化する

◆誰かを見下さない（自分を含めて）
　誰かを見下すとコミュニケーションにならない
　機械相手と思っていても、例えばプログラミングは人間が作った人間のためのツール

---

#### 最後に

人生を良くすることに、もっと貪欲に！

---

### 質疑応答

◆自分の得意がわからない
　「これが面白そう」と思える分野をやってみる。
　やってみれば得意かどうかわかる
　
◆内省を終わらせて、実際に走り出すタイミングは？
　やってるうちに「じゃあやってみようか」となる。

◆いい職場、ダメな職場の見分け方は？
　入ってみるまでわからない、入ってダメならやめればいい。
　売り手市場なので、次の職場はある。

◆英語はどう勉強した？
　英語での講演等で必要だったので、自然と身についた。

◆人生に影響を与えた本は?
　7つの習慣
　バベル17

◆ニュース何見てる？
　[Hacker news](https://news.ycombinator.com/)
　[reddit](https://www.reddit.com/)

◆地方に住むと不利？
　新しい情報は大体英語、
　東京も島根も変わらない


## 感想

初めて拝聴したまつもとさんの講演は、話の組み立てが明瞭でわかりやすく、2時間超の講演はあっという間でした。

社会人として、エンジニアとしての経験値も全く異なる20代の私たちに対する講演でしたが、変に歩み寄ったり媚びへつらうことなく、自然体で私達にわかる言葉を使って話をできる方だという印象を受けました。

話全体の印象としては、自身は一般的ではない経験（言語の開発など）をされているにもかかわらず、講演の内容は「エンジニアの学び」についての一般化された（変に偏りのない）聞きやすい内容となっておりました。エンジニアとして多くの人を見てきた、経験の厚みというか、懐の広さを感じます。

公演のタイトルを「プログラマー勉強法」と銘打っていますが、具体的な勉強方法というよりは、「何を勉強するのかを決める方法」についての講演でした。
スキルのインベントリを行い、今後のエンジニアとしてのキャリアについて考えようと思います。

## 宣伝
大変多くの方にご覧いただき驚いています。ありがとうございます。
せっかくバズったので、私が開発したAndroidアプリの宣伝です。よかったら遊んでやってください。
### 数読
大きい数を読むゲームです。
私はこのゲームのテストプレイをしてるうちに、 `10,000,000,000` みたいな大きい数が一目で「100億」と読めるようになりました。今のところ実生活には役に立ってませんが。
[数読 -sudoku- | Google Play Store](https://play.google.com/store/apps/details?id=com.miyashiiii.sudoku)
![数読 横長素材.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189343/f11fe407-81e7-3410-c060-2aa15423b333.png)
### TapNum -Min or Max-
4つの数字の中から一番小さい or 大きい数字をぽちぽち押していくゲームです。
瞬発力が試されます。
[TapNum -Min or Max- | Google Play Store](https://play.google.com/store/apps/details?id=com.miyashiiii.TapNumMinOrMax)
![TapNum 横長素材.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189343/ab9b8efd-7d10-e4e8-d887-6a006189db5e.png)