プログラミング学習は、コア概念の理解と、ただの暗記を分けたほうがいい。
そうすると捗りそうだなぁと思ったので、文字に起こしておきます。
想定読者は自社のインターン生などプログラミング学習者です。現役エンジニアの方は読んでも面白くないと思いますので予め。
まとめるとこうです。
プログラミング学習は、コアになる概念の理解と、単に暗記すればよい箇所は分けた方が良さそうです。コア概念の理解がすすまないといくら暗記してもハラオチ感がなく、むしろ腹落ち感のために手を動かすのが良いかと思います。
— soya webエンジニア (@soyanaka21) 2016年3月2日
よくみる流れとその問題
「Rubyの文法をドットインストールでやったら、早速Railsでサイトを作ってみよう!」というのがよくあるパターンかと思います。
これだと、動くものができるのでモチベーションを維持しやすいし、なんにせよ完成に近づくのでなかなかいいアプローチだと思います。
しかし一方で、動くものは出来たけど、なぜ動くのかわからないという状態になりがちです。理解して作っているわけではなく、コピペしたコードがたまたま動いたとか、コピペしたコードを真似して書いたコードがたまたま動いたとかの積み重ねにすぎないからです。
繰り返しますが、僕は「とりあえず作ってみよう!」は、よいアプローチだと思っています。ただ、いつかはそこから抜けだして効率的に学ぶ必要があると思っています。
効率的に学ぶには
そこで出てくるのが、冒頭の手法です。
プログラミング学習は、コアになる概念の理解と、単に暗記すればよい箇所は分けた方が良さそうです。コア概念の理解がすすまないといくら暗記してもハラオチ感がなく、むしろ腹落ち感のために手を動かすのが良いかと思います。
— soya webエンジニア (@soyanaka21) 2016年3月2日
たとえばプログラミングが初心者がRubyやRailsを触るなら、オブジェクト指向、オブジェクト、クラス、インスタンス、カプセル化、隠蔽化、MVCといった概念が登場します。これらを全く無視してチュートリアルや検索&コピペを駆使するだけでも、サービスの立ち上げは可能です。
しかし、なぜこうしたら動くのか、なぜこうなっているのか、理解することができません。結局はそれらの概念を理解しなければ大きく前に進むことはないのです。
それの概念がどういうものなのか、どのような経緯で生まれたのか、どのように役立つのかを知ることで、
そうすると、「こういうことが出来そうだな」「こう書くほうがよさそうだな」という日常業務レベルでも役に立ちますし、同じ概念を用いた別のモノを素早く理解できるようになると思います。
コア概念さえ理解できれば、あとはただ暗記すれば良いだけです。
効率よく大量の情報をインプットするだけなので、書籍を計画的にすすめたり、エントリを漁ったりすればよいです。
まずコア概念。つぎに暗記。
手を動かさないと概念が理解できないということはもちろんあると思いますが、理想としてはこの順番だということを念頭に置くと、良いのではと思います。