プログラミング学習について

僕は26歳くらいまで飲食店で働いてたんですが、その後IT業界に就職してプログラミングを仕事にするようになったというよくわからない経歴があるんですよね。
20代も半分以上過ぎてるフリーターからどうやって就職したかについてはまた別の記事に書くとして、この記事では何からどうやって勉強するのが良いかという話をしたいと思います。

何を最初に勉強するか

結論から言うと、無限にやる気があって続けられるんならC言語を勉強するのが良いと思います。

ポインタやメモリの扱い等について自分で書く必要が多く、何から何まで書いてあげないと動かないC言語を勉強するのは、今後他の言語やシステムを勉強する時に役に立つと思います。

僕もちょっと前までは「最近は色んな言語あるし、最初からCを勉強するのはちょっと微妙じゃないかなぁ」と思っていたんですが、つい最近になって昔(とは言っても数年前だが)苦しんで覚えた低レベルな技術のことが役に立っていることに気づいたんですよね。

それは別にポインタの概念を正確に覚えていたり、変数をメモリに保存するイメージを完璧に覚えていたのが役に立ったというわけではなくて、低レベルの技術を勉強したことによって、コンピュータを動かすにはどういう情報を教えてあげればいいのかを感覚的に覚えられたというのが大きいと思います。
ただ、最初に太字で「無限にやる気があって続けられるんなら」とも書いたんですが、正直Cの勉強はしんどいです。全ての人間がしんどいと思うかどうかはわかりませんが、僕はまぁまぁしんどかったです。勉強なんてするの専門学生の時以来ですからね。

Cの学習は、最初「Hello World!!」とコンソールに表示させるところからはじまり、繰り返し処理、条件分岐、配列、構造体、ポインタ…自分の作りたいものが作れるのがいつになるのかも、そもそもこれが本当に役に立つかもわからないことを社会人になってからの貴重な時間を使って勉強するのはしんどいと思います。

しかも、今どきCを使った仕事ってそんなにメチャクチャたくさんあるわけでもないと思います。多分……。
上でCを勉強するのがいいって言ったのは、あくまで先まで見据えた上で低レベルな技術の学習という意味でCが良いだろうと僕が体験として感じたということです。
作りたいものや興味あるものがあるんなら、それに合った言語がいいと思います。
Webサービス作りたいんなら、とりあえず気軽に試せるPHPとか良いと思います。ついでにHTML/CSSも必須になります。
人工知能に興味があるんならPythonとか良い気がしますが、僕はこの分野に詳しくないのでこれ以上の言及は不可能です。
iPhoneアプリが作りたいんなら、Swiftでしょうか。
AndroidアプリならJavaでしょう。Javaとかもう古いみたいな風潮今はありますが……。他にも何かあった気がするんですが、僕自身は作ったこと無いので詳細な言及は不可能です。
ゲーム作りたいんなら、あんまり詳しくないんですが、プログラミング言語ではありませんがUnityというプラットフォームの学習を進めるのが良さそうです。
というかiPhoneアプリもAndroidアプリもUnityで作れちゃうらしいんですよね。しかも両方で動くらしい。凄い。
まぁJavaでもゲームは作れますが

どうやって勉強するか

作りたいものがあるんなら、それを真っ先に作るのがいいんですが、作るために何が必要なのかすらわからない場合はドットインストールがオススメです。
短めの動画で、環境構築についても動画で勉強できるのでオススメです。色んな言語や環境構築についての動画があるので助かります。
ドットインストールである程度の文法を覚えたら、その作りたいものを作ってみましょう。

「自分が作りたいものを作る」という行為はすごく勉強になります。
この辺を読んでて「いや、そんないきなり作れるわけ無いだろ」と思うかもしれませんが、そんなことないです。目の前の箱や今手に持ってる板で大体なんでも調べられます。

プログラミングの(他の分野でも?)学習で大事なのはアウトプットです。プログラミングの本を1万回読んで写経してインプットを繰り返しても、1個でも何かを開発してアウトプットを行った人には勝てないと思います。

よく「Railsチュートリアル何周した」みたいなのTwitterであるんですが、完全に無駄だと思います。1周すれば十分です。そのチュートリアルやったわけじゃないんですが、そこから何か作ってみるというアウトプットの作業を始めたほうが良いと思います。

「内容を覚えてないかもしれない」という不安はあるかもしれませんが、そんなんはグーグルで検索すれば大体解決します。程度が低すぎるかもしれませんが、僕もJavaのList<String> list = new ArrayList<>();はしょっちゅう忘れるんでそのたびにググってましたが、何回も書いてれば覚えました。

僕も上坂すみれの洋服データベースというものを作ったことがあるんですが、これを作ったお陰で「自分でもやればできるじゃん」って成功体験から自己肯定感得ることをできました。

成功体験があれば、そこから「他にもこんなことをやってみよう」とか思えて色々な勉強に対するモチベーションにもなると思います。

作りたいものが無い場合

こればっかりは「こうすれば絶対に見つかる」と断言は出来ないので自信はないんですが、自分がやったことを書いておきます。

自分が好きなものに関係するような何かを探してみましょう。
僕は服と声優が好きだったので、上坂すみれの服を探してたんですが、次第に「これをデータベースに格納してみんなが検索できたら便利じゃない?」と思うようになって、上坂すみれの洋服データベースの開発のキッカケになりました。

あと、IIDXのギアチェン計算機とかも自分が欲しかったから作りました。Aのギアチェンを忘れないようにするために作った気がします(でも今は高速地帯の緑数字が出るので、高速地帯に合わせる→FHSをON→SUD+を調節してHSを0.5の倍数に合わせる→鍵盤で見やすい緑数字にする→空白地帯で皿チョン で済むようになってしまいました)

他には、自分の生活でなんとなく不便をしてるものがあれば、そういうアプリを作ってみるのもいいんではないでしょうか。

大体の不便を解決してくれるアプリは世の中に存在してたりするので「もう既にあるものと同じものを作っても意味ないだろ」とか思ったとしても、そういうのを度外視して自分で作ってみるのも勉強のためには良いと思います。

どうやって勉強のやる気と時間を確保するか

やる気

なんでもやる気で解決しようとするから駄目なんですよ。
音ゲーもそうなんですけど、やる気ですべてを解決しようとすると自分が先に負けます。

習慣にしましょう。夜寝る前に歯を磨いたり、風呂に入ったりするのと同レベルの習慣にしてしまいましょう。
まず最初は「家に帰ったらVSCodeを開く」あたりを習慣にするのを目標にしましょう。別にVScodeじゃなくてもサクラエディタでもVimでもなんでもいいですが。

時間

すきま時間を有効活用しましょう。洗濯機回してる間とか、ご飯炊けるまでとかそういう時間絶対あると思うんですよ。

「実家ぐらしだから洗濯機もご飯も親がやってくれる」って人は家事する時間が無いということだから、すきま時間に頼らなくても時間あると思うんですよね。
すきま時間以外でやるオススメは朝出社する前と昼休み。

まぁ今の僕はそういうすきま時間全部麻雀とTwitterとYoutubeに消えてるんで説得力皆無かもしれませんが、昔はそういう時間見つけてやってたので信じてください。

まとめ

  • 最初に勉強する言語は
    • つまらなくても続けられるんならC
    • そうでなければ、目標に合った言語
      • 作りたいものが無ければ探す
  • 勉強方法
  • やる気と時間
    • やる気→習慣化
    • 時間→すきま時間