【アドカレ駆動学習】新しい技術を学ぶ方法の備忘録

# 1. はじめに

皆さん、こんにちは！この記事では、新しい技術を学ぶ方法について備忘録も兼ねて記そうと思います。具体例も交えてステップバイステップで説明します。

**自己紹介**
- 2年連続で1人アドカレで記事を25件執筆しようとしているデータサイエンティストです。昨年は[生成AIについての記事を25件執筆](https://qiita.com/advent-calendar/2023/nebosuke-ai)しました。
- AIコンペに参加することが趣味で、Kaggle Masterの称号を持っています。
- 新しい技術を学ぶことが好きで、今週は『FastAPI』について学んで、アドカレに下記の記事を投稿しました。

https://qiita.com/Isaka-code/items/00b4c672674932871b8a

https://qiita.com/Isaka-code/items/34064820d893f71f2fb4


# 2. 学びの心構え

最初に、私が大切にしている学びの心構えを箇条書きで紹介します。

### 知識の世界地図を描く

自分の知識の全体像を把握することが重要です。マインドマップを活用し、知っていることと知らないことを視覚的に整理します。ソクラテスの「無知の知」という言葉が示すように、自分の無知を認識することで、学習のスタートラインに立てます。教科書の目次を熟読することも効果的です。

### 手を動かす

理論だけでなく、実際に手を動かすことで理解が深まります。リチャード・ファインマンが「作れないものは、わかったとはいえない」と述べたように、実践を通じて初めて真の理解が得られます。

### 思考のチャンク化

情報を小さな単位に分割し、周辺知識を積極的に取り入れます。専門用語の定義をしっかりと理解することは、学習の基盤を固める上で欠かせません。

### [オーバーラーニング](https://ja.wikipedia.org/wiki/%E9%81%8E%E5%89%B0%E5%AD%A6%E7%BF%92)を心掛ける

一度理解したと思っても、さらに深く学習することで知識が定着します。第3章でつまずいたら、第1章に戻って再確認するなど、常に自分の理解度をチェックしましょう。「完全に理解した」という幻想を捨てることが大切です。ただし、[オーバーフィッティング](https://ja.wikipedia.org/wiki/%E9%81%8E%E5%89%B0%E9%81%A9%E5%90%88)はしないように注意です。

### アウトプットを前提にする

学んだことを実際に使ってみることで、理解が深まります。Kaggleに参加したり、Qiitaに記事を書くなど、アウトプットを意識した学習は効果的です。

### 興味の赴くままにインプットする

目標志向も大切ですが、興味のある分野を自由に学ぶことで新たな発見があります。短期的な目的に縛られず、長期的な視点で学習を楽しみましょう。

### 複数の情報源と媒体を活用する

本、動画、公式ドキュメント、ブログ記事など、さまざまな情報源から学ぶことで多角的な理解が得られます。一次情報である公式ドキュメントやソースコードを重視し、必要に応じて二次情報も参考にします。また、シントピカル読書（参考：[『本を読む本』](https://bookclub.kodansha.co.jp/product?item=0000150900)）を行い、本質を明らかにします。

### 行き詰まったら休む

行き詰まったときは、一旦休息を取ることも重要です。睡眠やリフレッシュを挟むことで、頭がクリアになり新たなアイデアが生まれることがあります。
ﾈﾑｲ(´･ωゞ)(つ∀-)ｵﾔｽﾐｰ(。-ω-)zzz. . . (。ﾟωﾟ) ﾊｯ!

# 3. 学習プロセス：予習 → 授業 → 復習 → 実践

この学習プロセスは、学校の授業にも似ていますが、新しい技術を学ぶ際にも有効です。
実践フェイズまで完了したら、予習フェイズに戻って、学習プロセスを繰り返します。

### 予習

予習フェイズでは、大枠を掴むことを意識します。後の授業フェイズの理解を深める役割があります。

- **全体像の把握**：本や公式ドキュメントの目次に目を通し、学ぶ範囲を確認します。
- **自己診断**：自分の知っていることと知らないことを明確にし、学習の優先順位を決めます。

**FastAPIを学んだ際にやったこと**
- [公式ドキュメント](https://fastapi.tiangolo.com/)にざっと目を通す。シントピカル読書のために、[『Python FastAPI本格入門』](https://www.amazon.co.jp/Python-FastAPI%E6%9C%AC%E6%A0%BC%E5%85%A5%E9%96%80-%E6%A8%B9%E4%B8%8B-%E9%9B%85%E7%AB%A0/dp/4297144476/ref=tmm_pap_swatch_0?_encoding=UTF8&qid=&sr=)と[『動かして学ぶ！Python FastAPI開発入門』](https://www.amazon.co.jp/%E5%8B%95%E3%81%8B%E3%81%97%E3%81%A6%E5%AD%A6%E3%81%B6%EF%BC%81Python-FastAPI%E9%96%8B%E7%99%BA%E5%85%A5%E9%96%80-%E4%B8%AD%E6%9D%91-%E7%BF%94/dp/4798177229/ref=tmm_pap_swatch_0?_encoding=UTF8&qid=&sr=)の目次を熟読し、書籍の概要を掴む。

### 授業

授業フェイズでは、教材を順番に進めていきます。

- **動画教材の活用**：初めて学ぶ内容は動画で視覚的に理解すると効果的です。
- **簡単な教材から始める**：入門書や初心者向けの資料で基礎を固めます。
- **公式ドキュメントの参照**：自信がある場合は公式チュートリアルから直接学びましょう。
- **用語の確認**：学習中に出てくる未知の用語はその都度調べて理解を深めます。

**FastAPIを学んだ際にやったこと**
- 書籍を手元に置きながら、動画を活用し教材を進める。未知の用語を調べる。実際にソースコードを書く、動かす。


### 復習

復習フェイズでは、教材を改めて俯瞰的に見ます。理解が甘いところを重点を置いて習得します。

- **知識の定着**：学んだ内容を自分なりにまとめ、再度確認します。
- **問題演習**：関連する問題集やクイズで理解度をチェックします。

**FastAPIを学んだ際にやったこと**
- ソースコードを書いてみて、詰まったところを復習。教材の再読。

### 実践

実践フェイズでは、学んだことを何らかの形でアウトプットします。

- **アウトプット**：記事を書く、プロジェクトを作成するなど、学んだことを形にします。
- **最終チェック**：アウトプットを公開する前に、参考にした資料を再度確認し、知識を定着させます。

**FastAPIを学んだ際にやったこと**
- アドカレ記事の主題である、機械学習を用いたAPIを開発する。手順をステップバイステップに分割し、一つ一つ実現する。理解を試すために、記事を書く。

（以下繰り返し）


# 4. アドカレ駆動学習について補足

### 記事執筆そのものに時間をかけすぎない

記事の執筆自体よりも、インプットに重点を置く方が得られるものが多いと感じています。経験上、記事執筆にかけた時間とその質は必ずしも線形の関係ではありません。特に、執筆時間と「いいね」の数については全く関係がないと実感しています。

**参考**：これまでに私が書いた記事の中で、100いいねを超えたものが2つありますが、どちらも約2時間で執筆しました（反対に、とても時間をかけた記事の反応が薄かった経験も数多くあります）。
100いいねを超えた記事の執筆時間の内訳は以下の通りです。

- **A4用紙に構成のラフスケッチ**：10分
- **各要素ごとのアイデア出し**：30分
- **Qiitaエディターでの本文作成**：50分
- **修正とチェック**：30分

筆が進まない場合、その部分のインプットが不足しており、理解が浅いことが多いと感じます。そのため、行き詰まったら、その部分の学習に時間を割くようにしています。アドベントカレンダーの準備の大半は、理論武装とサンプルコードの作成に時間を費やしています。


### 文章を書く技法についての参考書籍

また、一度文章を書く技法をある程度身につけておくと、内容に集中しやすくなります。以下の参考書籍がおすすめです。

- **[『思考を広げる　まとめる　深める技術』](https://www.kinokuniya.co.jp/f/dsg-08-9990517878)**
- **[『理科系の作文技術』](https://www.chuko.co.jp/shinsho/1981/09/100624.html)**
- **[『マジ文章書けないんだけど ~朝日新聞ベテラン校閲記者が教える一生モノの文章術~』](https://www.amazon.co.jp/%E3%83%9E%E3%82%B8%E6%96%87%E7%AB%A0%E6%9B%B8%E3%81%91%E3%81%AA%E3%81%84%E3%82%93%E3%81%A0%E3%81%91%E3%81%A9-%E6%9C%9D%E6%97%A5%E6%96%B0%E8%81%9E%E3%83%99%E3%83%86%E3%83%A9%E3%83%B3%E6%A0%A1%E9%96%B2%E8%A8%98%E8%80%85%E3%81%8C%E6%95%99%E3%81%88%E3%82%8B%E4%B8%80%E7%94%9F%E3%83%A2%E3%83%8E%E3%81%AE%E6%96%87%E7%AB%A0%E8%A1%93-%E5%89%8D%E7%94%B0-%E5%AE%89%E6%AD%A3/dp/4479795863)**
- **[『［新版］考える技術・書く技術』](https://www.diamond.co.jp/book/9784478490273.html)**


# 5. おわりに

本記事では、新しい技術を学ぶ方法（how to learn）について紹介しました。何を学ぶか（what to learn）については、自分の既存の知識に隣接する分野から始めるとスムーズだと思います。私の場合、PythonやAIの知識を起点に、その延長線上でFastAPIをスムーズに学ぶことができました。ただし、効率よりも好奇心を大切にし、学びたいと思ったときが学習を始める最適なタイミングだと思います。

新しい技術を学ぶ際は常に「困難を分割」し、一歩一歩進めることが大切です。また、プロジェクトや資格取得など具体的な目標を設定し、それに向けて必要な知識を習得していくとモチベーションが維持しやすい方も多いかと思います。また、時間的な余裕を持って取り組むことで、目先の利益にとらわれず、長期的な視点で学習を楽しむことができます。

最後に、学び続けるためには自分自身の「やる気スイッチ」を見つけることが重要です。Kaggleなどのコンペに参加するのがモチベーションが高まるという人や、個人開発に燃える人もいると思います。人それぞれ最適な学習方法やモチベーションの保ち方は異なりますので、自分に合った方法を探してみてください。



# 6. 参考にしたもの

[『思考の整理学』](https://www.amazon.co.jp/%E6%80%9D%E8%80%83%E3%81%AE%E6%95%B4%E7%90%86%E5%AD%A6-%E3%81%A1%E3%81%8F%E3%81%BE%E6%96%87%E5%BA%AB-%E5%A4%96%E5%B1%B1-%E6%BB%8B%E6%AF%94%E5%8F%A4/dp/4480020470/ref=tmm_pap_swatch_0?_encoding=UTF8&qid=&sr=)


[『独学大全』](https://www.diamond.co.jp/book/9784478108536.html)

https://qiita.com/Isaka-code/items/6c81f89b48e9e74cb1c9