初学者にありがちな『プログラミングがわからない』を分解してみる

f:id:McG:20180413153255p:plain

こんにちは,学生エンジニアの迫佑樹(@yuki_99_s)です.

僕は普段から中高生にプログラミングを教えているんですが,その中でよく聞く単語が『わからない』という単語.

中高生に限らず,初めてプログラミングに触れる方であれば『わからない』の壁にぶち当たることは多いはず.

そこで今回は,『プログラミングがわからない』をもう少し細分化して,つまずきそうになった時にどんなことを学んでいけばいいのかをまとめてみたいと思います.

プログラミング初学者はもちろんですが,新入社員さんの研修をする先輩エンジニアの方の役にも立てればいいなと.

『何がわからないのか』を分かるようになることは大事

プログラミングを初めてやる時って,『そもそも自分が何をわかっていないのか』すらわかっていないことって結構あるんですよ.

結果的に,何を調べれば解決するかの見当がつかずに挫折してしまうという流れになるわけですね

f:id:McG:20180411113327p:plain

これって,遭難した時に方角もわからずただ歩き続けるようなもの.遭難して現在位置はわからなくとも,方角さえわかればなんとかなるのと同じで,『わからない原因』くらいは特定しておきたいものです.

『何がわからないのか』を理解できれば,あとは調べればいいだけなので,伸びるのも早いはずです

実際に分解してみた

ざっくりと分解して見ると,こんな感じになるのではないでしょうか?

f:id:McG:20180411122634p:plain

細分化していけば無限に長くなっちゃいそうなので,とりあえずこんなところかなと思います.

今までプログラミングで悩んだことがある方,躓いてた原因ってこんなもんじゃないですか?

それぞれについて説明してみますね.

その1. 基礎文法がわかってない

f:id:McG:20180411123800p:plain

まず,意外と多いのが基礎文法がそもそもわかってないっていうこと

if文とかって結構直感的でわかりやすい部分もあるんですが.for文とかwhile文って結構つまずく人多いんです.

例えば10回処理を繰り返すwhile文とかがあったとすると,『毎回の繰り返しの中で,各変数はどうなっているのか』を紙に書き出してみたりするとスッキリするはず.

f:id:McG:20180411124409p:plain

おおよそ理解したなって思ったら,CodeIQみたいなサイトで実際に何回かコードを書いてみると自然に使いこなせるようになると思います.

その2. 概念とイメージが結びついていない

f:id:McG:20180411124815p:plain

プログラミングを行う上で,概念的説明をされることってよくあると思います.

ただ,『それをどんな時に使うのか』っていうイメージができない時って結構あるんですよね

特によくあるのが「オブジェクト指向でクラスは設計図でインスタンスは実体だよ」っていう説明.これって初学者からしたらちんぷんかんぷんなんですよw

どんな風に便利で,どんなタイミングで使えるのかを調べて,意識することでなんとなく理解が進むはず.

ちなみに僕がオブジェクト指向を教える時は,「クラス定義」から始めるんじゃなくて「あらかじめクラスファイルはこっちで作って,それを使ってみるところからスタートする」ってやり方を取っています.

そうすれば「あ,これ便利かも?」という思考が生まれるので,自分でもクラスを作るようになり,気づいたら理解できてるという流れです.

その3. 処理の流れがわかっていない

f:id:McG:20180411125756p:plain

次によくあるのが,『処理の流れ自体がよくわかっていない』ということ.

プログラミング初心者で,以下のような人って結構いるんです.

男の子の画像

基礎文法は理解して,問題は解けるようになった

だけど,アプリ作る時にはどうしたらいいかわからない

iPhoneアプリでもゲームでもそうなのですが,「このタイミングでこの場所の処理がされるから,こういうコードを書こう!」ってスラスラプログラムが浮かんでくる状態にできれば勝ちです.

軽視されがちですが,重要度は高めなので,処理の流れは他人に説明できるレベルまで頭に入れておきましょう.

その4. 複数の事項を組み合わせられない

f:id:McG:20180411142644p:plain

基礎文法は理解したけど,実際にコードを書く時よくわからなくなるっていうのは『複数の事項を組み合わせられない』という原因も考えられます.

例えば,以下のRubyで書かれたコードをみてください.

nums_mat = [[1,2,3],[4,5,6],[7,8,9]]

for i in 0..nums_mat.length 
  for j in 0..nums_mat[i].length
    puts nums_mat[i][j]
  end
end

2次元配列が用意されていて,その中身を順番に表示させるわずか7行のプログラムです.

これ「配列の中に配列が入ってる(2次元配列)」,「変数の添え字が変数になってる」,「ループも2重になってる」といったように,複数の基礎事項の組み合わせなんですね.

そんな時は,シンプルにしてみて対比するのが一番です.

nums_mat = [1,4,7]

for i in 0..nums_mat.length 
  puts nums_mat[i]
end

このように単純化したコードを見せてから,先ほど示した2重ループのプログラムを見せると,説明を加えたわけでもないのにすんなり理解してくれました.

複雑なものに出会ったら,とりあえずシンプルにしてみるのってすごく大事です

その5. エラーが解決できない

f:id:McG:20180411144543p:plain

これが一番多いかな?とも思いますが,「エラーが解決できなくて詰む」ってパターンも.

これはぶっちゃけ慣れによるところが多かったりしますが,場数を踏めば大概のエラーは瞬間的に解決できるようになります

英語のエラーメッセージにアレルギーがある方とかもいますが,プログラムで出るエラー文って単純な英語が多いので,翻訳サイト使って意味を理解するところから始めましょう.

『ここを変更したらエラー起きるはず』と,あらかじめ予想を立てた上で意図的にエラーを起こすのも勉強になりますよ.

最後に

プログラミングって,小さな要素を積み重ねることでアプリやゲーム・ソフトウェアを開発していくものですよね.

f:id:McG:20180411150232p:plain

そして,「基礎要素を学び,組み合わせる」っていうことはかなり難しいんです,特に最初は

基礎要素がしっかり理解できて,さらに組み合わせ方がわかって初めてアプリって動作するわけですから.

f:id:McG:20180411150019p:plain

『わからない』の原因って,意外とシンプルなことが理解できてないことにあるんですよ.

だから,『今自分が何を分からないのか』をしっかりと理解し,そこを調べながら少しずつ理解を深めていくというのが一番の近道だと私は思います

© 2018 迫 佑樹