見出し画像

【初心者向け】プログラミングが早く上達する考え方~初心者にありがちな3つの間違いと正しい思考法~

プログラミングを学習するときのやり方やフローを解説している記事や動画は多いですが、その学習に取り組む際にどういったことを考えているか、頭の中を解説している記事は少ないように感じます。ですので、今回は僕が初心者の時代にプログラミングを勉強したときにどういったことを考えながら学んだのかを紹介します。対象者はプログラミングを学び始めたばかりの初心者に向けて書いています。

初心者がやりがちな間違った学習法3選

1.写経学習

あなたはプログラミングを学習する際にコードを真似て打ち込んでいるでしょうか?だとしたら即刻やめてください。プログラミング初心者はまだ右も左もわからない状態です。その状態では打ちながら理解するということがそもそもできません。大抵は打つことにいっぱいいっぱいになり、理解がおろそかになります。それどころか打ミスによるバグのリスクもあります。そのため、エラーが出たときに打ち込みミスなのか、コードの書き方が悪いのか判断が付きません。初心者はまだそれを判別するための知識が備わっていないので無駄に時間を浪費してしまいます。そのため、例題に関してはコピーアンドペーストして動作を確かめてください。プログラムをデバッグする際は原因の切り分けが重要になります。いきなり原因の切り分けまでやろうとすると処理するタスクが多すぎでモチベーションの低下に繋がります。特に初心者は小さな成功体験を積むことが大事なので、余計な問題の原因になるものは排除すべきです。実際に、できるプログラマほど自分でコードを打ち込んで書かず、既存のものを流用して書きます。なぜならそのほうが余計な問題が起きにくいからです。まずはプログラミングはできるだけ書かない法が良いという考えを押さえてください。

2.文法を暗記しようとすること

プログラミングと学校のテストと違って、検索すれば出てくるので覚える必要がありません。そうではなくて、その文法をなんのために使うのか、どういったときに使えるのかといったストックを貯めるのです。プログラミング的考え方とは、いかに最小の労力で目的のものを完成させるかという思考が大事なのであって、文法を覚えることに意味はありません。例えば、if文が「条件を判定したいときに使うものだ」と理解しておけばいいのです。

3.完璧になるまで先に進まない

あなたは解説本や解説サイトなどで疑問に思ったことがあると、それが小さなことであっても解決しないと気がすまない人でしょうか。もしそうだとしたらそれは危険な考えです。以前の記事でも話しましたが、初心者は上級者から見たら重要でないことに時間を使いがちな傾向にあります。これは特に独学で学んでいる人にありがちです。初心者はそれが重要であるか判断がつかないためです。僕のおすすめとしては、何かわからなくてなかなか解決しないことがあっても、その章の主要な部分を抑えられていたら、さっさと次に進んでしまうことをおすすめします。なぜなら、その先で出てくる知識を使えば今詰まっていることもあっさり解決することが多いからです。そのため、いつまでも小さいことを気にして時間を消費するのはもったいないです。

プログラミング学習に大事な「仮説思考」

それではどうやって学べばいいかと言うと、"例題の仮説と検証をする"ことです。実際の流れを見ていきましょう。

例えばwhile文を学んだとしましょう。while文の説明には以下のように書いてあることが多いでしょう。

while(条件文){
繰り返し処理
}

条件分には「a>100」のように条件がそのまま書いてあることが多いです。このような書き方をしていると()の中には式を書くものという固定観念が生まれかねません。しかし、実際にはwhile文の条件文はこのように式を書けるだけではありません。本質は()の中に書いてあることが真か偽か判定できることです。もっというと1かそれ以外かで判定されます。この固定観念を取り去って応用力を高めてくれるのが、仮説と検証なのです。

例題の仮説と検証とは,自分で「これはどうなるんだろうと気になったことを多分こうなるんじゃないかと予想を立てて実際に試してみること」を言います。例えば、その前に学習したif文と今回習ったwhile文を組み合わせられないかと考えたとします。if文が条件式を判定できるなら、if文で判定した後の条件式を使ってもwhile文を使えるのではないかと仮説を立てます。そうしたら、while文の中にif文を書いて条件を変えられないかと色々と試してみます。すると、ループをしている途中で条件を変えることもできるんだと気づきます。このように色々と仮説を立てて試してみることで、条件式と書いてあるから式を書かなければいけないという固定観念から解き放たれます。プログラミングの学習とは固定概念を外して思考を柔軟にしていくことでもあります。もし、これを思いつかなくとも他の人が自分と違った書き方をしているのを見て発見をすることもあります。(むしろそっちのほうが多い)良かったら積極的に自分のコーティングに取り入れましょう。そのときもただ真似をするのではなくて、いろいろと試してみることです。どちらにせよ、"この構文はこういうときに使うもの"という固定観念を持たないことが大切です。

int flag=0;
int num=0;

while(flag!=1){
if(flag==0){
    num++;
    if(num>100){
        flag=2;
    }
}
if(flag==2){
    num-=2;
    if(num<=0){
        flag=1;
    }
}


}

こうして好奇心を持って過去に学んだことを積極的に組み合わせていくことで応用力がついて、書き方が洗練されてきます。また、自分で試しながら勉強することで記憶に残りやすくなります。これは写経をしているだけでは得られない効果です。プログラミングの学習とはその構文がどんな使い方ができるのかのストックを貯めるとともに、すぐに引き出せる状態にできるようにしておくことです。書き方を完全に覚える必要はなく、プログラミングで解決したい課題があったときに"あの構文をこうやって組み合わせればできそうだな"という考えがぱっと浮かぶ様になることが大事です。ある程度ストックが溜まってきたら他人のコードを見たり、atcoderなどの競技プログラミングサイトを利用して課題を解決するためのコードを自分で考えてみます。そこで構文を忘れてしまっていても問題ありません。文法に関してはカンニングができるからです。課題を解決するための構文の組み合わせが浮かぶようになればいいのです。こうして普段から仮説を立てて検証することで学んでいると、バグが起きた際も原因となる箇所の予測をすぐに立てられるようになります。

実際にプログラミングを学ぶときのやり方

まずは、例題を作成したファイルにコピペします。そのファイル自体をコピーしてリネームします。例題の名前でフォルダを作り、一緒のフォルダに入れます。リネームした方のファイルを仮説に基づいて色々とプログラムを書き換え、実行しながら仮説したとおりに動いたか検証していきます。(大量に新規ファイルをコピーすると管理が大変になるので、gitを使ってバージョン管理をするのがおすすめです。詳しくは僕のgitの記事で解説しています。)

プログラミング学習法

まとめ

今回は初心者やりがちな間違った学習法と学習するときに上達しやすい考え方を解説しました。僕の経験則に基づいた考え方ですが、あなたのプログラミング学習に役立てていただけると嬉しいです。

この記事が気に入ったらサポートをしてみませんか?