- Webマーケティング
- 2021.07.25
こんにちは、プログラマーのとだこうきです。本記事ではプログラミングの効率的な学習方法について説明していきます。
受験勉強は得意だったのに、プログラミングとなると全然上手くいかないという人をよく見ますね。これはこれまで皆さんがされていた勉強と比べるとプログラミングの学習は異色だからです。
実際、Twitterを見ていると「あー能力がある人が間違った勉強している…残念だ…」と思うことが多いです。そして、そういう方が「〇〇という教材は悪い!これだと成長できない!」と他人のせいにしているのを見かけます。そういう方はまた違う教材を購入しますが、勉強方法が間違っているので成長せず、いたずらに時間を失います。
彼らがやるべきことは、教材を変えることではなくて「勉強方法」を変えることです。
この記事を通してプログラミングの学習を圧倒的に効率的に行うことができる方法を紹介していきます。教材を買う必要性を最低限にし学習時間を大幅に短縮できるでしょう。
プログラミング学習について以下の2つの観点から話していきます。
2. プログラミングスキルを伸ばす5つのステップ
プログラミング学習方法に関する一般的な話を先に行います。その次にその考え方を元に具体的に何を勉強すればよいのか話していきます。
プログラミング学習三大鉄則
まず、プログラミング学習する上での重要な考え方をシェアします。
なぜこういうめんどくさい話をするかというと「プログラミング学習は異色」だからです。なので、学校で培ってきたこれまでの勉強法はいったん忘れてください。むしろ、学校の自分の勉強法に自信を持っている人ほど、「頑張っても全然身に付かない」という落とし穴にはまる恐れがあります。
暗記教育から脱却
プログラミング学習と義務教育での学習の大きな違いは「暗記の有無」です。僕も独学時にこれに気づけずに失敗しました。
たとえば、以下のようなことやっていませんか?
- ググらないと分からないと「自分はまだまだだ」と思う
- Progateのスライドを完璧に覚えようとしている
- 単語帳を作る
- カラフルで綺麗なノートを作る
これらをもしやっているなら、早急に意識を変える必要があります。プログラミング学習に暗記は必要ありません。
何故かと言うとカンニングOKだからです。忘れたことは書籍を見ればいいですし、調べ物はGoogleを使えばよいでしょう。プログラムの基本文法を忘れたらツールに補助してもらえばよいのです。暗記する必要は全くありません。
暗記をする必要がないのに、必死に暗記していたらめっちゃ効率が悪いですよね。暗記って大変な作業なのに成果が出ないのですから。「頑張ったのに全然プログラミングできるようにならない」と自己嫌悪に陥るわけです。
ゆえに「勉強 = 暗記」という思考を持っている方は、プログラミング学習を行うと失敗する可能性が高いです。
「暗記よりも思考」です。プログラミングの考え方を理解して、それを元に問題をいかに解決するのか考えるのかが重要です。プログラミングはカラダで覚えるもの。プログラミングを暗記している人は図書館で泳ぎ方を勉強しているようなものです。泳ぎ方を学ぶよりも泳いだほうが上達します。
インプットしたらすぐにアウトプットすることを意識する
では、実際に「どうプログラミング的思考を身につけることができるのか」について説明していきます。
プログラミング的思考を身につけるには、プログラムを書くのが大事です。これ以外はないでしょう。自分で考えてコードを書くことで成長できます。
こう言うと「そりゃそうだ!」と思う人もいるかもしれません。たしかに、当たり前すぎるほど当たり前なことを言っています。でも、プログラミングを勉強していると「プログラミングを書きたくない」という心理状態に陥ります。「嘘だろw」って思うかもしれませんが、本当です。
何故かと言うと「プログラミングの文法を学ぶ」と「プログラムを書く」には大きな隔たりがあるからです。プログラムを書くというのは非常に難しいのです。心が折れるほど難しいこともあります。何時間も同じ問題を解決する手立てもなく考え続けるという地獄みたいな体験を繰り返すこともありえます。そのような体験を繰り返すと「プログラミング書くの嫌だ」という思考になります。
ただそれでも「プログラミングを勉強しなきゃッ!」と思うので、多くの人は暗記に走ったり同じことを何度も学習するという行為を行います。しかし、プログラミングは自分で書かないと成長しません。なので、勉強しているけど全然成長しないという悲しい結果が訪れます。
例えば、「アプリを作る前からifやswitchなどの条件分岐の書き方を全部覚えようとしている人をよく見ます。けれど、「ああ、そんな書き方があるんだな」と覚えておくだけで大丈夫です。プログラマーの僕ですら言語別のif文の書き方なんてちゃんと覚えていませんよ。
どれでもいいんだから、これくらい統一しろよ!
else if, elsif, elseif, elif— とだこうき@デイトラ運営 (@cohki0305) March 20, 2018
「学んだら自分でコードを書く」これを行うだけで周りと圧倒的な差をつけられます。
※ コードを自分で書くコツは次の章で具体的に説明していきます。
必要な分だけを学ぶ
最後の重要な考え方は、「必要な分だけを学びましょう!」というものです。
最強のプログラミング学習方法は「遅延評価勉強法」ですね
「必要な分だけを学ぶ」という非常に効率の良い学習方法です。インプットの時間を最小化してアウトプットを増やせるので最も成長しやすいですね
詳しくは以下のけんすうさんのブログを参考にしてくださいhttps://t.co/3xU6OLbxFe
— とだこうき@デイトラ運営 (@cohki0305) July 13, 2019
暗記の件もそうですが、無駄な努力をしている人が非常に多いです。そういう方は「完璧にしないといけない!」という考えを根底に持っている場合が多いです。しかし、これはプログラミング学習においては非常に危険と言えます。なぜなら完璧というのはプログラミングにおいてやってこないからです。無限に学ぶことがあるので完璧は一生やって来ません。
なので、プログラミングを学ぶ上では「必要な分を必要なだけ学ぶ」という考えです。プログラマーであり起業家のけんすうさんも「遅延評価勉強法」として紹介しています。
おいらの言葉で言いなおすと「必要になったら、必要なところだけ勉強する」です。
たとえばプログラムを勉強するときに、「書籍を1ページ目からやる」のではなく「2ch型掲示板が作りたいから必要なところを勉強する」のが遅延評価勉強法になります。
通常の勉強法と比べて、モチベーションが高く保てます。また、インプットとアウトプットがほぼ同時になされるので理解度、定着率がダントツに違います。
参照:勉強が苦手な人向けの「遅延評価勉強法」 | けんすう日記
この考えを常に勉強するのが非常に大事です。何か学習しようとしたときに「あれ?これって本当に必要かな?」と自答しながら取り組むと無駄を省けます。そして、アウトプット前提の学習方法なのでスキルアップ出来ます。
プログラミング初心者が基本文法をすべて覚えようとか理解しようとするとかは、あまりオススメできないのはこれが理由です。「なんとなくこういう考え方があるんだなー」とさえわかっていれば、詳しいことは必要になったときに学べばよいです。
プログラミングスキルを伸ばす5つのステップ
学習のマインドをお伝えできたので、具体的にどう勉強するのかを説明していきます。
STEP1. 開発したいものを考える
まず将来的に開発したいものを決めます。これはすごく重要です。
なぜかと言うと目標がないのにプログラミングを続けるのが難しいからです。作るものがないのに作る技術(プログラミング)を学ぶというのは非効率と言えます。
作るものが決まっていれば、それに必要な技術も見えてきます。そうしてその必要な技術を一つ一つ学んでいくうちに、自分の実装できる幅が増えていきます。本を読んで何のために使うかわからない技術を眺めるよりも100倍身に付く勉強になります。それに、こうした逆算的な勉強法に慣れていると問題解決力が上がるため、現場に入ってからも絶対に役立ちます。
遅延評価学習法を実践するにも開発したいものが必要です。
開発したいものはイメージで良い
とはいえ、多くの人は「何作ってよいか分からない」と思います。僕もそうでした。
ただ、開発したいものは適当でいいです。「サービスを作って世界を変えたい!」なんて大それた目標なんてなくていいです。自分の生活に役立つツールを作ろうとしなくてもいいです(もちろんあるほうがよいですが)。なんでもいいのですよ。
Twitter みたいなサービスをなんとなく作ってみたいとか、かっこいいホームページを作ってみたいとか、楽しいゲーム作りたいとか…
意識は低くても良いのです。ただ、自分が興味があるものを目標にすればいいです。
ちなみに僕が未経験のときに作ったものは以下です。
2. 雨の日に「傘持っていけよー」と通知を送ってくれるbot
3. Salesforceのデータから会社の売上推移をかっこよく見せるアプリケーション
4. 自分が持っている書籍を管理アプリケーション
大したものではないですが、そのときに少し興味があったものを作っただけです。大きな目標を持ってアプリケーションを作ろうとしたら手が動かなくなって時間を無駄にしていましたが、目標を下げたらいろいろ作ることができますよ。
STEP2. 開発に必要な技術を調べる
開発したいものが出来たら、それを実現するにはどういう技術が必要なのか調べましょう。
開発したいものを作るにはどういう技術を勉強するべきか調べます。基本的にググれば問題ないです。あるいは書籍を探しましょう。本屋に行けばたいてい「〇〇の作り方」みたいなものがあります。それをもとに何を学ぶべきなのか知ればよいです。
もちろん、特殊なものだったりすると簡単に情報を見つけられない可能性があります。その際はプログラマーに話を聞くのがいいです。teratail や Yahoo知恵袋のような質問サービスを利用することで確認できます。また、エンジニアが集まる勉強会に参加するのも良いです。僕も開催して、いろいろ相談に乗っています。
横浜で朝活してます
いろんな業界のIT関係者が集まったので転職の相談に乗りつつ勉強してます。定期的にやります
朝活@横浜 https://t.co/lBi9EDowFE #東京フリーランス pic.twitter.com/QcSkoWxfya
— とだこうき@デイトラ運営 (@cohki0305) July 14, 2019
他にもメンターを雇って相談にのってもらうこともできます。Mentaというサービスを利用してメンターを見つける事もできますし、プログラミングスクールに通って講師の方に見てもらう手法もあります。
STEP3. ProgateやUdemyを活用 ー ハードルが低いものからチャレンジ
学習に必要な技術が明らかになったら、まずは基礎を抑えていきましょう。
いきなり開発を始めてもいいのですが、最初はかなりハードルが高いです。なので、さらっと基礎をおさえておきましょう。
Progate や Udemy などの学習サービスを利用することをオススメします。これらのサービスはプログラミング学習のハードルを下げてくれています。深く学ぶことはできない場合が多いですが、基礎を学ぶにはちょうどよいです。
注意が必要なのは、ここでインプットを過多にならないようにするということです。
人は不安になると慣れている行為に走ります。インプットは失敗することがないので心地よいですし、勉強した気になります。なので繰り返してやってしまいます。しかし、それは往々にして無駄な時間なのでここは最小限にしましょう。
「よくProgate~周やった」と自慢げな人を見かけますが、ちょっともったいないように感じます。その情熱と時間を自分のサービス開発にあてていたら、もっと効率的に勉強できたでしょう。
あくまで遅延評価学習法に則り、学ぶべきものを必要最低限学びましょう。
STEP4. 実際に開発する
基礎をある程度身につけることが出来たら、実際に開発してみましょう。
何かを理解するには、その前にちょっとした成功体験が必要なんだと思った。
— 😈ひとりごと😈 (@memo_Devil1) July 13, 2019
いくら、先々を予想してインプットしても身につくには時間がかかるわけで…。
もし仕事などで理解がなかなか深まらないなら、それは自分が興味を持てていない、それか小さな成功体験を生めていないことなのかも。 https://t.co/mDFDy9KMSX
正直めっちゃ大変だと思います。「何やったらいいんだろう?」とか「全然覚えていない…」と絶望することになるでしょう。しかし、それは普通なことです。分からなければ調べればよいのです。今まで学んだことをカンニングしてチャレンジしましょう。
僕の勉強法もこれだなー。
①作りたいプログラムを決める
②どうすれば実装できるかググりまくる
③必要そうなページをすべてブクマ
④コピペを駆使してとりあえず動かす
⑤適宜修正して完成作りたいものだから
モチベも維持できてオススメ https://t.co/5KR29tRkzZ— トラハック@toraco, Inc. (@torahack_) July 13, 2019
そして、最悪開発できなくてもいいです。背伸びしすぎたのかもしれません。とはいえ、背伸びしたとしても自分で考えてコードを書いた経験こそスキルアップに重要です。インプットばっかりしていた人に比べたら確実に成長しています。
少し目標を下げて、またチャレンジすればいいだけです。
STEP5. また開発したいものを見つける
無事開発できたら、また新たに開発したいものを見つけましょう。
一つ出来たら終わりじゃなくて何個も作りましょう。前作ったものとは違うようなものを作ると良いです。作って作って作りまくることでアウトプット量が圧倒的に増えますし、それに伴ってインプット量も増えています。
一度作ってそこからチャレンジしなくなる人がいます。しかし、それをやると成長がそこで止まります。同じようなアプリケーションばかり作っている人も同じです。やっているようで全然伸びません。
プログラミング学習は応用力を身につけるのがゴール
実は、プログラミング学習は応用力を身につけるのがゴールです。
プログラミングはエンジニアリングです。技術を使いこなすことに価値があります。つまり、プログラミング学習とは使いこなすための練習と言えます。
使いこなす練習をせずに知識ばかりを詰め込んでいる人は猛省しましょう。勉強した気になっている可能性が高いです。努力し勉強した気になりそれでも成長していないときに人は、自分の努力を否定せずに「自分は向いていないんだ」と都合の良い考えを受け入れようとします。建設的ではないです。
シンプルに自分のやり方が間違っていたことを認めしょう。辛いでしょうが、これが成長のために必要です。この記事をきっかけに勉強法を見直せば、今からでも成長できるので今日から意識と気持ちを切り替えていきましょう。
業界最安級のオンラインスクール”デイトラ”の紹介
東京フリーランスでは、1日1題のステップで未経験からでも迷わず・楽しく学べる業界最安級のオンラインスクールデイトラを運営しています。
- 仕事に繋がる現場のスキルが身に付くカリキュラム
- 閲覧無制限&アップデートされるカリキュラム
- メンターは全員が現役で活躍するプロのみ
デイトラの強みは、現場水準の高いスキルを身につけられること。実務を意識したカリキュラムや、自分の頭と手を動かす実践的な課題を用意しています。
一度購入すればカリキュラムの内容は閲覧無制限なうえ、Web業界の流れに応じて都度カリキュラムをアップデートしています!そのため、実務に入ったあとも“生きた教科書”として使っていただけるでしょう。