Free-PhotosによるPixabayからの画像
毎年、5,6月になると自分の会社も新入社員が研修を終えて配属されてきます。
自分の場合、ここ数年は新人に対してプログラミングを教えることも多く、「どうしたらプログラムが書けるようになりますか」って聞かれます。研修では基礎を教えてもらってきますが、それ以上のことになるとどうして良いかがわからないからでしょう。
プログラミング学習における自分なりの考え方の整理と、この記事を読んでもらった方にもプログラミングができるように自ら動いていけるようになってもらえたらと考えます。
プログラミングができるようになるには?
結論としては
基礎を学習したあとは、「自分でアプリやサービスを作ってみる」
に限ります。
本を読む、写経をする、スクールに通うなどいろいろ方法がありますが、一番効率的な学習方法は「自分でアプリやサービスを作ってみる」です。
自分はそれほどできる方だとは思いませんが、プログラミングはできると言えます。そうなるためにいろいろ試したり、経験しています。
プログラミンができるようになるにはどうすればよいかをこれから説明します。
プログラミングができるようになるのゴールは?
そもそも、「プログラミンができる!」というのはどんな状態になったらゴールテープを切れますか?ここの捉え方でゴールは近くもなり、永遠に到達できない距離にもなったりします。
先日、テック系Youtuberの勝又健太さんのツイートでこんな物がありました。
基礎が大切なのはもちろんなのですが、「応用に入る前に基礎を何周もすることで基礎が身に付く」という考え方はどういう分野においても誤りかなと僕は考えてまして、実際には「応用をやることで初めて基礎の意味や概念が理解できる」「試合を経験することで初めて意味のある素振りができる」かなと😄 https://t.co/3fyydU9Ltb
— 勝又健太@テック系YouTuber (@poly_soft) 2019年5月31日
これは、Rubyチュートリアルを2週目することに対する問題点に勝又さん自身のツイートに対するリツイートに対して、更に勝又さんがリツイートしたものです。
プログラミングができるってチュートリアルがわかるとか、言語仕様のすべてを知っているってことではないと思います。プログラミングの目的って
「アプリやサービスを作って動かすこと!」
です。言語仕様をすべてわかる、理解することは無理です。チュートリアルはアプリを作るために最低限必要となるノウハウをまとめたものです。これを何周してもプログラミング学習の目的であるアプリを作れるようにはなりません。チュートリアルを何周もすることは目的がずれた状態だと思います。
目的がずれたままいくらチュートリアルを何周しても「プログラミングができる」ようにはなりません。チュートリアルができるようになるだけです。
プログラミングができるようになるまでにつまづくポイント
プログラミンができるまでいくつもつまづくポイントはいくつもありますが、最初にも書いたとおり、
- プログラミング学習の基礎はどのくらいすればよいのか?
- 自分で作ってみたいアプリ、サービスなんてない。。。
- よくわからないまま進むのは。。。
があります。一つ一つ解きほぐしていきます。
プログラミング学習の基礎はどのくらいすればよいのか?
自分の場合だと、チュートリアルや入門書に書かれていることを完全に理解しなくとも、1周目を学習しながら、どこにどんなことが書かれているかがわかればOKだと思います。
2周目をするよりもアプリやサービスを作り、躓いたときに基礎に戻る。躓いたときにチュートリアルを見直す方が良いですね。
あくまで目的は「アプリやサービスを作る!」です。チュートリアルを何周することが目的ではないです。
作りたいアプリやサービスがない
作りたいアプリやサービスがない場合、すでにあるアプリやサービスを真似たものを作ってみるというのはどうでしょうか。
あくまでプログラムができるようになるということにフォーカスを置いているので、公開して使ってもらうのでなければ既存のサービスを真似るのは手っ取り早い方法です。
注意点としては既存のコードをコピペするのは全く意味がなくなるのでNGです。あくまで、「どのように動いているのかを想像しながら既存のサービスと同等のものを作る」です。
よくわからないまま進むのは…
よくわからないことが出てきても先に進んでOKです。
よくわからないことが自分が作りたいアプリやサービスを作る上で必要であればそのときにもう一回読み直し、学習しなおせばよいです。すべての内容を完璧に理解し、覚えることは出来ないと考えてもらって良いので、先に進んでみてやっぱり必要であれば戻って再び便ようすればよいです。
また、アプリやサービスを立ち上げようとするとプログラミング以外のことも出てきます。データベース、Webサーバー(apache、nginx)、セキュリティ。挙げだしたらキリがないです。それぞれを完璧に抑えるのは難しいので、プログラムができるようになるという目的であれば、最低限のことができればOKで、すべてをよく分かるまで勉强するのは効率的ではありません。
注意点としては、サービスを世の中に公開するのであれば、サーバやネットワーク、セキュリティなど留意しないといけない点はたくさんあります。
プログラミング学習でのNGパターン
脳内コンパイル、脳内実行(要は本を読むだけ)
1周目に限らずですが脳内コンパイル・脳内実行(つまり実機を使わないで本を読むだけ)はNGです。
アプリやサービスのプログラムのコードだけを書いている時間はそんなに長くなく、実際には動作しないときのエラーやテストや運用で判明する各種の問題対応に多くの時間を咲きます。
実際に手でコードを打ってみると打ち間違いで本やチュートリアルの記載通りに動作しないことがあります。
問題に直面したときに一体何が問題なのかを一つ一つメッセージやログから調査し、問題解消することもトレーニングになります。脳内コンパイル・脳内実行、および、コードのコピペをしてしまうと、問題解消のトレーニングの場を奪うだけです。
本・チュートリアルをコピペ(キーボードで入力しない)
文字通り、コピペして動作確認するだけしかしないです。
初めてプログラミングを学習するときにはおすすめできません。
これは結局脳内コンパイルとそんなにやっていることが変わらないので、コピペするぐらいならまだ本を読むだけのほうが時間の節約になると思います。
手入力をすることで起こる問題対処こそ上達のコツだと思います。それを一人で解決できるようになれば成長するスピードが上がっていきます。
問題に直面したときにググらない
問題に直面したときにフリーズしてそのまま挫折してしまうことはないですか?実際にアプリやサービスを作ろうとするといくつもの問題に突き当たります。大抵の人はここで問題を解決できず、挫折していきます。
アプリを作る際に問題に直面し、躓いたら即「プログラムが出来ない!」ではないです。
ググればいいんです。実際の現場でプログラムを書いている人でもググらずにすべてを作り上げられる人っていないですよ。
ググれば大抵のことが調べられるので、問題に直面したらまずはググってみるというのも選択肢に入れて、躓かないようにしてほしいです。
まとめ
チュートリアルに限らず基礎の勉強はある程度理解できたのなら、さっさとアプリやサービスの開発に進んでしまいましょう。
とにかく手を動かして、いろいろ試行錯誤して、エラーが出たら自分で調べてってことを繰り返すことが上達の早道です。