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

# <font color="#009F8C">駄文</font>

2月11日　本日誕生日を迎えました。
Happy birthday to me.

そんなことはどうでもよくてですね、今日は前から少し思っていた
**「初心者がプログラムって何から勉強すればいいの？」**って質問すると

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

いわゆる昔から続く**「きのこの山とたけのこの里の戦争」**みたいなものに触れてみたいと思いました。
(最近だと、**まずモチベが大事派閥**も現れて、三国志になってきている気もします)

最終的に、僕は<font color="red">**どれが正しいかなんてないけどね**</font>という中立を保ちつつ
でも<font color="red">**「俺はこう考えて取り組んだら少しいい感じになったよっていう学習のテクニック」**</font>と
勝手な見解を述べて終わりにしたいと思います。



# <font color="#009F8C">きのこたけのこ戦争(Kinoko And Takenoko War)</font>

<font color="#ddd">ちなみに私は元々きのこの山の者でしたが、今ではたけのこの里に寝返りました。</font>

便宜上

- **Cやれ派閥**の人たちを**プログラマー**
- **モノ作れ派閥**の人たちを**クリエイター**
とします。  
(モチベ派閥の人は、うーん、まぁ意識高い系ってことにしておこう)

個人的にはCをやると非常にプログラムの知識が強くなると思いますが
Cだけやっても今時のモノが作れるようになるかと言えばならないと思いますし
かといって便利なもの使ってモノさえ作れればプログラマーなの？というと
それは違うような気がします。

要するに<font color="red">**何を大事にするのか問題**</font>、ということであります。

クリエイターは<font color="red">**プログラムの知識よりもまずモノを作れることが大事**</font>と思う種族であり
プログラマーは<font color="red">**モノが作れるだけじゃダメでプログラムの力量あってこそだ**</font>と思う種族である
と思っております。

また、「そんなの本人がどうなりたいか次第だろ」と離れた位置から思っていた意識高い系は
<font color="red">**大事なのはとりあえずやる事、継続こそ力だ、だからモチベ命**</font>と提唱するのだと思われます。

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

## <font color="#009F8C">クリエイターの主張</font>
プログラマーの最終到達地点はモノを作ることである！
プログラムはその手段に過ぎん！
モノを作ることこそが本分であり、プログラマーの本来の在り方である！
使えるものは使い、より早くモノを作る経験を！そしてその経験は力なり！

## <font color="#009F8C">プログラマーの主張</font>
否！
最近ではろくな知識も持たないままに戦場に送られてくる兵士が多すぎる！
奴らは敵味方の区別なく破壊行為をしている！
プログラマーの敵は営業ではない、クリエイターにあり！

## <font color="#009F8C">モノローグ</font>

そう、確かに世の中が便利になり過ぎてしまったように思います。
実際<font color="red">**プログラムの事をあまりわかっていなくてもモノが作れてしまう**</font>という現実があります。

そして困ったことにそういった人たちは、俺はプログラムできるぜーと慢心し
クソースなどの負の遺産を量産し続け、プログラムの知識を高める事を忘れてしまう傾向があります。

プログラマーからすると、このようなクリエイターは撲滅対象になるでしょう。
というよりは<font color="red">**これは自己防衛、身を守る戦い**</font>なのです。

整備したリソースは荒らされ、アーキテクチャを崩され、予想もしえない摩訶不思議なコードを埋め込む。
現場で実際に苦しめられてきた怨念をヒシヒシと感じます。
これ以上、もう、(半端なやつは)増えないでくれ。。と

しかしその反面、<font color="red">**プログラマー達は新しいものを嫌う傾向**</font>があったりもします
詳しいがゆえに、新しいものを必要としないのです。
また<font color="red">**自らが把握していない、ブラックボックスを扱うことも気に食わない不安**</font>なのです。

そんな事を言っていても戦場は進化していきます。
いつまで刀を振るっているんだ！
<font color="red">**向こうは大砲だ、こっちは水鉄砲**</font>
太刀打ちできるわけがないだろう！とクリエイター達は思わざるをえません。

みんな、世の中に秩序を、そしてより良いものを求めているだけである。
みんなの気持ちは同じなのに、その想いこそがこの戦争を引き起こしている。
まさに悲劇である。

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

# <font color="#009F8C">モチベがないと無理なのは確か</font>

<font color="red">**プログラマーとしての力もクリエイターとしての力も両方ないとダメ**</font>
結局はどっちも大事ですよって事ですね。

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

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

実際には<font color="red">**宝物から時限爆弾のようなものまで千差万別**</font>であり
何をチョイスすれば正解なのかは正直わかりません。

とりあえず人気なものなら大丈夫だろうと考え無しに飛びつき
<font color="red">**飛びついた人たちがこぞって滅されるというケースも珍しくありません。**</font>

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

- 死を恐れず、果敢に新しいものにぶつかっていく勇敢なもの達
- 先駆者の死体をかきわけ、漁夫の利を得ようとする利口派のもの達
- 求める事をやめ、安住の地でひっそりと生き長らえようとするもの達
- <font color="red">**何もわからず戦場に送られ、味方もろともプロジェクトを破壊するもの達**</font>

このような世界で生きていくのであれば必要です
<font color="red">**モチベーションが**</font>

でも難しいわけですよ、モチベーションというのはね
出そうと思って出るもんじゃないんですよ。

意識高い人が、<font color="red">**まずやってみようとか、まずやることが大事です**</font>だとか
言ってることはわかります

でもそれはダイエットしたい人に
「食べなければ痩せるんです！さぁ、断食しましょう！食べないだけでいいんです！」
と言ってるようにも聞こえます。

無理です、暴論です。
毎日アイスを食べたいです。
<font color="red">**I want to eat many ice cream every day!**</font>

そもそもモチベのだせる人には手を差し伸べる必要なんてそんなにありませんし
とやかく言わなくてもそういう人はやってるからねっていう。

僕はどちらかというと
<font color="red">**やってみたいけどモチベも上がらないしう〜んと悩める人にこそ協力したいです。**</font>

しかし僕にはこのカオスワールドの正しい歩き方なんてわかりません。
できるのはこの暗闇の世界を光で照らし、少しでも道を見えやすくしてあげる
そんなことくらいしかできません。

しかし文字で説明するのもめんどくさいです。
なのでそのうち動画を作ります。
この記事では勘弁してください。

...

ようやく、この長きに渡る前書きもここで終わりです。
密かにこの記事の本題にしようと思っていた
<font color="red">**「学びの5ステップ」**</font>について紹介したいと思います。

# <font color="#009F8C">学びの5ステップ</font>

人は何かを学ぶ時に５つのステップがあります。
それぞれLV1〜LV5とでもしておきましょう。
これを意識する事で、成長を感じやすくすることができます。
<font color="red">**※成長するわけではありません、成長を感じやすくするためのテクニックです。**</font>



## <font color="#009F8C">LV１　知ること(知識) </font>

<font color="red">**LV１は「知らない」を「知ってはいる」にする事です。**</font>

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

<font color="red">**例えばプログラムには変数というものがあります。**</font>

変数を知らなかった人
<font color="red">**「変数というものがあるのか、何もわからんけど」**</font>
と思いましたか？

おめでとうございます、<font color="red">**LV1**</font>です。

## <font color="#009F8C">LV2 理解する事(理解)</font>

<font color="red">**LV２は「知っている」を「理解している」にする事です**</font>

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

<font color="red">**授業で聞いて知ってはいるけど、テストで点取れるほど理解はしてない状態を**</font>
<font color="red">**テストで点が取れるレベルまで理解するのがステップ２です。**</font>

僕も学生の頃はテスト勉強をしたんですけどね
いざテスト受けると知らないことばかりで驚きました。


5ステップの中でこのステップ２を乗り越えるのが１番の苦行ではないかなと思います。
また、<font color="red">**学校の勉強というので到達できるのは、基本的にこのLV2まで**</font>だと思います。

## <font color="#009F8C">LV3 実用・実践</font>

<font color="red">**LV3は「知識」を「力」に変える事です**</font>

理解したからといって、それが実用的に使えるかというとそうではないですよね。
学校で英語を学んだけれど、それだけで実用的に英語を使えるかと言えばほとんどの人は使えないと思います。

<font color="red">**知識は使ってこそ初めて力として威力を発揮します。
また使うことで理解が足りていなかった事にも気づきます。**</font>

頭が良くても仕事ができないという分岐点はこの実用・実践力にあると思います。
LV2までは<font color="red">**吸収**</font>でしたが、LV3からは<font color="red">**発揮**</font>していく事になります。

また仕事では実務経験があるかどうかを求められることが多いですが
これも仕事では<font color="red">実用的な力があることを求められる</font>からですね。

LV3では小規模でもいいので、とにかく<font color="red">**発揮すること**</font>です。

### 注意事項
勘違いする人が割といます。
<font color="red">**力を発揮するというのはさらに勉強するという事ではありません。
知識を使って具体的に何かを作る、実現する事を繰り返すことが大事です。**</font>

また意識高い人は、とりあえず何かモノを作れっていう事もありますが
そもそも実践はLV3なので、なかなかにハードルが高いです。
実践は大事ですが、<font color="red">**知識理解もないままに実践だけしようとしても、逆に非効率になる可能性もあります。**</font>

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

世の中実務経験を求められることは多いですが、プログラマーはその点は少し有利です。
<font color="red">**実務経験より実力を求めるところがそれなりにあります。**</font>

仕事だろうと何だろうと、とりあえず何かを作る事で実用・実践力は身につきます。
むしろ仕事だけだと、ある程度の域には達しますが、そこ止まりになりがちです。
一人で何かを作り上げる経験を繰り返す方が身に付く力は多いと思います。

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



## <font color="#009F8C">LV4 習得</font>

<font color="red">**LV4は習得ですが、これは実践を繰り返すうちに自然と到達します。**</font>
少し加えると<font color="red">**得意分野と呼べる領域にする**</font>ということです。

学校でも、国語、数学、理科、社会、英語などなどありますが
全て得意という人は少ないと思います。

ステップ４の習得というのは、<font color="red">**これは得意だ！と自信を持って言えるレベル**</font>です。

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

## <font color="#009F8C">LV5 共有</font>

<font color="red">**LV5、最後のステップは共有です。
端的に言えば人に教えられるレベルという事です。**</font>

人に教えられるということは
<font color="red">**LV0の人をLV2の理解というステップまで持っていける力ということです。
教科書をただ朗読し学生たちを眠らせる力のことではありません。**</font>

ステップ4を人に教えられるだけの知識を持っている状態とすれば
ステップ5は人が理解できるようにその知識を展開する能力です。

共有できるかできないかで言えば、多かれ少なかれできると思いますが
<font color="red">**同じLV5でもバカに理解させられる人ほど、レベルが高いです。**</font>

そしてこのLV5はもともとおバカだった人(LV1とLV2ですごく苦労する人)ほど真価を発揮する傾向があります。
<font color="red">**頭のいい人(LV2が早い人)ほど、おバカの思考が理解できず、共有することができません。**</font>

おバカはもともとバカだったため、バカに対する知識、理解がある
というかバカを習得していますので、これは結構すごい力だなぁと思います。

<font color="red">**また共有することで、自分の理解が足りていない部分に気付くことが多々あります。
共有は、さらに自分の得意分野を伸ばす事にも繋がります。</font>

## <font color="#009F8C">そんな感じです</font>

長くなりましたが学びのステップは以上です。
僕はこの学びを5段階に分ける事で、よし今はLV1.6だなとか考えながら
自分のステータス画面を想像しながら奮闘しています。

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

# <font color="#009F8C">最後に</font>

色々うんちくを語りましたが、最後に自分のプログラム遍歴を残しておきます。
これが正解というものではないですが、こういう順番で学んでいって今では色々できるなと思えるようになったという
一つの道筋です。


1. HTML
2. CSS
3. PHP
5. SQL
6. JavaScript
7. Visual Basic
8. C# + .NEW Framework
9. C/C++
10. C# + Unity
11. Java
10. Ruby
11. Python
12. Babel
13. TypeScript

HTMLやCSSは難しいものではないんですが
まず自分でもなんか作れるんだと意識が変わったのでよかったですね。
それまではパソコンは便利だけどよく分からんって感覚だったので。

なんとなく就職したところでPHPやJavaScriptをやることになり死にました。
ちなみにプログラムは未経験での就職でしたが
HTML/CSSができたので、なんでも出来るような気になっておりました。

独学だったら速攻諦めたと思いますが、仕事という強制的にやり続ける環境があり
今ではそれなりに色々な事ができるようになりました。

正直なところ、勉強法とかモチベとか、意識改革とかよりも
仕事とかで強制的にやらざるをえない環境にいるってことが一番覚えられるとは思います。
(ただし命の保証はしない)

プログラマー歴4年くらいの頃ですねかね、また調子乗っていた時期です
C/C++をやってまた死にました。

しかしC/C++を学んだことで、かなり実力が上がったなと思います。
先代のプログラマーが言っていた**「とりあえずCをやれ」**
確かにCやC++はやるべきだと思わされた事案でした。

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

その後は新しいものだったり作りたいものだったりを自由にやっていますね。
ついでに個人的にホットなのはTypeScriptです。