今回は、プログラミングの学習方法を話していくのですが、
最短で学ぶには「逆算思考」を意識する事が大切、という話をしていきます。
今は、プログラミングで学ぶ方法として、本や動画、スクールなどで学ぶ人が多いと思いますが、
その中で絶対に身に着けなければならないもの、を知らない人が多いです。
それは何なのかと言うと、「一からプログラミングをする能力」です。
この記事はYouTubeで動画でも見ることができます。
プログラミングスクールでも「一からプログラミングをする能力」を鍛えない
今のプログラミングのカリキュラムでは、「一からプログラミングをする能力」を意識させて鍛える事をしてないんです。
今のカリキュラムというのは、学んでいる本人に、「そこ」に気付けるかどうかを、委ねている状態だと思っています。
気づいた人はプログラミングが出来るようになるし、気づけなかった人は挫折する。
と別れていくと感じます。
もちろん、世の中すべてのカリキュラムを把握しているわけではないですが、
知っている限りでは無いし、私も10年以上前にプログラミングスクールに通ってましたが無かったです。
そして、「一からプログラミングをする能力」を身につけるためには、「逆算思考」を意識して学ぶ必要がります。
この動画では、プログラミング学習の一通りの流れと、
「一からプログラミングをする能力」を身につけるにはどういう勉強法をしたほうがよいのか、という話をしています。
プログラミング学習の一般的な流れ
まず、一般的なプログラミングを学ぶ流れを説明しますと、
大きく3つに分けられます。
- 基礎を学ぶ
- コードを書き写して学ぶ(写経)
- ポートフォリオ作り
本とかで勉強すると、1と2の、基礎とコードを書き写して学ぶところまでを学んでいくものが多いです。
プログラミングスクールだと、卒業制作とか言われたりしますが、自分で企画して一から作り上げるという事もやります。
基礎を学ぶ
まず、基礎に関してですが、
ここではプログラミングの基礎となる、
変数、関数、配列、if(分岐)、for(ループ)
みたいな基本的なものを学びます。
これはサラッと、やれば良いもので、
あとは、わからないときに見返せば良いです。
それで、基礎の学習方法なんですが、独学の場合はプロゲートで良いかなと思います。
ブラウザ上で、コードを打ち込む学習方法なので、非常に学ぶハードルが低いです。
コードを書き写して学ぶ(写経)
そして、基礎を一通りやったら、次はコードを書き写して学んでいきます。
本や、プログラミングスクールとかではあまり言われませんが、
コードを書き写して学ぶときに意識したほうが良いことがあります。
書き写して学ぶときに意識したほうが良いことがあります。
ここで意識して学びたいことは、
1.プログラミングコードに慣れる(完成されたコードを書き写して動かす)
2.設計方法を学ぶ(言語特有のものであったり、MVCパターンやフレームワークとか)
そして、私が考えるに一番大切なことがもう一つあって、
それが、
3.コードを書く上での選択肢を手に入れる。
ということです。
選択肢ってなんなのかと言うと、
プログラミングって、基礎を覚えて、コードを書き写して、なんか英語とか語学を勉強するような感じとか、
「やればわかる!」みたいなとりあえずやらせてスポーツみたいに例える事がありますが、
これは、あくまでプログラミングの一面であり、本質ではありません。
プログラミングというのは「逆算」なんです。
プログラミングの本質は「逆算」
これは、「○ + ○ = 20」 みたいな話。
これは結果が先にあって、そこに辿り着くためには何が必要なのか、ということを考えていく事が、
プログラミングではとても大切な思考で、
「コードを書く上での選択肢を手に入れる」というのは、
この○に当てはまる部分を、意識的にコードを書き写しながら自分のものにする、という話です。
プログラミングで作らているものは、例えば、何か作りたいアプリやwebサービスがあって、
そのために必要な機能が何なのか、そして、その中の一つの機能を作るためには、どういう処理が必要かと考えます。
すべて、辿り着きたい結果があって、そのために何が必要かを考えていく流れになります。
ただ、「逆算思考」は、コードを書き写しているだけだと身につきにくいもので、
なぜかというと、この思考というのはコードを書く前のものだからです。
冒頭でも話しましたが、今はこの思考方法が身につくかどうかを、学ぶ側に委ねている状態です。
身に付けられない人は、「何がわからないか分からない」状態になり、
そのままカリキュラムを続けても「一からプログラミングをする能力」が身につかず、
イマイチプログラミングをするという事にピンとこないまま、という人も多いです。
ただ、であれば意図的に「逆算思考」を意識して、
「一からプログラミングをする能力」を身につける訓練をしたらよい、というのが私の考えです。
「一からプログラミングをする能力」の訓練方法
では、その学習方法を話していきます。
プログラミングに限らず何かを学ぶときに重要なことは、
- 今自分が目の前の勉強方法で何を身につけるのかを意識する
- 自分が何が出来ていないのかを理解するために、ハードルを分ける
という事だと、考えています。
なので、
「小さなコードを題材に、コードを書く前に、言葉で処理を考える」
という勉強方法をおすすめします。
「小さなコードを題材に、コードを書く前に、言葉で処理を考える」という学習方法のやり方
- 小さなコードほど数をこなしやすいので、小さなコードで良い
- コードを書き写す学習で得た選択肢を使うか、もしくはそこから推測してググって考える
- 訓練の場合は、バグとか細かいことは気にしなくてOK
- そして数をこなすことが重要、あくまで反復訓練です
フロントエンドの話になりますが、
よくあるボタンをクリックしたら、スマホメニューが画面の右から出てくるものを例に考えてみると、
結果:メニューボタンをクリックしたら、メニューが画面の右から出てくる
- JSのクリックイベント
- クリックイベントでclassを付ける方法
- メニューをCSSでアニメーションさせる方法
この3つがわかっていると、スマホメニューの機能が作れます。
これを、このように日本語で書き出した後に、実際にコードを書いて行きます。
そうすることで、
- 思考する部分が出来ていないのか
- コードを書く部分ができていないのか
このように、ハードルを分けることで、何が出来ないのかを明確にすることが出来ます。
とくに日本語で処理を書き出すときに、思考する事を意識する、ということが大事です。
もしコードを書く前に、これから書く処理の内容を書き出せないという場合は、
コードを書き写す学習で、選択肢を得る、という事を意識できていなかったり、
そこから推測してググることが出来ていないと思います。
初心者のころはコードを一つの流れとして見がちなのですが、
各処理を点として意識して、言葉にしてみることをしてみてください。
本来はアウトプットが「一からプログラミングをする能力」を鍛える方法だった
スクールの卒業制作や、プログラミング学習でよく言われる、とにかくアウトプットする。
何か小さいものでも良いから作る。
というのは、私がプログラミングを始めた15年くらいまえから、そして今もずっと言われていることですが、
本来はこれが「一からプログラミングをする能力」を鍛えるためのものだったりします。
作るものを想像すると、無意識に逆算思考をするようになり、それを繰り返すと身につく。
という流れです。
ただ、ものを作るというのは、とくにスクールの場合は、期限が決まっているため、
作ることを優先してしまう人が多いです。
そうなると、カリキュラムに手を加えただけとか、ネット上にあるものをもってきて改修してつくろうとるなど、
ショートカットすることを意識する人が多くなります。
これは、仕事で納期に追われている、という事だったらよいのですが、
学習期間中の未経験者がこういう意識になってしまうのは、良くないかなと考えています。
これは、今自分が目の前の勉強方法で何を身につけるのかを意識する、ということが出来ていないからです。
やっぱり私は「一からプログラミングをする能力」は、きちんと、それ用の訓練で身につけたほうがよいかなと思います。
まとめ
学習の流れをまとめると
1.プロゲートで基礎を学ぶ
→ サラッとやって後で見返せば良い
2.本や動画やネット上のチュートリアルのコードを書き写して学ぶ
→ プログラミングコードに慣れる(完成されたコードを書き写して動かす)
→ 設計方法を学ぶ(言語特有のものであったり、MVCパターンやフレームワークとか)
→ コードを書く上での選択肢を手に入れる。
3.小さなコードを題材に、コードを書く前に、言葉で処理を考える訓練
→ 小さなコードほど数をこなしやすいので、小さなコードで良い
→ コードを書き写す学習で得た選択肢を使うか、もしくはそこから推測してググって考える
→ 訓練の場合は、バグとか細かいことは気にしなくてOK
→ そして数をこなすことが重要。あくまで反復訓練です。
4.ポートフォリオ作り
最後に:プログラミング向いてなくてもスキルは身につけることは出来る
今回話した学習方法というのは、
私自身がプログラミングにつまずいて、一からプログラミングを出来るようにするために考えた学習方法です。
当時は独学で挫折して、プログラミングスクールで挫折して、プログラミングが必要ないWeb制作の仕事につきました。
そこで、コピペでも済む、案件で使う小さなプログラムを時間があるかぎりは極力自分で作るようにして、やってきた方法です。
例えば、タブ切り替えとか、アコーディオンとか、スライドショーとか、を極力自分で考えて作るようにしてました。
ハッキリ言ってかなりつまずいて来たわけですが、
そんな私でも今はフリーランスのフロントエンジニアとして、月70〜100万ぐらい稼げています。
プログラミングが難しいか簡単かというのは、ネットではよく聞く話題ですが、
それは数学や英語と同じく人による。と言うのが答えだと思っています。
ただ、やれば誰でも働けるレベルにはなるので、ぜひチャレンジしてみてください。