ゲームなんでも屋&プログラミングなんでも屋

ゲーム情報やプログラミングに関してのブログ

プログラミング勉強法(独学で初心者から中級者へ)

自分の経験を元にプログラミングを何もできない人が独学である程度プログラミングができるようになるまでの勉強法を説明していきたいと思います。僕のプログラミング経験としてはウェブアプリ制作、画像処理、音声処理、機械学習、ウェブスクレイピング、簡単なゲーム制作などがあります。3日前にはandroid studioスマホアプリを作ろうと思いandroid studioの勉強を始めました。

ただプログラミング経験は2年ほどですし、プロでもありません。あくまである程度プログラミングができるようになるまでの勉強法と思って読んでください。逆にプログラミング経験がプロのように長くはないので、プログラミング初心者の頃を思い出しやすく書きやすいと思いこのタイミングでこの記事を書くことにしました。ちなみにここでいうプログラミングはHTMLなどのマークアップ言語やLispなどの関数型言語などではなくC言語Pythonのような命令型プログラミング言語で書くプログラミングを想定しています。

 

・プログラミング学習で大切なポイント(初めて学ぶ時)

①あくまで学習するべきなのは形ではなく考え方

 よく知り合いとかでもプログラミングを学んでいてfor文の書き方はみたいなのを暗記するところから学習を始める人がいますが、最初から暗記する必要はありません。というか暗記する必要は基本的にありません。プログラミングにおいて書き方は正直どうでもいいです。for文の使い方さえわかっていれば書き方は調べればわかります。そしてよく使う言語であればそのうち自然に覚えます。逆に滅多に使わない言語で書き方忘れていたら、使う時に調べればいいです。とにかく形では無くこういう時はこういう方法を使うとうまくいくということを学びましょう。

 

②インプットよりもアウトプット多め

 基本が書かれた本の第一章を何周もしたり、ノートに構文をまとめたりしている人もいますが、基本的にこういったことは意味がないです。こんなことをするくらいだったらさっさと本を一周して実践しましょう。ただこれは適当に斜め読みすればいいということではないです。大切なのは読むだけじゃなくて書くことです。全てを理解しなくてもいいのでまずしっかり書いて動きを確かめましょう。ポイントは書き方を覚えるために書くのではなく、動きを理解するために書くということを意識することです。小学生の時にやったような漢字練習帳とは書く目的が違います。そして、ここを変えたらどうなるかな?といった興味を持ちながらコードを少し書き換えたりして動きを確かめるとさらにいいでしょう。こういった勉強をしているうちに、こういうことしたい時にはこの方法を使えばいいといったことがわかるようになります。

 

③プログラミング習得のゴールは調べながら、色々なものを作れるようになること

 ここでいうゴールはあくまである程度プログラミングができるようになるという意味でのゴールです。ただこの段階まで来れば基本的に困ることはないでしょう。多くの人が到達したいレベルであるウェブアプリを作れる人になる、スマホアプリを作れる人になる、サーバー管理をできる人になる、機械学習をとりあえず利用する人になるなどであれば全然困りません。そもそも世の中にプログラミングのための便利な道具(フレームワークや開発環境、ライブラリーなど)は無数に存在していてそれら全部を覚えている人なんていません。必要になった時覚えればいいのです。もちろん世の中にまだ方法がないようなことを生み出したりしたいのであればこの段階では不十分かもですが、その段階まできたらそれはもはや研究レベルの話であって、プログラミング技術の問題ではないことも多いでしょう。とにかくここで大切なのは調べながら実装できればいいということです。

 

④完璧主義をやめること

これはここまで書いた①〜③のポイントのまとめとなるのですが、プログラミングは完璧を求めていたらキリがありません。完璧主義はやめましょう。完璧主義の人はまず形を覚えなければと思い、調べているようではまだまだだとかんじ、頑張ってインプットしてしまいます。大事なところはそこではないので、完璧主義はやめたほうがいいです。

 

・プログラミング学習の手順

①まずはプログラミングの基本を学ぶ

この段階でのポイントは5つあります。

その1 本やProgateなど一定のレベルにまとまった教材を使う

いくら独学とは言え何もわからない段階で、ネットに書かれた記事をつまみながら読んで学ぶのは無謀です。素直に本やProgateなどの教材を使って、基本を学びましょう。(個人的にProgateのプログラム書く部分って答えが決まっていて、少し変えたらどうなるかなとかを確かめられないのが好きではないですが(友達がやっているのを見ていてそう思っただけでやったことはないので間違っているかもしれません))

 

その2 基本とはどのレベルなのか

僕が思う基本というのは、変数に代入した時の挙動や変数の型、if・for・whileなどの基本構文の使い方や使い所、関数やクラスの使い方および使い所などです。大事なのは書き方ではなく使い方や動きを学ぶというところです。

 

その3 一つの言語を学ぶ

何度も言っているように、プログラミング学習で大切なことはプログラミングの形式(例えばif文の書き方や関数の書き方)ではなく、プログラミングで利用できる考え方や構造を学ぶこと(例えばfor文というループ構造がある。関数やクラスを利用することで効率よくプログラミングできるなど)です。しかしいきなり色々な言語に触れてしまうと、それぞれの言語における書き方の違いに混乱してしまい、肝心のプログラミングの考え方を学ぶことができなくなります。それに焦って色々な言語を同時にやらなくても、一つの言語で書けるようになれば、調べながらではありますが他の言語でも同じことを書けるようになります。

 

その4 高度なライブラリーやフレームワークを使わない

これは高度なライブラリーやフレームワークは引数を指定したり、パスを設定したりするだけで様々なことができたりしますが、これだと実際プログラムがどのように動いているのかは何もわからないですし、基本を学ぶには向いていないからです。高度なライブラリー等をいきなり使うことで混乱してしまうこともあるでしょう。まずは実際に役立つようなプログラムを作ることを意識するのではなく、基本を理解することを意識しましょう。

 

その5 インプット:アウトプット = 1:1

最初にアウトプット多目が大切と書きましたが、この段階ではインプットとアウトプットは同じ割合でいいでしょう。基本的に一つのことを学んだら、それを使ったコード(本や教材に書いてあるものでよい)を書くといった感じですね。

 

学ぶ言語はどれがいいのか?

自分のやりたいことに使う言語から学ぶもしくは簡単めな言語(PythonRubyPHPなど)から学ぶのが良いでしょう。

下の記事ではPythonを勧めています。

https://koro-game-programming.hatenablog.com/entry/2019/12/14/182627

 

では次の段階に進みましょう

 

②とりあえず簡単なプログラムを自分で考えながらいくつか作る

この段階でのポイントは3つあります。

その1  今まで習ったことを組み合わせたプログラムを書く

 おそらく段階1ではほとんど一つのことを理解しているだけで作れるプログラムを書いてきたと思います。例えばif文を使うだけ、関数を一つ作るだけなどのプログラムです。第2段階ではそれらを組み合わせてプログラムを書いていきましょう。本や教材がある場合にはその本や教材に載っている問題をやってみるといいでしょう。そのような物が無くて無料で済ませたい場合には下のURLに書かれた問題のうち上10個位をやってみるといいでしょう。ただしこの問題だけだと問題に偏りがあるので不十分かもしれないです。ここで大切なことはやり方が思い浮かべば、あとは書き方を調べながら実装できればいいということです。実際にスラスラコードを書けなくてもこの段階では当たり前です。安心してください。

http://vipprog.net/wiki/exercise.html

 

その2 カンニングオッケー

 例えばこのプログラムこういう関数をif文とwhile文を組み合わせて作ればいいななどということが思い浮かんだら、ネットをカンニングしながら書けばいいです。プログラミングにおいてカンニングは何年経っても大切なことですし、ここでネットから自分に必要な知識を見つけるスキルを身に付けるといいでしょう。何年経ってもカンニングが大切というのは、どんなすごいプログラマーであっても初めて使うライブラリーの関数の引数に何を入れればいいかなどということはわからないからです(もちろんライブラリーにあるような関数も全て1から作っていけば実装可能だとは思いますが、普通そんなことはしません)。つまりどんなプロも初めて何かを作る時にはまずそれを実装するのに使えそうな便利な道具を調べるのです。

 

その3 完全なパクリはやめる

 上でカンニングオッケーと言ったのにパクリはダメとかなんじゃこりゃと思う人もいると思いますが、上でカンニングオッケーと言ったのはあくまで部品のカンニングはオッケーと言うだけで、ただ全てをコピーしてくるのがオッケーと言うことではありません。ただコピーしてきただけでは当然何も学べません。最初はしりとりのプログラムを参考にしながら頭とりのプログラムを書くとか、フィボナッチ数列のプログラムを参考にしながら、自分が考えた漸化式の問題をとくプログラムを書くなどだいたいパクリだけど完全にパクリではないといった問題から初めてもいいでしょう。

 

ここまで来たらだいたいのものは作れるようになります

実際に自分の作りたいものを作ってみましょう

 

③実際に作りたい高度なアプリなどを作る

この段階でのポイントは3つあります。

その1 まずは自分の作りたいものを作るのに役立つライブラリーやフレームワークを書籍やネット等で調べる

 ここで初めてライブラリーやフレームワークを調べます。そしてそのライブラリーやフレームワークで利用できる関数やシステムを学んで実際に使っていきます。この段階まで来たら、便利な道具をどんどん使っていきましょう。この段階でimportなどを使うようになると思うので、同時に自分の書いた別のプログラムもimportできることを学ぶといいでしょう。

 

その2 自分の実装したいものに近いものを見て学ぶ

 おそらく高度なアプリを作る時、自分がイメージしているものと全く同じものを作っている人はいませんが、部分ごとでみると似たものを作っている人はいると思います。そういったものを見て自分の作りたいものにどこが利用できるかを考えることは大切です。ブログやgithubなどを覗いてみましょう。段階2でカンニングしっかりカンニングしていた人はこの作業でそんなにつまずかないでしょう。

 

その3 エラーは出て当たり前

いきなり全てうまくいくことなんて滅多にありません。エラーが出たら直して、例外が出たら直してと言うのを繰り返してプログラムを完成させます。このエラーを直していくと言う作業がプログラミングの肝だと思います。もちろんここでもネットや書籍を参考にしましょう。

 

プログラミングは独学でも学べるのか?

個人的な意見としては独学でもいいと思います。このように思うのはプログラミングにおいて誰もが知っておかなければいけない基本というのはとても少なく、あとは実際に作りたいものに合わせて、それを作るのに必要な知識を習得していけばいいからです。

そもそもおそらくですが、世の中にある全ての言語の全てのライブラリーの全ての関数の使い方を覚えている人なんていません。なぜなら世の中の便利なライブラリーは無数とありますが、それらを全て使うような開発はないからです。そしてライブラリーやフレームワークなどの使い方はネットや書籍で調べればわかります。

実際プログラミングスクールでどのようなことをやられているのかは残念ながらわかりませんが、プログラミングを書くという観点で見たらプログラミングスクールにわざわざいく必要はないかなと思います。詰まった時にやり方を聞けるような知り合いはいたほうがいいかもしれませんが。僕もプログラミングスクールには通っていませんが、ある程度実力がついてからはプログラミングをするインターンやプログラミングを利用する団体などに入って実際に使えるプログラミングを学びました。

逆にすぐ特定の仕事に直結する知識だけを学びたいという方や案件をすぐに勝ち取りたいという方はプログラミングスクールを利用されるのがいいかもしれません。プログラミングスクールが仕事に結びつくまで面倒を見てくれる場合も多いようです。

 

以上長々と書いてきましたが、プログラミングは継続さえすれば、少なくとも世の中にすでにある技術を利用してプログラムを書くというレベルには誰でもなれると思います。だってプログラミングって英語に比べて文法は簡単、わからなかったらカンニングすればいい、リスニングもスピーキングもない。こう聞くと誰でもできそうですよね。プログラミングを習い始めたばかりの人、これから習おうという人、頑張ってください!