はじめに
こんにちは!テコンドーです。ちょっとずつあったかくなってきて気持ちよくて逆に寝坊しがちです。
コード書いていて最近よく思うのは、
この勉強法で一番効率がいいのか???
っていうことです。
プログラミング学習は色々な方法がありますよね。
- 本を使って勉強
- 勉強会に参加する
- オリジナルアプリケーションを作成してとにかく手を動かす
などなど、、、
その中で自分がやっていることが最短最速でスキルアップに繋がるのかが気になりました。
そこでググってみると、どうやら僕がやっている勉強法は遅延評価学習法と呼ばれる学習法だと知りました。
そこで今回は遅延評価学習法のメリット・デメリットをまとめ、その勉強法で学習を続けるかどうかを考えました。
皆さんの勉強の仕方を考えるいいきっかけになると思うので、ぜひ読んでみてください!
遅延評価学習法
遅延評価学習法とはなんなのでしょうか?
定義すると、「目標設定を行って、その目標に必要な知識だけを学ぶ学習法」のことです。
遅延評価というのはコンピューターサイエンスで使われている用語であり、値が必要になった時初めて計算を行うことです。
その概念を使って学習法の一つを説明したものが遅延評価学習法と言えます。
わかりやすい定義をブログから引用すると、
遅延評価勉強法とは、「その知識が必要になった時に初めて勉強する方法」です。もっと言えば、「○○を学んだから××をやってみる」ではなく、「××をやりたいから○○を勉強する」と定義できます。
今回は、実装することで学ぶ方法という定義に置き換えます。
例を挙げると、
- Railsチュートリアルでアプリケーションを作る
- オリジナルアプリケーションを作成する
などを想定しています。
メリットとデメリット
メリット
メリットとしては
- 目標の設定が容易
- モチベーションを維持しやすい
ということが挙げられます。
どちらもかなり大きなメリットだと思います。
プログラミングはとにかく覚えることが多いですよね。
Webアプリ開発一つとってもフロントエンドプログラミング、サーバーサイドプログラミング、SQL、ミドルウェア、ネットワークなど覚えることが大量にあります。
どれも大事なので何から手をつけていいのかわからなくなるし、何が自分にとって大事なのかを見極めることも難しいです。
その点遅延評価学習法では実装に焦点を当てているので目標の設定で困ることはありません。
作りたいものを決めさえすれば何が必要なのかは逆算して簡単に列挙できます。
プログラミングでよくある間違った目標として、
「Pythonをマスターする!!!」
とかがあります。
これはもっとも悪いケースの目標で
達成したか?期限はいつまでか?
などが明確になっていないため学習の濃度が薄くなってしまいます。
特に初学者であれば右も左もわからないと思うので、目標がしっかりしているほど学習スピードも上げることができます。
デメリット
デメリットは遅延評価勉強法だと得られなかったものに書かれているように、普遍的な知識を得にくいという点が挙げられます。
僕の言葉で言い直すと、なぜ実装できているのかがあやふやでもなんとかなる点がデメリットです。
今色々なプロジェクトに手を出していて、
- Nuxt,Flask,Docker,GCPを使ったWebアプリケーションの開発
- Vue+SVGでヌルヌル動くWebアプリケーションの開発
- Goを使ったAPIサーバーの開発
- Pythonを使った競技プログラミング
などに取り組んでいます。
これらの作業時には基本的に遅延評価学習を行なっていると思っていて、
やりたいことがある→ググる→実装→やりたいことの達成!
というサイクルを繰り返しています。
これらに取り組むことで
- Pythonの基本的な文法
- GCP-SDKの使い方
- クライアント、サーバーの通信方法
などの知識を虫食い方式で身につけています。
しかし、深い知識って身につかないなーと感じています。
僕の意識の問題なのかもしれませんが、問題にぶち当たった時に一番やってしまうのが
コピペガチャ(~~ not working で出てきた記事を順にコピペして試して強引に解決する)です。
これで問題の6割くらいは解決してて、とりあえず実装はできてしまうんですよね。
でも、なんで間違ったのかとか、どこがまずかったのかとかはわからないままになってしまいます。
これを繰り返してしまい、根本を理解しないまま何かを作ってしまいます。
この方法だと、似たような問題に対処する際にまた検索しないといけないし、コピペではどうしようもない問題に当たった時に積むんですよね。
このように実装をゴールにしてしまうと深い理論まで理解することが難しくなることがデメリットとなります。
まとめると、実装のゴールと学習のゴールは到達地点が違うという問題が原因となっているようですね。
自分はどうしようか
遅延評価学習法のメリットデメリットをまとめると、
メリット:モチベーションを維持しやすい
デメリット:根本まで理解せずとも目標を達成できてしまう
このようになりました。
では、僕はどうするかなのですが、やっぱり実装ベースで学習するのを基本的に行っていこうと考えています。
百聞は一見に如かずという言葉もあるように、手を動かして実際に動くものを作ることで理解も深まりますしなにより楽しいです。
しかし、それだけでは深い知識を理解することに繋がらないので、
疑問点の解像度を上げる
ということも並行して行なっていきます。
今行なっているのは、
実装の際に出てきた疑問点をToDoリストに放り込んでおくことです。
コピペコードで実装を完了させた時には、
なんでこれで動くのか?
このコードの意味は?
みたいな疑問が色々出てきます。それを忘れてしまうと根本的な理解につながらないので、それらをリストに放り込みます。
リストの各項目を時間がある時に調べ、Twitter等でアウトプットすることで、一応根本の理解にも意識を向けることができます。
Qiitaなどで記事が書けるくらい理解できればなおいいですね!!!
終わりに
エンジニアの効率のいい勉強をするための方法の一つである遅延評価学習について調べました。
無意識にやっている人も多かったのではないでしょうか???
違う勉強法を実践している方がいらっしゃるのであれば、
その勉強法のメリット・デメリットを意識しながら学習を行うことで勉強の質をより高めることができるようになるはずです!
意識していきましょう!!!
このようにスキルアップのための方法論も適宜まとめて行こうと思っています。
最短距離で目標に到達したいですよね!!!
一緒に頑張りましょう!
それでは!!!
参考記事一覧