原文は how-to-learn-stuff-quickly で、多くの恩恵を受けたので、翻訳して皆さんと共有します。
人々はよくインターネットが教育を民主化したと言います:Google で検索するだけで人類の知識の総和を得ることができます!しかし、情報を得ることは物語の始まりに過ぎず、その後、原始的な情報を実用的なスキルに変換する必要があります。
私たちの多くにとって、この二つの間のギャップは「チュートリアル地獄」を引き起こす可能性が高いです —— 次々とチュートリアルに陥り、実質的な進歩を感じることができません。
「効果的に学ぶ方法」を理解することは非常に重要であり、特にソフトウェア開発者としては;新しいことを学ぶことはほぼあなたの全ての仕事です!新しい言語 / フレームワーク / ツールを迅速に習得できれば、一般的な開発者よりも効率的に作業できます。これは間違いなく超能力です。
このブログでは、私の学習経験を共有し、どのように新しいスキルを迅速に習得したかをお見せします!
混合#
広義には、学習には二つのタイプがあります:
- 指導的学習:チュートリアルを読む、コースに参加する、ビデオを見る。何らかの指導がある学習方法。
- 非指導的学習:自分のプロジェクトをゼロから作成する、チュートリアルを拡張する、ドキュメントを調べる。ガイドに従わない行動。
指導的リソースだけに従うと、チュートリアルの地獄に陥り、成功した開発者に必要な問題解決スキルを学ぶことができません。自分のプロジェクトを構築しようとすると、どこから始めればよいかわからず、多くの時間を練習しても実用的なスキルを学べていないと感じることになります。
一方で、完全に非指導的な学習に集中すると、非常に時間がかかります。経験豊富な指導者がいなければ、すべての車輪を再発明する必要があり、すでに解決された問題を解決するのに数日または数週間を費やすことになります。これは長くて苛立たしい道のりです。最悪の場合、あなたは完全に諦めてしまうかもしれません。なぜなら、自分が十分に賢くないのではないか、このことに向いていないのではないかと感じるからです。
だからこそ、私たちはそれらを混合する必要があります。指導的リソースに非指導的学習のアイデアを加えましょう。
故意に間違える#
あなたは私と同じように、間違えることが嫌いで、すべてが最初から完璧に進むことを望んでいるかもしれません。
この心構えは一般的に生活に役立ち、他の分野でも役立ちます。もしあなたが自動車整備士であれば、間違った部品は数百ドルの損失を引き起こす可能性があります。もしあなたが歯科医であれば、一つの間違いが誰かの笑顔を台無しにするかもしれません。
しかし、ソフトウェア開発においては、間違いは無料です!私たちが間違いを犯した場合、エディタに戻り、コードを変更して再試行することができます。私たちは有用なエラーメッセージも持っており、それが正しい方向を示してくれます。これは実際には贅沢であり、私たちはそれを十分に活用していません。
チュートリアルを学んでいるとき、私はコードを「遊ぶ」のが好きです。提供されたコードを逐語的にコピー / ペーストするのではなく、次のように試してみます:その中の一行を省略するとどうなるか?あるいはその中のいくつかの数値を変更するとどうなるか?
私は科学者のように行動しようとします。このコードがどのように機能するべきかについて仮説を持っている場合、その仮説をテストするためにコードを変更し、私が期待する方法で中断するかどうかを確認します。仮説に欠陥があることに気づいたとき、私はチュートリアルを飛ばして Google で調査を行います。もちろん、「ウサギの穴」を掘りすぎた場合は、「後で探求するもの」としてそれを追加します。
このプロセスは、私たちが「自動運転」のチュートリアルに従い続け、「コードをコピー / ペーストするが、それが何をするのかを本当に理解していない」または「なぜそうするのか分からない」というリズムに陥るのを避けるのに役立ちます。
学習は能動的なプロセスであるべきです。コードを探求することは、私たちが何が起こっているのかを理解するためのメンタルモデルを構築するのに役立ちます。
チュートリアルを薄める#
数年前、私が仕事を始めたばかりの頃、私は「チュートリアルを薄める」というプロセスを使用しました。
その原理は次のとおりです:
- チュートリアルを逐語的に学び、一歩ずつ進む。
- 完了したら、コードを初期状態にリセットし、チュートリアルのウェブページを最小化します。チュートリアルを見ずにどこまで進めるかを見てみましょう。行き詰まったときはチュートリアルを引き戻し、障害を乗り越えたら再び最小化します。
- このプロセスを繰り返し、チュートリアルを見ずに最初から最後まで完了できるようになるまで続けます。
上記の科学者の心構えのように、このプロセスは有用です。なぜなら、それはあなたに集中を強いるからです。チュートリアルは徐々に消え、最終的には指導なしでそのものを構築する方法を学ぶことができます。
この方法は非常に効果的ですが、すべての人が同じものを繰り返し構築するのを好むわけではありません。しかし、もしあなたがチュートリアル地獄から脱出しようとしているなら、試してみる価値があるかもしれません!
チュートリアルを拡張する#
私たちが React の公式チュートリアル を学んでいると仮定しましょう。井字ゲームを構築することで React を学びます。
このチュートリアルを完了すると、機能的ではあるが非常にシンプルなゲームを作成します。
私たちはそれにさまざまな面白い要素を追加できます:
- 各プレイヤーが何試合勝ったかを追跡する
- UI を強化するためにより多くの表示コンポーネントを使用する
- ボードのサイズを設定できるようにする(4x4、5x5)
- プレイヤーが対戦できる AI を追加する
- 一部の奇抜なアイデア(アニメーション、音響、勝利時の紙吹雪など)
創造力を発揮し、あなたが本当に興味を持っているものを選びましょう!
この戦略は素晴らしいです。なぜなら、ゼロから始めるプレッシャーを避けることができるからです。すでに機能的で理解しやすいプロジェクトがあるからです。
注:私もこのようにして、井字ゲームのチュートリアルを拡張した デモ があります。
関連プロジェクトを作成する#
井字ゲームプロジェクトを完了した後、次に何をすべきか少し不安になるかもしれません。
別のチュートリアルに飛ぶ前に、ゼロから似たようなプロジェクトを構築してみるのは良いアイデアかもしれません。
例えば、ビンゴゲームを作成することができるかもしれません(訳者注:または中国人に馴染みのある五子棋ゲームに変更することもできます)!あなたは少し異なる文脈で新しいスキル(状態管理、イベントリスニング)を活用できます。チュートリアルで扱われていないために解決できないことに直面するかもしれません。その場合、Google で検索して解決策を見つけようとすることができます(訳者注:今は ChatGPT もあります!)。
もし本当に解決できない場合は、一時的にそのプロジェクトを保留にすることができます。いくつかのチュートリアルをこなしてから戻ってきて、解決するのに十分な内容を学んだかどうかを確認してください。
この戦略は「one on, one off」と呼ばれることがあります。指導リソース(チュートリアルなど)に従い、その後同じ時間を使って似たような(しかし指導なしの)プロジェクトを作成します。もしチュートリアルが Instagram のクローンを作成する方法を示しているなら、自分で Twitter のクローンを作成してみてください!
バランスを探る#
私が学び始めたとき、私は主に指導的学習に集中する傾向がありました。文法や基本を学んでいる間は、非指導的な方法で何かを作成するのは難しいです!
しかし、文法に慣れてくるにつれて、バランスが変わりました。私は非指導的な学習にますます多くの時間を費やし、私にとって興味深いものを作成しました。新しい未知の問題に直面したときはチュートリアルを求めますが、経験を積むにつれてその頻度は減っていきました。
私のグラフは次のようになります:
あなたのグラフは、正しいバランスを見つけられるかどうかによって少し異なるかもしれません。重要なのは、指導的または非指導的学習のみに焦点を当てないことです。
マインドセットを育む#
数年前、私は友人たちとボウリングに行きました。
私はとても悪く、ほとんどのボールが溝に落ちました。試合が終わる頃には、私のスコアはグループの中で最低でした。
この状況を説明する二つの異なる方法があります:
- 私はボウリングが得意ではなく、永遠に得意ではない、ボウリングは私の得意分野ではない。
- 私はボウリングが得意ではないが、もし望めば、素晴らしいボウラーになることができる。
これは自己実現の予言です:どちらの説明を選んでも正しいです。もしあなたが自分のボウリング技術が固定されていると考えれば、それは固定されます。もしあなたが自分が進歩できると信じていれば、必ず進歩します!
新しいスキルを迅速に学ぶためには、正しいマインドセットを育むことが重要です。
ソフトウェア開発において、物事は決してスムーズには進みません。避けられないことに、私たちはさまざまな状況に直面し、コードが期待通りに動作しないことがあります。
これは悪循環を引き起こすかもしれません —— 挫折感、自信の欠如、インポスター症候群に満ちて —— または素晴らしい学習の機会として捉えられます。正しいマインドセットがあれば、理解しにくいエラーメッセージよりも、迅速に学ぶのに役立つものはありません。
正直なところ、何の苦労もなく成功することと比べて、私たちは奮闘や失敗から多くを学びます。成長マインドセットを持っていれば、奮闘は必ずしも楽しいものではないかもしれませんが、非常に生産的に感じられます。まるで良い運動をしたかのように。
目標と動機#
私たちはソーシャルメディアの誇大宣伝の世界に生きており、流行に乗り遅れないように、Twitter で出現するすべての人気の JS ライブラリを学ぶようにプレッシャーを感じることが簡単です。
個人的には、毎回そうしようとすると、うまくいきませんでした 😅
私は学ぶために学ぶ特別な動機を持っていません。私を動かすためには、心の中に刺激的で具体的な目標が必要です。
例えば:数年前、私は VR ビデオゲーム「Beat Saber」を見つけました。このゲームでは、光の剣でブロックを攻撃し、音楽に合わせてプレイします。各曲には独自の振り付けがあります。
コミュニティにはユーザーが自分の振り付けを作成するためのソフトウェアがありますが、私はそれが好きではなく、Beat Saber のための自分のマップエディタを作りたいと思いました。
数ヶ月の苦労と時折の挫折を経て、私は目標を達成しました。このプロジェクトに興味がある場合は、GitHub でコードを確認できます。
このプロジェクトの前には、私は 3D の経験がなく、WebGL、Three.js、react-three-fiber について多くを学ぶ必要がありました。学ぶことは大変で、どんなに良いマインドセットを持っていても、物事がうまく進まないことはあります。
しかし、具体的な目標があったため、私は挫折を克服し、進歩を続けることができました。もし私がただ楽しむためにこれらのことを学んでいたり、履歴書に良さそうだからという理由で学んでいたら、すぐに諦めていたかもしれません。
人それぞれ動機は異なるので、あなたがニッチなプロジェクトを作成する必要があるとは言いません。しかし、心の中に本当に興奮する目標を持つことは重要だと思います。そうでなければ、最初の新鮮さが失われた後、必要な動機を維持するのは難しいです。
記憶力#
私の記憶力はあまり良くありません。これは少し問題になるかもしれません;物事を覚えていないと、学ぶのが難しいです!幸いなことに、私は記憶システムを持っています:間隔反復です。
間隔反復の核心的な考え方は、記憶を強化するためには、それが消えそうなときにすぐに見直す必要があるということです。記憶を強化するたびに、それはより長く持続します。
これは複雑に聞こえるかもしれませんが、これを追跡するためのツールがいくつかあります。個人的には、数百枚のインデックスカードを収容できる実体のレイトナー・ボックスを使用しています。毎日、少しのカードを復習します。
具体的には、どうすれば何でも永遠に記憶できるか の説明を確認してください。
日常習慣を身につける#
私たちが毎週 7 時間新しいことを学ぶことを約束したとしましょう。あなたは、毎日 1 時間その活動を行う方が効果的だと思いますか、それとも毎週日曜日に 7 時間を費やす方が効果的だと思いますか?
興味深いことに、私はより頻繁に少しの時間を費やすことでより大きな成功を収めました。
私はすべての人がそのような贅沢な時間を持っているわけではないことを知っていますが、もしできるなら、毎日学びたいことに少しの時間を費やすことを強くお勧めします。
私がなぜそれが私にとってより効果的だと思うのかについていくつかの仮説があります:
- 毎晩、脳はその日に学んだ知識を処理して提出します。私は毎日それを利用したいと思っています、週に一度ではなく!
- 毎日練習することで、私は中断したところから学び続けることができます。記憶をリフレッシュして再スタートするのに多くの時間を費やす必要はありません。
- 私たちが話し合ったように、新鮮さが失われた後に動機を維持するのは難しいです。もしそれを日常生活に組み込むことができれば、動機についてあまり心配する必要はありません。あなたがどう感じていても、それはあなたがやるべきことになります。
公開学習#
私は Swyx のLearn in Public哲学の熱心な支持者です。
その主な考え方は、私たちが学んだ知識を公開することで、未来の自分を助けることができるということです。新しいことを発見したとき、私たちはそれを記録するためのドキュメントを作成すべきです。例えば、ブログ記事、ツイート、YouTube 動画などです。
これは少し直感に反するかもしれません;なぜ私の「学習時間」を使ってブログ記事を書くのですか?これは時間の無駄ではないですか?
公開学習には多くの利点がありますが、私が見つけたものは以下の通りです:
- 誰かに何かを説明しようとしたとき、あなたが思っているほど完全に理解していないことに気づいたことはありますか?ブログ記事を書くことも同じ効果があります。これは、メンタルモデルの欠陥やギャップを発見する最良の方法であり、それを修正できます。
- 世界で最も悪い気持ちは、以前に解決したエラーに遭遇し、それをどのように解決したかを思い出せないことです。もしあなたがそれについてのブログ記事を書いていれば、参照できます!
- あなたが学んだ知識を共有することで、開発コミュニティの積極的な参加者になります。友達を作り、つながりを築くことができます。これは楽しく充実したものであり、新しい仕事を探したり新しいビジネスを始めたりする際の利点もあります!
一つの警告:完璧なブログをゼロから構築するのに数週間を費やす罠に陥らないでください!まずは Dev のようなプラットフォームで公開したり、Twitter で投稿したりできます!ブログを構築する前に、私は Medium に数十の記事を投稿しました。もしあなたが本当に公開学習を楽しんでいるなら、いつでも美しいカスタムブログに移行できます。 😄
スキルネット#
最近、私は Blender を使って 3D イラストを作成する方法を独学で学び始めました。
私はまだ初心者で、このスキルに約 150 時間を費やしましたが、いくつかの見栄えの良いアート作品を作成することができました。
私がこれほど迅速に学ぶことができたのは、このブログ記事に記載されているすべてのテクニックに従ったからです。しかし、もう一つの強みがあります:スキルの相補性です。
3D イラストは単一のスキルではありません;それは数十の個別のスキルの集合です。その中には、3D モデルを作成するような私にとって全く新しいものもあり、ゼロから学ぶ必要があります。しかし、その中には私が経験したものもあります。
例えば:私は写真愛好家です。数年前、私は構図を学び、視野内に要素を配置して魅力的なショットを得る方法を学びました。レンダリング中にオブジェクトを配置する際に、これらのスキルを活用できます。
これは特に具体的な例ですが、他の例はより曖昧です。フロントエンド開発者として、私は何年もかけて細部に対する観察力を育ててきました。これらのピクセル化された作業は、適切な斜面や厚さの数値を考え出すのに役立ちました。また、私の UI デザインの仕事は、色彩理論や美学を理解するのにも役立ちました。
あなたは私が持っているスキルが 3D イラストと協力できるとは思わないかもしれませんが、それは確かに私に大きな利点を与えました。
私にとって、スキルは富のようなものです。私が持っているスキルが多ければ多いほど、それらが蓄積される速度が速くなります。一つの分野で集めたアイデアや技術は、別の分野で役立つことがあります。
私はあなたがオールラウンダーになるべきだとは言いません —— 深い専門知識を持つことも価値があります!しかし、あなたのスキルネットが大きくなるほど、新しいことを学ぶ際の利点が増します。