こんにちは!seiです!
- プログラミング始めたいけど独学だと難しいって聞くしな
- プログラミング独学は無理?
- スクールとか通ったほうが良いのだろうか?
今回は独学でエンジニアになったseiがお答えします!
この記事の信頼性
僕は完全未経験でプログラミングを学習して、8か月でWebアプリケーションを開発しました。このwebアプリケーションをポートフォリオにしてシステムエンジニアとして外資系企業に入社しました。
学生時代の専攻学科も農学なので全くプログラミングには触れてきてません。
プログラミングの独学は無理じゃない!
結論から言うとプログラミングの独学は十分可能だと思います。
僕が独学で勉強して大丈夫だったのもありますが、
- 情報が豊富にある
- プログラミングは以前に比べ、シンプルになっている
上記理由より独学がしやすくなっていると思います。
ただ舐めてかかると失敗します。アプリ完成までにニート時代の僕が毎日8時間勉強して8か月かかってます。
情報が豊富にある
今はネットで検索すれば、ほとんどの情報は手に入れることができます。みんなの情報格差がほぼなくなってきています。
さらにyoutubeなどの動画情報も発達してきているので、「先人が実際にプログラミングしているところ」を見ることができます。
これによって実際に見ないと理解できない部分も理解できるようになりました!
書籍だけで学習するとかマジで辞めてください(笑)
独学がめちゃめちゃしやすくなっています。
プログラミングは以前に比べ、シンプルになっている
プログラミングは以前に比べてシンプルになってきています。
例えば、PCがどうやって処理を行っているかまで細かく考える必要がありました。スタック領域やヒープ領域まで意識してメモリを管理し、変数に対するアドレスの概念もしっかり理解する必要があったようです。
いろいろ意識しなくても言語が勝手にやってくれるおかげで昔よりシンプルで直感的にわかりやすくなっています。
プログラミングの独学が難しい原因
当たり前ですが、独学で学習するのは誰かに教えてもらって習得するよりも難しいです。
プログラミングの独学が難しい原因は主に以下の理由からです。
- 手順がわからない
- 詰まったときに誰も教えてくれない
- モチベーションの管理が難しい
手順がわからない
プログラミングを勉強しようと思ったら、あなたは何から始めますか?
おそらくほとんどの人はプログラミング言語と答えるでしょう。
ではその次は?何を順番に学習していきますか?次の項目に移るタイミングは?
アプリケーションを作るには?作ったアプリを公開するには?
独学で学習するというのは、これらすべての手順を自分で考えて学習していく必要があります。
学校教育でも、会社でも上からの指示に従ってやるべきことを与えられてきた人には「自分で調べてやるべきことをリストアップする」作業が難しくつらく感じるはずです。
僕の最終目標は「Webアプリケーションを作成する」だったので、必要な手順を全部書き出してそれを順番に学習していきました。
大まかには言語、git、フレームワーク、認証、デプロイの順に学習しました。
詰まったときに誰も教えてくれない
プログラミング学習時にどうしても分からない部分や、謎のエラーでつまずいたときにもだれも教えてくれません。
すべて自己解決する必要があります。
僕も変なエラーや知識不足で何度もつまずきました。特にネットワーク関係のエラーはマジで知識ないとできないので、つらかったです。
考えつく限りの原因を全部洗いだして一つずつ検索したり、原因が思いつかないときは周辺知識を学習したりすることで自力解決しました。
この点が独学をしているうえで一番キツイ部分だと思います。
分からなかった時に質問できるサイトを紹介します。どうしても困ったら使うことをおすすめします。
※ちなみに僕は質問をしたことはないです
teratailとstackoverflowは無料で使えます。
teratail(テラテイル)はプログラミングに特化したQ&Aサイトです。実現したい機能や作業中に発生したエラーについて…
MENTAにはさまざまなスキルや経歴をもったプロが3,500名以上。あなたが学んでいることのサポートや悩みなど、マンツー…
モチベーション管理が難しい
独学で学習しているとモチベーションの管理が難しいです。
特に分からなくなってくると、面白くないし、やる気も起きないので負のループに陥ってしまいます。
僕の場合はプログラミング学習仲間を掲示板で見つけて一緒に勉強したり、できるだけ分かる範囲から進めたりでモチベーションを維持しました。
プログラミングを独学するメリット
独学でプログラミングを習得するのはかなり大変でした。
それでも独学をしていたからこそ身についたスキルがあるので良かったと思っています。
- 新しい技術への順応速度が速くなった
- バグの原因を特定しやすくなった
- 他人のコードを読む能力が向上した
新しい技術への順応速度が速くなった
新しく出てきた技術(例えば機械学習や深層学習)への順応速度が速くなりました。
業務の中で機械学習のモデルを構築する機会がありました。
これまで機械学習の経験はありませんでしたが、全く新しい分野でも臆する事なく学習できたので、機械学習のモデルを独学で構築することができました。
これからも常にエンジニアは不足し続けるだろうし、ましてや新しい技術なら、なおさら教えられる人はほとんどいないはずなので、かなり強いスキルが身についたと感じています。
バグの原因を特定しやすくなった
バグの原因を特定しやすくなりました。
独学の際は絶対に自分ひとりでバグを解消しないといけなかったので、あらゆる可能性を考えていました。必死で考えて必死で解決したのでエラーの経験が強く記憶に残りました。
エラーメッセージと自分がはまっている時間から、どのあたりのエラーかすぐにわかるようになりました。
多分新卒エンジニアとか若手エンジニアだと先輩に聞くことが多いと思いますが、いつまでも聞いてばかりだと成長しません。
自分で考える力はこの時に身につきました。
他人のコードを読む能力が向上した
プログラミングにおいて「他人のコードを読む」能力は初心者が想像しているよりもずっと重要です。
なぜならシステム開発は新規開発だけではなく、既存のシステムのバグ修正だったり、既存システムを新しい言語やクラウドに移行したりしないといけないからです。
プロジェクトに参画したときに、自分が書いた部分以外も担当しないといけないときがたくさんあります。
独学で学習した際は、ネットにあるコードを理解して自分のシステムに落とし込むようにしてました。独学で挫折している人の多くは「コピペ」してしまっていると思います。
コピペしてしまうと、その時は楽ですが後々細かなところが分からなくなり、それが全体に広がって全部分からなくなっていきます。
一つずつ丁寧に理解することが大事だと思います。
当時はChatGPTもなく、自分でコードを理解しなければならなかったので、他人のコードを読む力が発達しました。
プログラミング独学するうえでの注意点
逆に独学だから感じたデメリットや昔の僕に対して注意したいことがあります。
実際に仕事でプログラミングをするうえで、自分がやってきたプログラミングとの違いを感じました。
以下の点に注意してください。
- 人が読みやすいコードを書く
- ドキュメントを読む癖をつける
- 常にこれが一般的なのかを考える
人が読みやすいコードを書く
コードは人が読みやすいコードを書きましょう。
なぜならプログラミングには必ず保守作業が発生するからです。たとえば使っているツールのバージョンが上がっただけでシステム全体がうまく動かなくなる時があります。この時にバグを改修する保守作業が発生しますが、書いてあるコードが何をしているかパッとわからないと修正箇所の発見に時間がかかります。
自分一人だけで書くからいいと思っている人もいるかもしれませんが、その場合も必要です。
自分が書いたコードを一年後に見直したときどこに何が書いてあるのか、それが何をしている処理なのかすぐに理解できるでしょうか?
たぶん三か月後でも厳しいと思います。自分が書いたコードでもわからないのに、人が書いたコードはなおさらわかりません。
また保守作業だけでなく、チームで同じ個所を開発したり移行作業をしたりする時に他人のコードを読む機会は頻繁にあります。
その際に自分が読みにくいコードを書いているとチームの開発スピードが落ちてしまうことにもつながります。
独学で学習している時にも読みやすいコードを意識した方が良いです。
独学時代は感覚で読みやすいコードを書いていました。入社してから知ったので早めに知りたかったです(´;ω;`)
リーダブルコード ?より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice) 新品価格 |
ドキュメントを読む癖をつける
プログラミングを行っていると、さまざまなツールを使うと思います。
この際にネットで「ツール 使いかた」などで検索すると思いますが、誰かが書いている記事を参考にしていると、部分的な使いかたしか分かりません。
プログラミングで使うツール(フレームワークなど)には必ずドキュメントは存在します。ドキュメントとは説明書みたいなものです。誰かが書いた記事を参考にコードを継ぎはぎしていると、意味がないことをしてしまったり、バグにつながりやすいコードを書いてしまいます。
面倒くさいかもしれませんが、ドキュメントを読む癖をつけた方がいいです。
僕はドキュメントを読む癖をつけていなかったので、ネット上に参考記事が存在しないコードを書こうとした時に書けなくて苦労しました。
常にベストなやり方を調査する
独学で学習を進めていると、ベストなやり方からずれることが多々あります。僕も一般的なやり方、ベストなやり方になっておらず最初に作成したアプリは保守性も良くなかったです。
例えば認証機能を作成するにはどのようにするのが一般的なのか?最近新しいやり方が出てきていないか等調査しましょう。
新しいやり方が出てきている場合は、昔のやり方には問題があったので改良している場合が多いです。
また無駄にPCのリソースを使うような実装をしてたりするので、リソースを意識すると良いです。いらないライブラリとかをインポートしまくると動作遅くなるのできちんと精査しましょう。
プログラミング独学の手順
プログラミング独学の手順は以下のようにすると良いです。
- 目的を決める
- 目的を細分化する
- 一週間に使える時間を割り出す
- モチベーション管理について考える
目的を決める
プログラミング学習の目的を立てましょう。プログラミングを学習して何を達成したいかです。
ここが定まってないと、モチベーションも続かないのでしっかり考えてください。
あなたは何のためにプログラミングを勉強するのでしょうか?
キャリアチェンジ?就職?稼ぐため?
自分がやりたいことを明確にしましょう。
目的を細分化する
目的が決まったらこれを細分化して「目標」にします。
つまり、目的を達成する途中の各地点が目標になります。
細分化しないと何をしていいのか分からなくなりますし、勉強の途中で達成感が得られないので続かなくなります。
僕の場合は目的を「システムエンジニアとして就職する」に定めてました。
そのための各目標は以下の通りです。
- 言語を決める
- 言語の文法を学ぶ
- フレームワークを学ぶ
- データベースについて学ぶ
- ORMについて学ぶ
- webアプリが表示される仕組みを学ぶ(通信周り)
- インターネットに公開する
- Webアプリを完成させる
大まかには上記の流れでやってました。調べていくうちに足りない所を補ったり、各項目についてより細分化したりする必要が出てきます。
独学は手探りですが、一つずつ調べていけば確実にステップアップできますよ!
一週間に使える時間を割り出す
プログラミングは隙間時間にちょこっとやって身に着けられるほど甘くないです。一回の学習で少なくとも1時間はパソコンに向かって作業する時間が取れないと厳しいです。
一週間単位で自分が使える時間を考えてみましょう。
一週間取り組んでみて、どのくらい進むのか確かめましょう。あまりにも進みが遅い場合は一度退職するなどして時間を確保してください。
モチベーション管理について考える
独学してるとモチベーションが下がるときが必ずやってくると思います。
思うように進まなかったり、飽きてきたりします。
モチベーションが下がる原因は「理解できない」、「一人でやろうとするとできない」事に尽きます。
「勉強する事」に重きを置いていると、この状態に陥りやすいです。
プログラミングの学習は学校の勉強とは違います。文法や仕組みを完璧に丸暗記する必要はないです。参考資料はカンニングし放題ですが、きちんとした仕組みで動くものを作成しないといけません。
つまり成果物(アウトプット)が超重要です。
学習の折には各項目で何かしら自分で成果物を作成するのをお勧めします。
例えば、言語の文法を学んだら、if文とfor文で簡単な計算ができるプログラミングを書いてみるなどです。
それでもモチベーションが下がってしまったら、プログラミングからいったん離れてみましょう。ほんとにプログラミングを身に着けたいのであれば、必ず体がPCに向かうはずです。
スクールに通ったほうが良い人の特徴
独学するよりスクールに通ったほうが良い人もいます。
以下のような人はスクールに通ったほうが良いです。
- 時間がなかなか取れない人
- お金に余裕がある人
- さぼり癖がある人
時間がなかなか取れない人
独学に対して時間が取れない人はスクールに通ったほうが良いです。
スクールはカリキュラムが決まっているので自分で計画を立てる時間を削減することができます。
お金に余裕がある人
お金に余裕がある人もスクールに通ったほうが良いです。
わざわざ苦労する独学を選ばなくても、スクールに通ったほうが学習しやすいです。
ただ、あなたがエンジニアに適性があるかどうか分からないので、ある程度自分で独学して向いてるのか確かめたほうが良いと思います。
さぼり癖がある人
一人で学習できない人、さぼってしまう人もスクールに通ったほうが良いです。
独学は自分をコントロールして、いろんな誘惑を断ち切って勉強しないといけないです。
誘惑に弱い人やすぐ諦めてしまう人は対面式のスクールに通うことをお勧めします。
スクールを選ぶ上での注意点
- 講師が学生講師ばかり
- 扱ってる内容が古い
- 今後廃れる技術を扱っている
講師が学生講師ばかり
「プログラミングが書ける」と「実務レベルのプログラミングができる」は全く別物です。
現場で開発したことがない学生講師ばかりのスクールは選ばないようにしましょう。
学生講師が教えられる情報は調べればわかります。
扱ってる内容が古い
扱ってる内容が古いスクールも行かないほうが良いです。
例えばjQueryを扱ってるスクールが目立ちますが、今はフロントエンドの開発において、jQueryはほとんど使われていません。
Vue.jsやReact.jsに完全に移行しているので、jQueryを学んでもほぼ役に立ちません。
特にフロントエンドは技術の移り変わりが激しいので注意です。
今後廃れる技術を扱っている
上と被る部分がありますが、今後廃れていくであろう技術を扱っているコースは選ばないようにすると良いです。
例えば、「Ruby on rails」は今後廃れていく可能性が高いです。Rubyの人気は年々下がり続けています。案件数もPHPやpythonに比べるとだいぶ少ないです。レバテックフリーランスで調べたところpython133件に対し、Rubyは64件でした。(2023年8月)
下記記事にも廃れる可能性が高いことが言及されています。
ソフトウェアエンジニアにとってどの言語を優先的に学ぶべきかは、永遠の課題とも言えます。 常に新しい言語が生まれ、廃れてい…
そもそもRubyは「書いてて楽しい」ことを目的に作られています。開発効率がすごく良いので、ベンチャー企業によく採用されている言語です。開発効率が良いということは、リリースまで時間がかからないということです。あなたは急いで開発したいのに、わざわざスクール上がりのほぼ経験がない人を採用しますか?Rubyの開発は経験者から順に採用される傾向にあります。
Rubyでちゃちゃっと開発してリリースまでもっていき、ユーザ数が安定してから別の言語で再構築するみたいな話も聞いたことがあります。
以上を踏まえたおすすめのプログラミングスクールは以下です。Vue.jsまたはPythonが学べる条件で絞っています。
チーム体制で開発できるところが良いですね。
フロントエンドのコースはvue.jsが学べるところが良いです。あとは講師が全員実務経験のあるエンジニアなところも良いですね。
何を勉強したらいいかをイメージしやすいようコースをご紹介…
最終的には独学しないといけないです
プログラミングは最終的には独学しないといけないです。
なぜなら、エンジニアは人材不足なので開発現場に入ったら教えてもらえることはほぼないからです。人材不足は長期的に予測されているのでこの状況が変わることはほぼないでしょう。
また、プログラミングができるようになったからそれで終わりではないです。新しい技術がどんどん生まれていく中で以前は使っていた技術が廃れて使われなくなることもあり得ます。
現場でも新しい技術を採用するとき、チームにノウハウがないので、自分で調べて学習しないといけない場面が多々あります。
新しい技術を教えてもらうのを待つのではなく、自分で理解してチームに共有することが求められます。
つまり、新しい技術を独学で身に着ける必要があるということです。
スクールでも独学でも、今までの知識をベースに新しいことを学ぶという経験をたくさん積んでいく必要があります。
まとめ
今回はプログラミングの独学が無理じゃない理由を解説しました。
独学でプログラミングを身に着けたというと、スゴイと言われることが多いですが、僕は当たり前に理解できることを一つずつ積み重ねていっただけです。
目的を決め、目標を定めてそれに向かうために必要な情報を集めていくだけです。
独学でプログラミング、システム開発のほとんどは学ぶことができました。
しかし、独学で学べることにも限界があります。
それはチームでの開発だったり、gitの高度な使い方コードの細かい書き方などです。この部分は一人で開発していてもどうしても身に着けることができない部分だと感じました。
速めに就職して実務での経験を積むことが重要だと思います。
あなたの独学lifeが充実することを願っています!