学校でやっていた勉強法は全て忘れろ。今すぐにだ。

## 学校のテスト勉強とプログラミングは学習方法が違う
皆さんが学生時代にやっていた勉強法とはどんなものでしょうか？

私が中高生[^1]の時にテストで良い点数を取るために必要だったのは暗記です。
教科書の暗記、配布されたプリントの暗記、ノートの暗記。
そして暗記が通用しない箇所（国語の読解や数学の応用計算等）はテスト当日のアドリブで対処する…
それだけで仮に暗記が通用しない部分を落としたとしてもほとんどの教科で高得点が簡単に取れてしまうシステムでした。

このシステムで何年も過ごした結果、勉強=暗記という方程式が身体に染み付いてしまっている方も多いのではないでしょうか。

学生時代の私にとって勉強とはテストで良い点数を取るためのものであり、いかに効率良く暗記をするかということばかり考えていました。

しかし、プログラミングの学習で暗記中心の勉強は良い方法とは言えません。
長年やってきた勉強法は忘れて、プログラミングで求められる勉強法を覚えましょう。

[^1]: 中学は地元の公立、高校は偏差値50くらいの普通科です。

## プログラミング学習で大切なこと
### 暗記するべきことと暗記しなくてもいいことの区別をつけよう
さて、いきなり矛盾しますが暗記自体がダメなわけではないです。
配列やif文の存在など最低限は暗記しないと話になりません。
問題なのは、暗記するべきところと暗記しなくていいところの区別ができずに丸暗記してしまうことです。

プログラミングはテストとは違ってカンニングし放題です。
学校では「カンニングは悪」と教わりますが、プログラミングでは「カンニングは日常」です。
カンニングで得られる知識は暗記する必要がありませんが、カンニングをするために必要な知識は暗記する必要があります。
それができていないと、エラーに遭遇したとき「何がわからないのかわからない」「どうしたらいいのかわからない」状態になってしまいます。

カンニングするために必要な知識を暗記できていれば、適切な単語で検索することができ、すぐに答えを得ることができます。

この暗記するしないの取捨選択を意識しつつ勉強ができると、効率的に学習ができると考えています。
そもそも、関数の種類や書き方、日々アップデートされる仕様、新しく追加される機能といった膨大な情報の丸暗記なんて無理な話です。諦めましょう。

### 何を覚えればいいのか？
ではカンニングするために必要な知識とは一体なんでしょうか？
プログラミングの概念と用語を理解するのは大前提として、重要なのは何ができるのかを知ることです。
これは人工知能が作れるとかウェブサイトが作れるとかではなく、もっと細かい単位で覚えます。
計算ができる、文言の一部を変えることができる、ユーザーのクリックを検知することができるなどです。

JavaScriptの場合、ユーザーのクリックイベントは
```javascript
element.addEventListener('click', () => {
  // クリックイベントの処理を記述
});
```

と書いたりしますが、この`addEventListener`という単語や書き方を覚える必要はありません。
「JavaScript クリック」で検索すれば得られる知識なので、「クリック時に何かできるんだな」ぐらいの覚え方で十分です。

少し話が逸れますが、検索するときにはググり力というのが重要になってきます。
適切な単語で検索をすることはもちろん大事ですが、検索機能の使い方や細かいテクニックを知っているとより問題解決能力が高まるので、このググり力も身につけておきましょう。

https://qiita.com/dodonki1223/items/955819806297ee554b31

### 手を動かそう
実際に手を動かすことは非常に重要です。
サンプルのコードを自分で打ちながら写す写経は初学者によくおすすめされる手法で、効果も期待できます。

しかし、ただ写すだけでも学校と違う点があり注意が必要で、漢字ドリルのように何回も同じコードを写しても効果が薄いです。板書のようにただ写すだけでも十分ではありません。
写経は写すだけなので何も考えずできてしまいますが、目的を持って考えながら手を動かす必要があります。
そして、写し終わった後にちゃんと理解できたかを振り返るのがおすすめです。
写したコード上で何が行われているのか、1行1行言語化して第三者に説明できるかどうかが理解できているかの境界線かなと思います。

また、写経には文法などの基本が身に付く、デバッグスキルが身に付くといったメリットもあります。
写しただけなのにエラーが出て動かないということは初学者にとってあるあるだと思います。
大抵タイプミスやインデント、スペースの有無といった単純なミスが原因であることがほとんどですが、そういった些細なミスでエラーになる事と、自分はどういったミスをしがちなのかを知ることができます。

### 暗記することでコーディング速度の向上は狙える
余談ですが暗記にもメリットはあります。
それは、コーディング速度の向上です。
毎回毎回文法や関数をググっていてはコーディングが遅くなってしまいます。
ブラウザで検索をすることなくノンストップでコーディングを続けられれば、爆速コーディングが可能となるでしょう。

しかし、検索力があればググることで発生する時間は微々たるものですし、ある程度開発経験を積むと自然とよく使う関数などは書き方を覚えていきます。近年はエディタによる自動補完もあります。

なのでこういった検索すればすぐわかることの暗記に時間を割くのは、ゲームで言うところのエンドコンテンツのようなものです。
ゲームを始めていきなりエンドコンテンツに手を出す人はいませんよね？
丸暗記は初学者には必要ないコンテンツなんです。

暗記に時間を費やすよりは普段あまり使わない関数や新規機能、よく使う手法のより良い書き方の模索などに時間を当てた方が効率的ではないかなと思います。

## Udemyの動画学習はプログラミング学習に最適
自分が初めて触れる言語/技術を学ぶ時は動画学習から入ることが多く、Udemyの動画講座は頻繁に利用しています。
自分でネットの海から情報をかき集めるより楽で体系的に学ぶことができ、講師やレビューなどから情報の信憑性もある程度担保されていて、お値段もセール中なら1000~2000円と安価で、学習における効率は非常に良いと考えています。
（最大90%OFFなどのセールが頻繁に開催されるのでセール時に講座を購入するようにしましょう）

とはいえ、自分に適した勉強法というのは人それぞれなので、自分に動画学習が合っているかわからない状態でお金を払うのは不安と言う方もいらっしゃると思います。
多くの講座にはサンプルとして一部が無料公開されていたり、中には完全無料の講座もありますので探してみると良いでしょう。

さいごに、フロントエンジニアとして働く私の勉強法と、実際に私が受講した中からおすすめの講座を4つ紹介して終わりにしたいと思います。

### 私の勉強方法
動画講座を手を動かしながらでも見るだけでもいいのでまず一通り視聴します。
ここではどんなことができるのかというところを意識して覚えて、どうやるのかといった書き方の部分は0~1回写経する程度で進めていきます。

その後学習したことをアウトプットします。
ここがとても重要で、アプトプットをしないと学習した内容が知識として定着せず、すぐに忘れてしまいます。
私がアウトプットとして行なっているのは、何かアプリなどを作るか、Qiitaに学んだことをまとめた記事を書くか（下書きまででも良い）のどちらかです。
その際、理解が浅いと感じたところは動画を見直したり他の教材も参考にするなどして復習をしています。

実際に業務でも、
「こういうのって確か○○で実装できたよな。どうやって書くんだっけ」
　↓ググる
「ああ、そうだ。こんな感じで書くんだった」
というのを繰り返しながら進めていて、現状の学習方法で問題なく業務をこなせています。

勉強して知識の引き出しの扉だけ増やしておいて、引き出しの中身は必要になった時に調達する。
扉は覚えておいて中身は覚えない。広く浅く記憶するといった感覚です。

アウトプットとして記事やコードを残しておけば、それが自分にとって信頼できる引き出しの中身となり便利なのでおすすめです。

### おすすめの講座（フロントエンジニア向け）
※ Udemyの講座には、バージョンが古く最新版に対応されていない物もあります。購入前に商品詳細やレビューに目を通すなどして注意しましょう
※ 講座タイトルは変更になっている可能性があります

#### 【2022年最新】【JavaScript＆CSS】ガチで学びたい人のためのWEB開発実践入門（フロントエンド編）
https://www.udemy.com/course/front-dev-tutorial/
##### どんな講座？
WEBサイトの制作を通して、実際によく使うCSSやJavaScriptの記述を中心に解説してくれます。

##### どんな人におすすめ？
* HTML/CSS/JavaScriptがなんとなくわかってワンステップ上の学習がしたい人
* 自分でWEBサイトを作って公開したい人
* WEB制作において実務寄りの学習をしたい人

##### おすすめポイント
* 制作の現場でよく使われるSassを使用していたり、使用頻度の少ないHTMLタグなどの説明は省かれていたりするため、必要な知識を効率良く学習できます。
* セクションの後半では実際にWEBサイトを作ってインターネットに公開するところまでレクチャーしてくれるのですが、最終的に出来上がるWEBサイトはびっくりするぐらいかっこよくて、完成した時の達成感を感じることができます。
テクニック集として定期的に見返すのもいいですし、作ったサイトを元に改修を加えて自身のポートフォリオとするのもありだと思います。
無料サンプル動画の一番最初で実際に作成するWEBサイトの完成系を確認できますので、購入を迷っている方は是非チェックしてみてください！

#### 【JS】ガチで学びたい人のためのJavaScriptメカニズム
https://www.udemy.com/course/javascript-essence/
##### どんな講座？
JavaScriptに特化していて、JavaScriptを学ぶならこれ一つで十分なレベルの講座です。

しかし、タイトルにもある通りメカニズムについて触れており、JavaScriptの原理や裏側でどういった処理が行われてるかといった説明もありますので、難易度としては高めです。
メカニズム部分を理解できるとエラーに対する解決能力が上がったり、他人が書いたソースコードを読む力も向上すると思っていますが、最初は理解できていなくても学習に問題はないと思うので、難しければ聞き流しでいいと思っています。

##### どんな人におすすめ？
* JavaScriptは少し書ける程度で更に理解を深めたい人
* VueやReactを学習し始める前に基本となるJavaScriptの理解を深めておきたい人

##### おすすめポイント
* JavaScriptの学習で特に難しい（と思っている）非同期処理に関しても十分なボリュームを割いて解説してくれていて、実際にこの講座で非同期処理に対する苦手意識を克服できました。
* おまけ（といっても4時間30分の大ボリューム）でVueについても解説してくれるので、JavaScriptの復習+Vueの簡単な導入といった目的でも利用できます。

#### 【世界で7万人が受講】Understanding TypeScript 日本語版
https://www.udemy.com/course/understanding-typescript-jp/
##### どんな講座？
こちらは世界で7万人以上が受講して高い評価を得ているという講座を日本語に翻訳して解説してくれている講座です。
TypeScriptとJavaScriptの違いについての解説もされていますので、「TypeScriptは何がすごいのか」を理解しながら学ぶことができます。

##### どんな人におすすめ？
* JavaScript経験者でこれからTypeScriptを勉強しようと考えている人

##### おすすめポイント
* TypeScriptを使用してReactのアプリケーションを作成するセクションも用意されているので、今フロント業界で最も需要があるであろうReact+TypeScriptのモダンな開発を体験できます。

##### 注意点
* webpackの設定方法も解説されていますが、動画内のwebpackのバージョンが古い点に注意が必要です。
講座内と同じバージョンで受講した後に、最新バージョンでの設定に挑戦してみるのがおすすめです。

#### 【SAA-C03版】これだけでOK！ AWS 認定ソリューションアーキテクト – アソシエイト試験突破講座
https://www.udemy.com/course/aws-associate/
##### どんな講座？
当講座はAWSソリューションアーキテクトという資格取得を目的としていますが、AWSの基本的なサービスとその使い方を学ぶいう目的でも非常に重宝します。
AWSを利用している企業は多く存在しますし、個人開発でもポートフォリオ公開等でAWSを使用する際に役立つので、フロントエンジニアでもAWSの勉強をしておくことはメリットが大きいと考えています。

気が向いたらそのまま資格取得に目的を変えて学習することもでき、資格取得を目指す場合はこの講座での学習は最有力候補となるでしょう。

##### どんな人におすすめ？
* AWSソリューションアーキテクトの資格取得を目指す人
* 個人開発でAWSを使用したいと考えている人
* インフラ周りの知識をAWSを通して身に着けておきたい人

##### おすすめポイント
* 実際に手を動かしながら講座を進めるハンズオン形式も多く多く取り入れていているので理解しやすく、内容も充実しています。
* この講座のとても素晴らしいところは、3年前にリリースされた講座にも関わらず、現在もAWSのアップデートに応じて講座の内容も頻繁にアップデートされていることです。
私は3年前に購入しているのですが、今でもたまにアップデートされた箇所のチェックをこの講座でしており、一番お値段以上の価値があったと感じている講座です。