こんにちは、IT忍者です。具体的な第一歩で、学習前に本記事を読んで頂ければと思います。
どうやったらプログラミングできるようになるの?
どんな感じで勉強すればよいの?
はじめに
細かな言語の命令語や、文法云々については、Java、PHP、Pyhon、Ruby等の具体例を挙げているサイトも多いですので、私のサイトでは、考え方の部分や心理的な部分をしっかりお伝えしていこうと思います。
未経験者向けにプログラミング学習の考え方を中心にしようと思います。
プログラム作成からのアプリ、システムなど人間が考えた概念をコンピュータ世界に置き換えてコンピュータに指示を出し、結果期待するアウトプット100%毎回同じ結果で、永続的に機械がアウトプットを出し続ける。
となります。 これだけ読んでも「??」となると思いますが、
「概念」&「コンピュータ世界」とあえて言いましたが、プログラミング学習の基本はひたすら暗記し続ける勉強法ではないのです。基本を覚え論理的な組み合わせを駆使する。
考えることを主軸に置く勉強法になります。
「自分がなぜプログラミングの勉強をしたいのか?」この根幹をしっかり持っていないと挫折しやすいです。
プログラミング学習は暗記ではない
もちろん、各コンピュータ言語の「命令語」「データ型」は、記述できるように覚える必要があります。
今は、1文字入れるだけで、自動補完機能などついていて、素早く記述できる優秀なでデベロッパーツールがFreeで沢山ありますが、最小単位での命令文やコンピュータが認識できるデータの型は覚えないといけません。
覚えることあるのに、なんで暗記法ではないの???
某私の好きな漫画の忍術に例えてしまいますが、
基本のチャクラの量が足りない、チャクラがまともに練れないと「忍術」は発動しないですよね?
さらにいうと論理的に、覚えた命令文を組み合わせて結果を出す。ということは 同じ結果でも
中のコーディングまで同じとは限らないのです。実現方法とやり方がいくつも出てきます。
比喩的な表現をしますが、 術を出す人のほうにも、「火」「風」という属性で同じ結果でも
(同じ攻撃力でも)術の性質は変わりますよね。
チャクラが練れる=基礎となるコンピュータが指示する基礎命令語がある程度分かる
術を発動する=基礎の命令をどう組み合わせて目的の動きと期待するアウトプットを出す
術は人により違う=同じアウトプットを出す方法はプログラム作成者により違う解法もできる
となるので、ソースコード(プログラムコード)を丸暗記は通用しないのです。
重要なのは なぜそうなるか を論理的に説明できるが 学習ゴールです。
人により術が違うというのは、どういうこと?
例えば (print文とfor文の言語特性は割愛します )
プログラムを動かすと10という数字表示のアウトプットを出すプログラムを作成するとしましょう。
1.Aさん
print(10); //これで10が表示されます
2.Bさん
int x = 0;
x = 2;
x = x * 5;
print(x); //変数と5を使い掛け算を使う これも10が表示されます
3.Cさん
int x =0;
for ( int i = 0 ; i < 10 ; i++) {
x += 1;
}
print(x); //これも10が表示されます。10回足し算を行う
どれも同じ10という数字が表示される結果になるが、その結果に向かう道はたくさんありますよね?
学習の目的を明確にしよう
私は天才派ではないので、なぜそうなるのかの理屈を覚えるしかなかったというのもあるかもしれませんが
究極論でいうと、学習するのにコンピュータなんて必要ないとは考えています。
コンピュータプログラムの学習なのにコンピュータ不要??
私が勉強していた時は、
・紙にプログラムを記述し
・紙に書いたプログラムを紙の上で1行ずつ動かし、 頭の中にコンピュータの動きをイメージをし
・紙の上でデバック(バグ取り)し、結果紙に記述し、最後の結果突合せだけ実際にコンピュータで動かす
今は、そんなことする人少ないと思いますが、プログラムが動く環境を用意して、ウェブサイトのソースコード(プログラムコード)を見様見真似で、コピペして動かしても、「動いた動いたわーい」でなんとなくわかった気になって、きっと終わってしまうと思います。
一番理解してほしい重要な部分は書かれたソースコード(プログラムコード)が動くことでなぜそのアウトプットが出るのか。1行1行理解する必要があります。 考えることが仕事の職業です。
コンピュータは、0と1しかわからない機械(2進数)
「123」 数値 コンピュータ上では:1111011
「123」 文字 コンピュータ上では:00110001 00110010 00110011 by utf-8
人間だから見て判断できて同じように見えても、コンピュータ上では まったく違うものになりますね。
ですので、目的に合わせてこの0と1に意味を持たせ、命を吹き込むていく仕事がITエンジニアです。
独学 or スクール or 専門教育機関
ここも最初は悩むかと思います。今は 情報がすぐ入手できる世の中なので、
私の時より、独学で勉強する環境としてはかなり整っていてやろうと思えば、十分可能だと思います。
メリット
・お金:ローコストで学習が可能
・時間:自分の好きな時間で学習が可能
デメリット
・教材で使うものにより知識や技術に偏る可能性がある
・疑問が出たときに Q&Aで Aをもらうことが難しい
※1 Qiitaのエンジニアサイトもありますが、優しい人が答えてくれる可能性もあり、門前払いあり
※2 今は、1時間いくらでオンラインで教えるというのもあるみたいですね)
メリット
・学習のためのカリキュラムが用意してある (成長するかは本人の努力次第)
・質問や疑問を聞いてもらえる
・就職まで面倒を見てくれるところも多い
・資格を取る教育するところもある
デメリット
・お金は、独学よりかかる
・教育機関によっては学習のための時間的拘束がある
・教育機関やスクールに入るだけで出来るようになると勘違いしやすい
私も最初は本で独学をトライしたのですが、学習時間は多くなるが成果が伴わない傾向でした。
※神童と呼ばれるひとはそうではないのかもしれませんが、私はそうではなかったです。
時間が無限にあればそれでもよいのかと思いますが、学習時間を考えたときにプログラマ35歳定年説とかあり、時間が惜しかったので通産省が推進している教育を主にIT教育機関に行ったほうが良いと考え、私は専門的な学習機関に入りました。
後は、独学ですすめて自分でプログラム作ってアルバイトから入社するという道などもありますね。
いきなりIT起業へ「なにもわかりませんが雇ってください」と行くは、ほぼ無理で、自分でアプリ作って持ち込むぐらい強者でないとです。
最後に
よくありそうな質問に・・・・
Q:プログラミング覚えれば儲かりますか?
A:プログラミング覚えただけだと稼げません。その技術をどう使うかが鍵で技術対価とお金の報酬の成立が必要です。ですので 覚えることが目的ではないはずです。覚えることは手段でしかないので、稼ぐまでを目標にして見てください。
Q:やってみたいんですが僕でもなれますか?
A:やる前から結果を決めるんですか? まず独学でいいから少しやってみて判断してはどうでしょうか。
このあたりの思考やマインドをもし持っていたら改善してください。何がよくないのわかりますか。
こういった思考だと踏みとどまったほうが良いのは確かです。
自分で決めた目標にしたゴールに対して 自分で努力して そうなるのです。自分の道は、自分で決めるしかないのです。またやる前からそれを綿密に確認して石橋をたたいたところで、先に進んでもこのIT業界はいろいろ課題がでてくるはずです。課題突破力も求められる業界ですので、ぜひ自分が目指すIT道が何か考えてみてください。
ゴールにむけて諦めたらそこで終わりです。リスクも感じるかもしれませんので、まずは自己分析をよく実施しつつ自分がやるべきををスコープに学習を進めてほしいです。(好きでないと本業は大変です)
※自己投資にいくら(金、時間)使って、いくら回収するのか?
初期50万使って毎年 年間300万~600万(それ以上も十分あります)
回収するみたいな自分のROIを算出して挑む考え方もありかもですね。
ちなみにですが、私は好きな事を仕事にすると決めたので、最初の一歩はリスクを承知で、
センスなかったら諦めるという覚悟をして、250万と数年間という時間を自己投資しました。