マクロとミクロで考えるおすすめの勉強法

「新人エンジニアにすすめたい、あなたの勉強法をシェアしよう！ by Udemy Advent Calendar 2022」の16日目の投稿です。

本投稿では、勉強する知識を2つに分類して勉強する方法を紹介します。
~~Amazonギフト券欲しいです~~


# 3行まとめ
マクロとミクロの知識に分類する
両方をバランスよく学ぶ
それぞれのおすすめの勉強法を紹介！

# 簡単な自己紹介
- 社会人3年目
- 情報系大学院卒業
    - ただし、学生時代はプログラムをしっかりやっていたわけではなかったです
- Web系エンジニアという何でも屋
    - 普段はフロントからバックからデータ分析からなんでもやってます
- 普段はPHP書いたり、TypeScript書いたりしています

# 私の勉強方針
私はいつも勉強するときに、マクロな知識とミクロな知識を意識して勉強するようにしています。マクロな知識は、俯瞰的な知識、ミクロな知識は局所的な知識です（詳しくはこの後書きます）。

勉強を続ける上で気をつけることは、自分の知識が偏ること、またそれに気づかないことです。汎用性の高い知識を身につけることは大切ですが、それだけだといつ役に立つのかがわかりづらく、モチベーションが上がりません。一点集中で勉強することも重要ですが、それにより視野が狭くなることは防がなければいけません。

**マクロかミクロかという視点を意識することで、バランスよく勉強でき、中長期的に着実に自分の実力を伸ばしていくことができます。**

## マクロの知識
CS（Computer Science）の知識や、システムの全体像に関する知識をマクロの知識と分類しています。
具体的には、ネットワーク、ルーティング、暗号方法、セキュリティ、設計、テストなどです。

この知識は情報系の専門学校や大学で学ぶことも多いと思います。
これらの知識を習得しても明日すぐに役に立つかというとそうではないですが、全ての作業において重要な知識のため、仕事のクオリティを向上させることができます。
例えばコードの実装において、セキュリティについて知っているとそれを考慮した実装をすることができ、また、設計の漏れに気づくことができます。

### おすすめの勉強法
#### IPAの資格試験を受ける
おすすめは基本情報技術者、応用情報技術者の試験です。
特に基本情報は2023年から通年試験に変わり、非常に受けやすくなります。
会社によっては奨励金も出るので、とりあえず何すればいいだろう？と考える人にはおすすめです。

ツイッターやブログなどでは時折、資格試験は意味がないとよく言われます。
確かに資格をとったからといって、次の日から仕事ができるようになるわけでもないですし、すぐに給料が上がるわけではないと思います。
僕は資格試験は、勉強の体力をつけることだと考えています。すぐに効果は出ませんが、勉強することによって地力がつき、今後の学習、仕事は確実にスムーズに進むようになります。
また、この後説明するミクロの知識を理解するため役に立つこともあります。

**おすすめの人**
- 何を勉強すればいいかわからない
- とりあえず情報系の全体の知識をつけたい

#### テーマ広めの本を読む
本は先人の知見を最短で得ることができる手段です。言語の本や、いろいろなソフトウェア・サービスはミクロに分類しますが、大きな分野として書かれている本はマクロの知識として分類しています。

ここではおすすめの本を３冊程度紹介します

[リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック](https://amzn.asia/d/0kzwzex)
　とりあえずこれを読んでおけばいいという定番。今でも1年に一回は必ず読み返します。
[3分間ネットワーク基礎講座](https://amzn.asia/d/eeUOUml)
　ネットワーク系の本は比較的難しいものが多いですが、この本は非常にわかりやすくまとまっています。
[暗号技術入門 第3版](https://amzn.asia/d/8HwN4fR)
　日頃意識することがなく使っている暗号周りの技術について学ぶことができます。　

**おすすめの人**
- 深めたい技術があるが、どこから手をつけていいかわからない
- 本で勉強するのが好き

#### Paiza, AtCoderをやる
コードを書くのが好きな人は、PaizaやAtCoderを通して、アルゴリズムを構築する能力をつけることがおすすめです。アルゴリズム構築能力を鍛えるには数を解くことが重要です。ただ、それは仕事だけではかなり限られてしまいます。そこでPaizaやAtCoderでチャレンジする数を増やして能力を増やすことができます。

Paizaは学習教材がしっかりあるので、一からしっかりやりたい方や時間があるときに少しずつやっていきたい方向けです。
競プロは、ある程度解ける人におすすめで、ほぼ毎週コンテストがあるので参加して自分の実力をスコア化してみましょう。

**おすすめの人**
手を動かす、コードを書くのが好きな人

## ミクロの知識
各プログラミング言語の知識、SQL、フレームワーク、クラウドベンダーなどの具体的な記述方法・操作方法をミクロの知識として分類しています。
全体の知識と違い、明日から仕事の役に立つこと知識が多く、自分のできることが増え力がついていることをすぐに実感できると思います。また、こちらは手を動かして勉強することが多いのも特徴です。

これだけ聞くといいことづくめです。
**ではなぜ、ミクロの知識だけを勉強することがだめなのでしょうか？**
それは、知識が局所最適になり、意図しない偏りを産む可能性があるからです。
アプリケーションは複数のトレードオフの上に成り立っています、ミクロの知識だけで俯瞰的な視点が抜けている場合、見えている範囲は素晴らしいものができていても、実は裏側はあまりよくない状態で、全体としてはいまいちなものになっていることがあります。

あなたが単に作業者で決められたところだけをやる場合であれば気にする必要はないと思います。ただ、もっと良いものを作っていきたい気持ちがある、自分で作業を考える必要があるのであれば、全体的な知識を身につけて物事を俯瞰的に見る力も併せてつけることをおすすめします。

### おすすめの勉強法
#### 興味のある技術、ライブラリのチュートリアルをやる
最近の言語やライブラリはチュートリアルが非常に充実しています。参考書を買う前にとりあえずチュートリアルをやってみて、知識をつけましょう。
チュートリアル系の記事は公式じゃないものもたくさんありますが、まずは公式のものを読むことがおすすめです。

最近Web系で流行りのTypeScript技術３点セットです。悩んだ際はぜひ。
- [TypeScript](https://www.typescripttutorial.net/)
- [NestJS(Node.jsベースのフレームワーク)](https://docs.nestjs.com/first-steps)
- [React（フロントエンドのフレームワーク）](https://ja.reactjs.org/tutorial/tutorial.html)

**おすすめの人**
- 気になる技術がある
- 実際に触って書き心地を知りたい

#### 大手ベンダー（AWS、Googleなど）の資格試験を受ける
AWSやGCPなどのクラウドサービス、Oracle、CISCOは公式の資格試験が存在します。特にクラウド系などは各社が教科書的なドキュメントを公開していたりしますので、今何もわからない状態でも、一から丁寧に説明してあるのでスムーズに学習が可能です。 

AWSやGCPのクラウドサービスについては、ある程度知っていることが当たり前の時代になりつつあります。費用は高いですが、自分の実力の証明にもなるのでおすすめです。

**おすすめの人**
- 自分の知識を確認、証明したい
- 会社で奨励金が出る

#### 何かサービスを作ってみる
サービスを作るのは総合格闘技です。プログラムの知識だけでなく、DBやサーバなどさまざまな知識が必要になるので、そこで得られることは非常に多いです。サービスは公開できるのがベストですが、自分用に使う、仲間内で使うものでも十分いいと思います。

**おすすめの人**
- 全ての人


## まとめ

今回は、知識をマクロとミクロの2つに分類し勉強する方法を紹介しました。
勉強はモチベーションを保つことが難しいですが、継続して続けることが重要だと思っています。
紹介した勉強法をぜひ試して、効率よく勉強を続けましょう！

最後まで読んでくださりありがとうございました！