初心者
初心者向け
学習
勉強法

初心者はプログラムやるにしても何から勉強すればいいのかもうわからんよね。


駄文

2月11日 本日誕生日を迎えました。

Happy birthday to me.

そんなことはどうでもよくてですね、今日は前から少し思っていた

「初心者がプログラムって何から勉強すればいいの?」って質問すると

「とりあえずCやっとけ」という派閥

「まずはUnityとか使って、モノを作るべきだ」という派閥の争いについてですね

いわゆる昔から続く「きのこの山とたけのこの里の戦争」みたいなものに触れてみたいと思いました。

(最近だと、まずモチベが大事派閥も現れて、三国志になってきている気もします)

最終的に、僕はどれが正しいかなんてないけどねという中立を保ちつつ

でも「俺はこう考えて取り組んだら少しいい感じになったよっていう学習のテクニック」

勝手な見解を述べて終わりにしたいと思います。


きのこたけのこ戦争(Kinoko And Takenoko War)

ちなみに私は元々きのこの山の者でしたが、今ではたけのこの里に寝返りました。

便宜上



  • Cやれ派閥の人たちをプログラマー


  • モノ作れ派閥の人たちをクリエイター
    とします。

    (モチベ派閥の人は、うーん、まぁ意識高い系ってことにしておこう)

個人的にはCをやると非常にプログラムの知識が強くなると思いますが

Cだけやっても今時のモノが作れるようになるかと言えばならないと思いますし

かといって便利なもの使ってモノさえ作れればプログラマーなの?というと

それは違うような気がします。

要するに何を大事にするのか問題、ということであります。

クリエイターはプログラムの知識よりもまずモノを作れることが大事と思う種族であり

プログラマーはモノが作れるだけじゃダメでプログラムの力量あってこそだと思う種族である

と思っております。

また、「そんなの本人がどうなりたいか次第だろ」と離れた位置から思っていた意識高い系は

大事なのはとりあえずやる事、継続こそ力だ、だからモチベ命と提唱するのだと思われます。

みんな正しいと思います。


クリエイターの主張

プログラマーの最終到達地点はモノを作ることである!

プログラムはその手段に過ぎん!

モノを作ることこそが本文であり、プログラマーの本来の在り方である!

使えるものは使い、より早くモノを作る経験を!そしてその経験は力なり!


プログラマーの主張

否!

最近ではろくな知識も持たないままに戦場に送られてくる兵士が多すぎる!

奴らは敵味方の区別なく破壊行為をしている!

プログラマーの敵は営業ではない、クリエイターにあり!


モノローグ

そう、確かに世の中が便利になり過ぎてしまったように思います。

実際プログラムの事をあまりわかっていなくてもモノが作れてしまうという現実があります。

そして困ったことにそういった人たちは、俺はプログラムできるぜーと慢心し

クソースなどの負の遺産を量産し続け、プログラムの知識を高める事を忘れてしまう傾向があります。

プログラマーからすると、このようなクリエイターは撲滅対象になるでしょう。

というよりはこれは自己防衛、身を守る戦いなのです。

整備したリソースは荒らされ、アーキテクチャを崩され、予想もしえない摩訶不思議なコードを埋め込む。

現場で実際に苦しめられてきた怨念をヒシヒシと感じます。

これ以上、もう、(半端なやつは)増えないでくれ。。と

しかしその反面、プログラマー達は新しいものを嫌う傾向があったりもします

詳しいがゆえに、新しいものを必要としないのです。

また自らが把握していない、ブラックボックスを扱うことも気に食わない不安なのです。

そんな事を言っていても戦場は進化していきます。

いつまで刀を振るっているんだ!

向こうは大砲だ、こっちは水鉄砲

太刀打ちできるわけがないだろう!とクリエイター達は思わざるをえません。

みんな、世の中に秩序を、そしてより良いものを求めているだけである。

みんなの気持ちは同じなのに、その想いこそがこの戦争を引き起こしている。

まさに悲劇である。

とまぁ過剰なフィクション?はこのくらいとして、少なくともIT業界はこんな感じでカオスです。


モチベがないと無理なのは確か

プログラマーとしての力もクリエイターとしての力も両方ないとダメ

結局はどっちも大事ですよって事ですね。

今では世界中のプログラマーがいろんな便利ツールを無料で公開してくれています。

これらが全て便利ツールであればいいんですが

実際には宝物から時限爆弾のようなものまで千差万別であり

何をチョイスすれば正解なのかは正直わかりません。

とりあえず人気なものなら大丈夫だろうと考え無しに飛びつき

飛びついた人たちがこぞって滅されるというケースも珍しくありません。

そんな現状ですから、プログラマーやクリエイターたちの考え方も多種多様です。


  • 死を恐れず、果敢に新しいものにぶつかっていく勇敢なもの達

  • 先駆者の死体をかきわけ、漁夫の利を得ようとする利口派のもの達

  • 求める事をやめ、安住の地でひっそりと生き長らえようとするもの達

  • 何もわからず戦場に送られ、味方もろともプロジェクトを破壊するもの達

このような世界で生きていくのであれば必要です

モチベーションが

でも難しいわけですよ、モチベーションというのはね

出そうと思って出るもんじゃないんですよ。

意識高い人が、まずやってみようとか、まずやることが大事ですだとか

言ってることはわかります

でもそれはダイエットしたい人に

「食べなければ痩せるんです!さぁ、断食しましょう!食べないだけでいいんです!」

と言ってるようにも聞こえます。

無理です、暴論です。

毎日アイスを食べたいです。

I want to eat many ice cream every day!

そもそもモチベのだせる人には手を差し伸べる必要なんてそんなにありませんし

とやかく言わなくてもそういう人はやってるからねっていう。

僕はどちらかというと

やってみたいけどモチベも上がらないしう〜んと悩める人にこそ協力したいです。

しかし僕にはこのカオスワールドの正しい歩き方なんてわかりません。

できるのはこの暗闇の世界を光で照らし、少しでも道を見えやすくしてあげる

そんなことくらいしかできません。

しかし文字で説明するのもめんどくさいです。

なのでそのうち動画を作ります。

この記事では勘弁してください。

...

ようやく、この長きに渡る前書きもここで終わりです。

密かにこの記事の本題にしようと思っていた

「学びの5ステップ」について紹介したいと思います。


学びの5ステップ

人は何かを学ぶ時に5つのステップがあります。

それぞれLV1〜LV5とでもしておきましょう。

これを意識する事で、成長を感じやすくすることができます。

※成長するわけではありません、成長を感じやすくするためのテクニックです。


LV1 知ること(知識)

LV1は「知らない」を「知ってはいる」にする事です。

人間知らないことはわかりません、まずは知るところがスタートです。

例えばプログラムには変数というものがあります。

変数を知らなかった人

「変数というものがあるのか、何もわからんけど」

と思いましたか?

おめでとうございます、LV1です。


LV2 理解する事(理解)

LV2は「知っている」を「理解している」にする事です

学校の勉強で言えば、テスト前の勉強に近いですかね。

授業で聞いて知ってはいるけど、テストで点取れるほど理解はしてない状態を

テストで点が取れるレベルまで理解するのがステップ2です。

僕も学生の頃はテスト勉強をしたんですけどね

いざテスト受けると知らないことばかりで驚きました。

5ステップの中でこのステップ2を乗り越えるのが1番の苦行ではないかなと思います。

また、学校の勉強というので到達できるのは、基本的にこのLV2までだと思います。


LV3 実用・実践

LV3は「知識」を「力」に変える事です

理解したからといって、それが実用的に使えるかというとそうではないですよね。

学校で英語を学んだけれど、それだけで実用的に英語を使えるかと言えばほとんどの人は使えないと思います。

知識は使ってこそ初めて力として威力を発揮します。

また使うことで理解が足りていなかった事にも気づきます。

頭が良くても仕事ができないという分岐点はこの実用・実践力にあると思います。

LV2までは吸収でしたが、LV3からは発揮していく事になります。

また仕事では実務経験があるかどうかを求められることが多いですが

これも仕事では実用的な力があることを求められるからですね。

LV3では小規模でもいいので、とにかく発揮することです。


注意事項

勘違いする人が割といます。

力を発揮するというのはさらに勉強するという事ではありません。

知識を使って具体的に何かを作る、実現する事を繰り返すことが大事です。

また意識高い人は、とりあえず何かモノを作れっていう事もありますが

そもそも実践はLV3なので、なかなかにハードルが高いです。

実践は大事ですが、知識理解もないままに実践だけしようとしても、逆に非効率になる可能性もあります。


プログラマーとしての力について

世の中実務経験を求められることは多いですが、プログラマーはその点は少し有利です。

実務経験より実力を求めるところがそれなりにあります。

仕事だろうと何だろうと、とりあえず何かを作る事で実用・実践力は身につきます。

むしろ仕事だけだと、ある程度の域には達しますが、そこ止まりになりがちです。

一人で何かを作り上げる経験を繰り返す方が身に付く力は多いと思います。

また、そこまで出来るようになると、もはや会社に勤める必要性も薄れてくるでしょう。


LV4 習得

LV4は習得ですが、これは実践を繰り返すうちに自然と到達します。

少し加えると得意分野と呼べる領域にするということです。

学校でも、国語、数学、理科、社会、英語などなどありますが

全て得意という人は少ないと思います。

ステップ4の習得というのは、これは得意だ!と自信を持って言えるレベルです。

世の中のなんか凄いって言われる人たちもほとんどはこのLV4という事になります。


LV5 共有

LV5、最後のステップは共有です。

端的に言えば人に教えられるレベルという事です。

人に教えられるということは

LV0の人をLV2の理解というステップまで持っていける力ということです。

教科書をただ朗読し学生たちを眠らせる力のことではありません。

ステップ4を人に教えられるだけの知識を持っている状態とすれば

ステップ5は人が理解できるようにその知識を展開する能力です。

共有できるかできないかで言えば、多かれ少なかれできると思いますが

同じLV5でもバカに理解させられる人ほど、レベルが高いです。

そしてこのLV5はもともとおバカだった人(LV1とLV2ですごく苦労する人)ほど真価を発揮する傾向があります。

頭のいい人(LV2が早い人)ほど、おバカの思考が理解できず、共有することができません。

おバカはもともとバカだったため、バカに対する知識、理解がある

というかバカを習得していますので、これは結構すごい力だなぁと思います。

**また共有することで、自分の理解が足りていない部分に気付くことが多々あります。

共有は、さらに自分の得意分野を伸ばす事にも繋がります。


そんな感じです

長くなりましたが学びのステップは以上です。

僕はこの学びを5段階に分ける事で、よし今はLV1.6だなとか考えながら

自分のステータス画面を想像しながら奮闘しています。

ついでにそのステータスシステムが欲しいので鋭意作成中です。


最後に

色々うんちくを語りましたが、最後に自分のプログラム遍歴を残しておきます。

これが正解というものではないですが、こういう順番で学んでいって今では色々できるなと思えるようになったという

一つの道筋です。


  1. HTML

  2. CSS

  3. PHP

  4. SQL

  5. JavaScript

  6. Visual Basic

  7. C# + .NEW Framework

  8. C/C++

  9. C# + Unity

  10. Java

  11. Ruby

  12. Python

  13. Babel

  14. TypeScript

HTMLやCSSは難しいものではないんですが

まず自分でもなんか作れるんだと意識が変わったのでよかったですね。

それまではパソコンは便利だけどよく分からんって感覚だったので。

なんとなく就職したところでPHPやJavaScriptをやることになり死にました。

ちなみにプログラムは未経験での就職でしたが

HTML/CSSができたので、なんでも出来るような気になっておりました。

独学だったら速攻諦めたと思いますが、仕事という強制的にやり続ける環境があり

今ではそれなりに色々な事ができるようになりました。

正直なところ、勉強法とかモチベとか、意識改革とかよりも

仕事とかで強制的にやらざるをえない環境にいるってことが一番覚えられるとは思います。

(ただし命の保証はしない)

プログラマー歴4年くらいの頃ですねかね、また調子乗っていた時期です

C/C++をやってまた死にました。

しかしC/C++を学んだことで、かなり実力が上がったなと思います。

先代のプログラマーが言っていた「とりあえずCをやれ」

確かにCやC++はやるべきだと思わされた事案でした。

ちなみにC/C++ではゲームを作りました。

C/C++でゲームを作るとかなり技術力上がるなぁとも思いました。

その後は新しいものだったり作りたいものだったりを自由にやっていますね。

ついでに個人的にホットなのはTypeScriptです。