devlog

主に web 開発とかプログラミングについて書きます

効率的に新しい技術を学ぶ方法の探究 /「エンジニアの知的生産術」を読んだ

結構前に購入していたけど積ん読になっていた「エンジニアの知的生産術――効率的に学び,整理し,アウトプットする」を読んだ。4月末に転職も決まり新しい環境で早く結果を出せるように、入社前に勉強したいと思い、まずは勉強の仕方を学ぶことにした。

ブログを久々に書いているのも、この本でアプトプットすることの重要性が説かれていたからだ。

gihyo.jp

目次

(目次)

  • 第1章 新しいことを学ぶには
  • 第2章 やる気を出すには
  • 第3章 記憶を鍛えるには
  • 第4章 効率的に読むには
  • 第5章 考えをまとめるには
  • 第6章 アイデアを思い付くには
  • 第7章 何を学ぶかを決めるには

ブログとしては自分の中で重要だと感じた、1章〜3章までについてまとめることで、この本で学んだことをしっかり身につけて学習に活かせるようにしたい。

今日のブログでは1章についてまとめる

第1章 新しいことを学ぶには

この本では学びのサイクルとして以下の3つが重要であり、このサイクルを回すことで効率的な学びができるという解説があった。

https://image.gihyo.co.jp/assets/images/wdpress/plus/978-4-7741-9876-7/0001/001.png

https://gihyo.jp/magazine/wdpress/plus/978-4-7741-9876-7/0001

1 情報収集、体験

例えば 「Python の リストとタプルの違いについて知りたい」というのを例に取ったとき、ネットの記事や本を読んで調べるという行為が該当する

最初からから順番に読むことよりも、知りたいところから調べることで、やる気を持続しやすくすることを説いている。

知りたいところから学ぶためには、「目標が明確化されている」 「目標が達成可能である」 「大まかに全体像を把握している」 という前提条件ある

この条件に合致しない場合、初めは「大雑把に読む」「全体を理解する」ことを重要視している

例えば、Springフレームワークについて知りたいと思った場合、

「Springフレームワークを学ぶ」という目標は曖昧だし、達成可能かどうかの判断が難しい。 それなら目標は、「SpringフレームワークのうちDIについて理解し、DIの効果を誰かに説明できる」「DIを使った実装を行うことができるようになる」といったものが適切だと思う。

写経という方法についても言及されている

写経は補助輪

写経は非常に時間がかかる勉強法だが、確実な成果が出せるという点において有益 ただし、非効率的な学習方法であるということは念頭に置く必要がある

前に TypeScript で Redux を扱うときの型定義の仕方について学びたいと思ったときは、以下の本を必死に写経して動かし、自分のアプリに落とし込んで自分のものにした。時間はかかったが、成果が明らかなのと、コードを動かして学ぶサイクルを回すことでちゃんと理解が進むことがわかった。

oukayuka.booth.pm

2 抽象

抽象ということばは、「注目すべき重要な部分だけを抜き出す」 ということを意味している。 実際にこのブログを書く課程で、本の中から自分の中で「重要な部分」を抜き出している。 ブログを書くことで抽象化作業をしていると言えるのではないだろうか。

また抽象化された重要な部分だけを抜き出されたものを 「モデル」 と表現している。

具体的な事例から共通点や繰り返しを見つけた場合それをパターンと表現している。

学ぶ対象からモデルやパターンを見つけ、自分のものにすることで理解が深まる。

具体的に抽象化していくには、「比較して学ぶ」という方法がある。

具体的な事例の、同じ部分、違う部分に注目することで元々違いがわからずもやっとしていたものが、はっきりわかるようになる。

例えば、JavaC#、TypeScript、Ruby、Go の同じところと違うところ。

プログラミング言語という点においては同じだが、Rubyは動的型付けであり、それ以外は静的型付け言語という違いがある。

この本の中では、情報収集を、「箱を地面に並べる」という表現をしており、抽象化のことを「箱を積み上げる」という表現をしている

抽象化できているかどうかは

  • 自分の言葉で説明できる
  • 自分の経験に基づいた例を挙げることができる
  • 自分の目標を達成するために利用することができる

という条件を達成できた場合に抽象化ができたと言える。

このことは、何かをちゃんと理解したか?ということをジャッジするときには有効に思える。

3 検証

わかったような気持ちになったとしても、本当にわかったのかを確認する必要がある。 プログラミングの場合、作るって動かすことで検証が可能となる。

タプルとリストの違いを知りたい場合、タプルとリストに重複する値を入れて、標準出力してみてその結果を観察し、ちゃんと理解できていれば期待通りの結果となる。

プログラミング以外の場合、解説記事を書くことで検証となる。

今回のブログはまさに解説を書くこと検証している。

1日前の自分に説明できるか?ということを考えながら解説記事を書くことで検証となる。

あとは試験で検証する。情報処理試験など、テストがある場合はテストで確認可能である。

1章まとめ

  • 学びには、「情報収集、体験」「抽象」「検証」が必要でる
  • 情報収集には、目標を適切に設定し、目標が達成可能であることが重要
  • 抽象とは、大事なところを抜き出し、モデル、パターンを見つけること。自分の言葉で例えを交えて説明できることが重要
  • 検証は自分が本当に理解できているか確認すること。