プログラム未経験のわたしが独学のみでプログラムを勉強して正社員SEになり、入社1ヶ月目から社内外問わず技術力を絶賛されるようになった勉強方法を紹介します!
今になって振り返ってみるとスパルタだなと思うところもありますが、技術力をつけるのに近道はありません。
効率的な方法があるだけです。
プログラマになるには情報学部を出ている必要なんてないです。
高校を出ている必要すらありません。
英語ができると学習効率が良くなるくらいです。
必要なのは「やる気」と「パソコン」と「少しのお金」だけです!
勉強の目的は何か?
プログラムの勉強方法の話をする前に、「何のためにプログラムをできるようになりたいか」をハッキリさせなければいけません。
就職・転職が目的の場合
職業プログラマになりたいだけなら、正直なところ大して勉強する必要は無いです。
1部上場企業でも新卒でSEとして入社したら最初にガッツリ入門書を読まされることが多いです。
下請け企業の場合は大した研修を受けないかもしれませんが、新人プログラマの能力に期待している人なんでいないので、何とかなってしまいます。
業界によるとは思いますが、ちゃんと勉強して入社・転職してくる人はほとんど見かけません。
(勉強してこいよとは思いますが・・・)
なので勉強しなくてもPG・SEにはなれます!
人不足の業界なので。(今はコロナで仕事不足・・・)
ただし、社内外で評価されるPG・SEになるためには技術力をつけることが必須です!
第一印象でその後の評価も大きく左右されるので、できれば最初から有能っぽく見せたいですよね。
独立・個人事業が目的の場合
自分でプログラムを作って稼いでやるぜ!というイケイケな人はガッツリ勉強しましょう。
(外注でプログラムを作ってもらう場合を除く)
特に1人でプログラムを作るのであれば、1から10まで全部自分でやらないといけません。
プログラムを作成していく中で、数多くの問題に直面します。
それらの問題に対応するためにも、しっかりと基礎から応用まで勉強して行きましょう。
プログラミングスクールに通うべき?
通う人の多いプログラミングスクールですが、決して万能ではありません。
スクールで学べることのほぼ全ては書籍やWEBサイトに書いてあります。
では、どういう人がスクールに通うべきなのでしょうか?
答えは簡単です。
これらに当てまる人は独学は難しいです。
簡単に言えば、やる気と少しの地頭があれば独学で習得できます。
プログラミング(言語)は年々環境が変わります。
ネットや書籍に記載されている内容が最新であるとは限りません。
内容が間違っている可能性もあります。
調べ物をする際には情報が嘘である(間違っている)可能性を視野に入れておく必要があります。
(ちゃんとした)スクールでは授業内容をアップデートしていると思うので、その点は安心できます。
プログラミングスクールに行ってもプログラムが作れるようになるわけではありません。
(授業時間やあなたの素質にもよりますが)
限られた講義の中だけでできるようになるほどプログラムは甘くありません。
あくまでもスクールはインプットの場の一つです。
プライベートの時間でもプログラムを書くなど、勉強しないと上達が難しいことは念頭にいれておきましょう。
独学が向いている人
では逆に独学に向いている人はどんな人でしょうか?
パソコン操作に(それなりに)精通している人
プログラムを作るためには、パソコン上に開発環境を構築する必要があります。
(PHPやPython等のスクリプト言語の場合はなくても勉強できなくはない)
そのため多少のパソコン操作ができる必要があります。
構築手順はググれば分かる内容です。
試行錯誤できる人
プログラムを勉強していく中で、数多くの問題にぶつかります。
独学ではその度に自分で解決していかなければなりません。
上級プログラマと呼ばれる人も日々問題にぶつかりながら仕事をしているので、いづれは問題解決能力を身につける必要はありますが、学習の初期段階ではやる気を失う大きな原因になります。
問題が発生したときに自分で考え、調べて解決に向かうことができる人は、独学に向いているでしょう。
考え、調べる中で周辺知識も身につけることができるため、プログラマとしての総合力を養うことも出来ます。
明確に作りたいプログラムがある人
明確な目標は、単純にモチベーションを保つための強い原動力になります。
また、目標なくプログラムを勉強する場合は無造作に勉強していくことになるので効率がよくありません。
話したい内容が無い状態で英語を勉強するようなもので、英単語や文法を勉強するだけでは日常会話すらまともに話せるようにならないのと同じです。
作りたいものがあれば、それに必要な知識をピンポイントで調べて学ぶことで効率良く身につけることができます。
どうやって独学する?
まず最初に私が独学した流れを書いておきます。
- Macのアプリが作りたくなった。
- 入門書「詳細!Objective-C」を読み通す
- 少し難しい書籍「詳解Objective-C 2.0」を読み通す
- Appleが新しい言語「Swift」を発表したため、そっちを勉強し直す
- 入門書「詳細!Swift」を読み通す
- 少し難しい書籍「詳解Swift」を読み通す
- Macの電源を様々な方法で落とすアプリを作成
- スクレイピングアプリや、フォルダ整理アプリなどのユーティリティ系アプリを作成
やっていることは凄く単純です。
入門書を読んで、詳しい説明が書いてある本を読んで、作ってみる、作ってみる、作ってみる。
はじめに
プログラムの勉強を始める前に決めなければいけないことがあります。
プログラミング言語です。
これはどの業界のプログラマになりたいかで変わってきます。
組み込み系なら
- C/C++
- Java
業務系なら
- Java
- C#
- C/C++
- 等々
Web系なら
- PHP
- Ruby
- Python
スマホアプリなら
- Swift(Apple)
- Java(Android)
といったところが代表的でしょうか。
業界選びはこの記事の範囲外になってしまうので、他のサイト等で勉強してください。
業界によってプログラムする内容も、働き方も、給与も変わってくるので、慎重に選びましょう。
入門書は隅々まで読め!
入門書に書いてあることは全て大切なことです。
最初に読んだ時点で完全に理解する必要はありませんが、ちゃんと全部読んでください。
そして書いてあることは自分のパソコンでプログラムを書いて動かしてください。
いいですか?
絶対に自分でプログラムを書いて動かしてください。
本に書いてあることをそのまま書き写して動かすだけでも不十分です。
- 値を変えてみたり
- 前に勉強した内容と組み合わせてみたり
「こう書いてみたらどうなるのかな?」という疑問を常に持ってください。
実戦でプログラムを作っていくためには応用力が必須です。
入門書に書いてあることは、他の言語を勉強するときにも必ず役に立ちます。
言語が変わっても書き方が違うだけで、できることはほとんど変わりません。
書籍は評価の高い最新の入門書ならハズレは少ないでしょう。
入門書の中も超簡単な入門書がありますが、それだけでは内容が足りないかもしれません。
ページ数だけで内容を判断することは出来ませんが、500ページ程度あると必要な内容は網羅出来ていると思います。
フレームワークを知れ!
フレームワークの勉強は書籍で行うことをおすすめします。
一般的にフレームワークはめちゃくちゃ大きいので、全部勉強することは現実的ではありません。
よく使われる内容がまとめられている書籍が効率良く学べるでしょう。
程よいWEBサイトを選定できるのであればそれでも良いのですが、難しいと思います。
フレームワークって何?
初学ではフレームワークという言葉に耳馴染みが無いと思うので、簡単にだけ説明しておきます。
プログラミング言語には「フレームワーク」というものが存在します。
フレームワークはプログラムを効率良く作るための枠組みです。
プログラムを作る際にはフレームワークを使うことがほとんどです。
(コマンドラインツールとかでは使わないこともある)
初学時点では「便利なクラスやメソッドを寄せ集めたもの」くらいに捉えておいてください。
例えばフレームワークには次のようなものがあります。
- Macアプリ:Cocoa
- iPhoneアプリ:Cocoa Touch
- Java:Spring、Struts等
- PHP:Laravel、CakePHP等
- Ruby:Ruby on Rails
どのフレームワークを学ぶべきかはググって用途にあってそうなものの中で一番シェアの高そうなもので良いと思います。
迷う場合は知恵袋等で有識者に聞くか私に聞いてください。(答えられたら答えます)
なぜ作る前にフレームワークを学ぶのか?
入門書を読み終えたら実際にプログラムを作っていっても良いのですが、私はもっと詳しく言語を学ぶことをオススメします。
なぜなら、プログラム初学者は「プログラムでどんなことができるか」が良く知らないからです。
「車輪の再開発」という有名な言葉があります。
既に便利で最適なものが存在するにも関わらず、同じものを開発しようとするのは無駄な行為である、ということです。
フレームワークでは便利な機能が数多く用意されています。
その存在を知っておくことで「車輪の再開発」を行うリスクを下げることが出来ます。
また、フレームワークでできることを知るということは、プログラムの仕様を考える際の「ヒラメキの種」になります。
「あのメソッドを使えば簡単に実現できる!」
という発想ができると、学習・開発の効率がグッと上がりますよ!
プログラムは売るつもりで丁寧に作れ!
ここまで勉強してきたあなたには、かなり知識が身についてきているはずです!
満を持してプログラムを作りましょう!
作りたいものを作るのがベストですが、「作りたいものが無い」「作りたいものが難しすぎる」場合もあるでしょう。
そんな場合は適当に頑張れば作れそうなアプリを探して、それの類似アプリを作ってみると良いでしょう。
プログラムを作る上で大切なことは、「丁寧に作る」ことです。
最初からキレイなコードが書ける必要はありません。
大切なのはキレイに「動く」ものを作ることです。
なぜ丁寧に作るのか?
デバッグ技術を学ぶ
プログラムを作っていくとほぼ100%バグが発生します。
「自分で使うだけだしこれくらいのバグは仕様にしよう」
なんて妥協は良くないです。
「どこが」「なぜ」バグっているのか。
これを特定して修正したり、別の方法で実現することは大きな学びです。
今後ともプログラムを作っていきたいと思っているのであれば、バグとは切っても切れない縁になります。
バグを特定して対処するためには知識・技術・慣れが必要です。
場数をこなしていきましょう。
周辺知識が身につく
バグを修正したり、細かい見た目に拘ったりしていると、沢山の知識が身につきます。
実際に私もウインドウを透過させたり、非同期でタイマーを動かしたりと、様々な知識を学びました。
プログラマは総合的な知識が重要です。
一つ一つの知識がつながって線となり、面となり、立体になることで、深く理解できるようになっていきます。
知識には貪欲になりましょう。
例え仕事で使うことの無い知識だとしても、知っていると得することも多いです。
先輩社員とプログラムの話をする中で仕事に出てこないような知識の話に参加できると、あなたの株が急上昇することは間違い無いでしょう。
作ったプログラムを振り返れ!
初めてのプログラムを作ってみてどうだったでしょうか?
「完璧だった!」
なんて人はほとんどいないでしょう。
ちゃんとした入門書を全部読んで、フレームワークについても勉強したあなたは、沢山の知識を持っています。
そこに書かれていたことをちゃんと実践出来ましたか?
私は全然出来ませんでした。
オブジェクト思考的なプログラミングが全くできておらず、mainメソッドに処理の大部分を記述していました。
でもそれで良いんです。
最初からキレイにコーディングできる人は化け物です。
大切なのは「何が」できなかったのかを知ることです。
しっかりと勉強してきたあなたなら、「何が」できていなかったのかも分かるでしょう。
あとは、その「何が」について本を読み直したり、ネットで調べ直したりして、次に作るアプリに活かすだけです。
理解の足りない分野について、別途書籍を購入して勉強するのもオススメです。
実際に私も「オブジェクト指向でなぜつくるのか」等の書籍を買って勉強しました。
何個もプログラムを作れ!
あとは「作って反省して勉強する」の繰り返しです。
3つ4つもプログラムを作れば、かなりの実力がついて来ているはずです!
まとめ
この方法で勉強してプログラムを作れるようになれば、別の言語でも少し勉強するだけで使えるようになるはずです。
(似た種類の言語であれば)
バグを直す力もついているし、周辺知識を勉強したお陰で知識量も申し分ないでしょう。
胸を張って就職・転職活動に臨んでください!
例えニートでもここまで勉強することができれば、必ず正社員になれるだけの能力が身についているはずです!
PG・SEは学歴、職歴じゃないですよ。(一流企業は除く)
私ももっと勉強しなくては・・・
コメント