見出し画像

【#12 プログラミングが上達しないたった1つの理由】


こんにちは。Step App Schoolの小林です。
今回は「プログラミングをがんばっているんだけど、なかなか上達しない(理解できない)」という悩みにお答えしたいと思います。

1.実は難しいプログラミング

プログラミングって、正直言うとむずかしいです。WIXやWordPressを使ってホームページを作る感覚を持ってると、びっくりすると思います。最初に取り組むと、何がなんやらわからないんじゃないでしょうか。

では「プログラミングを覚える」ってどんなことでしょうか? 個人的には大きく3つかと思います。

(1)プログラミングのルールを覚える
(2)プログラミング周辺のものとの関係がわかる
(3)覚えなくていいところを理解する

(1)は、プログラミングの文法やアルゴリズムといったものです。例えばファミコンの名作に「マリオブラザーズ」(任天堂)と「イー・アル・カンフー」(コナミ)と言うのがあります。私は両方とも大好きで、よくやり込みました。ある時、両者の決定的な違いに気がつきます。マリオブラザーズでは、左はじに行くと右はじから出てくる、つまり左右がループしているのですが、イー・アル・カンフーではそうはなっていないのです。どうしてか? 「そういうルールだから」です。

プログラミングも同じです。プログラミングに共通するルールがあります。変数をつくるだとか、文字列を表示するときは「""」で囲むだとかは、どの言語でも共通のルールです。たとえばSwiftを使って九九を表示するときは次のように書きます。

//xの変数を作って初期化する
var x:Int = 0
//yの変数を作って初期化する
var y:Int = 0
//答えを入れる変数「answer」の変数を作って初期化する
var answer = 0

//for文(ループ文)でxに1〜9までの数字を入れる
for x in 1...9 {
   
   //for文(ループ文)で1〜9までの数字を入れる
   for y in 1...9 {
       
       //anwerに答えを入れる
       answer = x * y
       
       //結果が入っているanswerを表示する
       print(answer)
   }
}

処理をループする「for文」の中に、さらに「for文」を入れることで九九の答えを表示しているわけですが、そうやるとなぜ九九を表現できるかどうかは、すぐにはわかりません。こういったプログラミング独特のルールがあるので、覚えていくしかないです。

文法を覚えるのであれば、Progateさんとかドットインストールさんとかをうまく使った方がいいと思います。ゲーム感覚でなおかつ動画でも見られますし、ある程度までは無料で使えます。

(2)「プログラミング周辺のものとの関係がわかる」とは、例えばサーバーとかデータベースとの関係などです。例えばメモ帳のようなアプリをつくろうと思ったら、アプリの中にデータベースをつくる必要があります。ざっくりとでもいいので、データベースがどういった構造で、何を表しているのか理解しておく必要があります。同じように、サーバーやGitHubなどの仕組みなども同様です。プログラミングを覚えるということは、周辺のIT知識も理解するということです。

(3)「覚えなくていいところを理解する」が一番大事です。最初は、覚えておいた方がいいところと、その都度コピーしてくればいいところの区別がつきません。たとえばSwiftで、iPhoneを振ったときにある処理をしたいときは、以下のような構文を使います。

//iPhoneを振った時の動作
   override func motionEnded(_ motion: UIEvent.EventSubtype, with event: UIEvent?) {
       if event?.subtype == UIEvent.EventSubtype.motionShake{
		//ここに振った時の動作を入れる
       }
   }

この中身をすべて覚えているかといえば、そんなことはないです。毎回、前に書いたコードをコピー&ペーストしています。覚えている人はあまりいないんじゃないでしょうか? 仮にこの構文を覚えているプログラマーでも、まちがいなくコピー&ペーストしています。それは「記述を間違える可能性があるから」です。前に動いたものをコピーすれば、そのミスはぐっと減ります。とにかくエラーを出さないための工夫としてコピーします。

同様に、どこかの天才が考えたライブラリ(※便利な機能をまとめたプログラム)の中身は理解しなくても平気です。エンジンの構造を理解していなくても自動車を運転できるように、ライブラリやフレームワークの構文を理解していなくてもアプリは作れます。このように、覚えていなくていいいところをちゃんと理解しないと、大変時間がかかってしまいます。

2.プログラミングは「言語の学習」

プログラミングは「言語」と言われるだけあって、語学の学習と同じ手順でやるとうまく覚えられます。

「語学ってどうやって覚えたっけ?」となかなか思い出せないかもしれませんが、どういう語学もはじめは「1つひとつの言葉の意味がわかっていなくてもいいから、挨拶をするときはこう言います。はい、繰り返してみてください」とスタートします。いわば、意味がわかっていなくてもいいから先生が話した言葉の繰り返すことからスタートします。プログラミング言語は、ヒアリングとリスニングがないので、先生の言うことを繰り返せません。ではどうするか?

「意味がわからなくてもいいから、先生のマネをしてコードを書く」ところからスタートします。いわば「写経」です。これは古今東西、老若男女すべて同じです。プログラミングのスタートは、とにかく写経しましょう。意味がわからなくても構いません。というか、意味を考えていると先に進まないので、最初はできるだけ理屈を考えずに写経する方がいい気がします。

3.プログラミングの上達には方法論がある

プログラミングは言語ですので、言語と同じように学べば大丈夫です。英語の場合次のような手順で進めるかと思います。

(1)先生の話ことを復唱・教科書の写し
(2)文法の勉強
(3)(今まで覚えたものの範囲内で)英作文

プログラミングも同じです。

(1)写経(お手本の通りに書く)
(2)文法の勉強
(3)(今まで覚えたものの範囲内で)オリジナルのアプリをつくる

難しく考えず、語学と同じように進めていくのがスムーズです。逆に言うと「教科書に書いてあるコードを読んでいるだけ」「実際にコードを書かない」ような進め方をしていても、いっこうに上達はしません。プログラミング学習を続けていればいつかは理解できるかもしれませんが、読むだけだと時間がかかる気がします。

4.プログラミングが上達しない唯一の理由

「言われた通りにプログラミングの学習を進めているけれども、いっこうに上達しない」という方をよくみかけます。聞くと、おおよその理由は1つに絞られてくるがわかります。それは、

コードを書いていない

ということです。当スクールの受講生さんたちには「だいたい50本くらいのアプリを写経してください」「文法の勉強は繰り返し2回くらいやってください」と話しています。これをやらないと、オリジナルのアプリを作ろうとしても意味がわからないからです。

「プログラミングがわからない」と言っている方は、だいたい3本くらいアプリを写経して「わからない」と言っているケースがほとんどです。あるいは「意味が理解できないので覚えられない」と言う方も多いです。そういうときは「ぜんぜん覚えなくていいので、ひとまず50本分のアプリを写経してみましょうよ」と言っています。中身は覚えていなくても、それだけやれば手順やルールに慣れます。「習うより慣れよ」ということわざがあるように、慣れた方が上達が早いです。慣れるためにも、とにかくコードを書きましょう。

逆に、50本分のアプリを写経して、文法の勉強を2回繰り返して、それでも「プログラミングがわからない」という方には出会ったことないです。完全に理解したとまではいきませんが、そこまでやると「プログラミングのことをふんわりと理解できてきた。オリジナルのアプリを作れそう」と言い出します。このタイミングでアプリを作り出すと、おもしろいおもしろいと言いながらつくりだします。ここまでくるとあとは自動的に上達します。

5.上達のための合言葉「Just Do it」

プログラミングに限った話ではないですが、何かを手に入れるときはひたすら歩み続けるしかない気がします。自分が思った学校に入りたい、資格を撮りたいなど、勉強して知識を得ようとするのであれば、それだけ時間をかけて取り組めばいいだけのことです。

少し前に、初耳学で林修先生が「勉強を頑張っているんだけど、伸びない子はどうすればいい?」という質問に、こう答えていました。

「たいていの場合、そう言う人は単純に勉強の量が少ない

「量よりも質」というのは、「普通の人が見ても圧倒的な量をこなした(勉強した)人が、一番効率的なやり方を見つけ出せる」という意味だと思っています。自分で手を動かしていない人が、もっとも効率的なやり方を手に入れられることはまずないでしょう。つまり、プログラミングがわからなければ、わからないなりにコードをどんどん書きましょうということです。プログラマーたちも、わからん、わからんと言って頭をかきむしりながらコードを書いています。

この動画をTwitterでみたときに大笑いしました。その通りだと思います。とにかくコードを書かないと話になりません。エラーはバンバン出るものです。やる気をなくしてふてくされている時間があるんだったら、勇気をだしてググってエラーを解消しましょう。

元々の動画はこちらです。

6.まとめ

司法書士の勉強時間は1500時間ほど必要だと言われています。社会保険労務士だと1200時間、行政書士だと1000時間だそうです。プログラミングは750時間ほど必要だというデータがあります。士業のお勉強から比べると「覚えることは少ない」「コピー&ペースト歓迎」の世界なので、イージーだと思いませんか? あれこれ悩まず、とにかくコードを書きましょう。

Just Do it!

↓これまで書いてきた記事です。

【#1 プログラミングの準備】
【#2 背景変換アプリ】カンタンなコードを書いてみよう
【#3 背景変換アプリ】プログラムの中身を理解してみよう
【#4 Swift iPhoneアプリをつくる流れを理解しよう】
【#5 画像切替アプリ】お気に入りの写真を表示しよう
【#6 画像切替アプリ】コードの内容を理解してみよう
【#7 iPhoneアプリ開発でよく出るエラーをつぶそう!】
【#8 音をならすアプリ・前編】素材を自分で集めよう!
【#9 音をならすアプリ・後編】コードを書いてみよう!
【#10 音をならすアプリ】コードの中身を理解しよう!
【#11 Xcodeの整列・制約を理解しよう】

私がはたらいているプログラミングスクールです。

↓次の記事はこちらです。


馬券が当たった方、宝くじを当てた方はお願いします。