今回の記事はコラム的な内容になります。
ITエンジニアへの転身を目指し、2021年11月29日よりプログラミングの学習を開始し、4か月が経ちました。
今回はこの4か月間の軌跡を記事にまとめたいと思います。
どうしてこの記事を書こうと思ったか
- 記事を書くことで自分自身、今までやってきた内容を整理しておきたかった
- これから就職活動をはじめるにあたって、面接官から勉強してきた内容を聞かれる機会があると思うので、その対策として
- 自分のように未経験者からエンジニア転身を目指す方の参考に少しでもなればという思い
本編
2021年10~11月(学習開始前)
前職を辞め3年ぶりに地元に帰郷。そのときは特にやりたい仕事もなかったので、「前職の経験を買ってくれるそこそこの地元企業でもあればな~」なんていう意識の低さで職探し中。
そんな就職活動の傍らで、暇つぶしにはじめたprogateにハマってしまいました。(前職でも業務で簡単なマクロを組んだりして、元々プログラミングに興味はあった)
自分 「プログラミング結構面白いし、これ仕事にできたら楽しいかも!でも、この歳(29)から未経験で雇ってくれるところなんてないやろなあ。えーっと、あれ?求人見てたらアラサー未経験でも採用してるところ結構あるっぽいな。もしかして俺でもエンジニアになれる?」
前職(製造業)ではアラサー未経験など門前払いなので、そもそも異業種に転身するという頭がありませんでした。しかしそこは人手不足 & 新しい風が吹き込むIT業界、この歳からでの未経験採用も珍しくない模様。地元に帰ってきて「やりたい仕事がない」と悩む私に一筋の光が差し込んだような気がしました。
だいぶ端折りましたが、こんな感じのノリで、ITエンジニアを目指すための本格的な学習を開始することになりました。
12月(HTML, CSS, JavaScript, PHP基礎)
とりあえず、本格的に学習をはじめるにあたってロードマップ的なものが必要だと思い、転職成功者やプログラミングスクールのブログ記事を読み漁り、カリキュラムを作成。学習言語は地元関西で需要があり、Webサービスに広く使用されていて、尚且つ学習コストが高くないという理由でPHPを選択。目標は4か月後に自作のポートフォリオ(Webアプリ)を完成させ、就職活動をはじめること、と設定しました。(結果的には下記のカリキュラム通りには全くいきませんでした。素人が考えたものなので仕方ないですが。)
あと、学習方法は基本、書籍をベースとすることにしました。理由は、
- 書籍が一番体系的に学べそうだったから
- 分からないところは何度も読み直したいので、その際動画教材は不便に感じたから
です。
HTML, CSS, JavaScriptの基礎を速攻で終わらせ、練習に2~3本Webサイトの模写をやりました。その後、予定よりだいぶ早いですが、できそうだなと思ったため自分のポートフォリオサイトを作ってみました。このときにお問い合わせフォームを作りたかったので、PHPの基礎の勉強もついでにやってしまいました。
学習開始から3週間で作ったポートフォリオサイト
https://michi-programming.com/
ここまで学習をはじめてから3週間ほど、非常に順調で、「あれ、もしかして俺天才なんじゃね?w」と勘違いしてました。(もちろん、そうでないことはこの後すぐに分かります)
駆け足でここまで来たところで、次はどの教材で学習しようか悩んでいたところ、独学エンジニアという動画講座が大変評判がよいというのを聞きつけ、受講してみました。
・・・がここで問題発生。LinuxとDockerの環境構築がどれだけやってもうまくいかない。1週間ほとんどコードは書けず、ひたすら環境構築画面と向き合う日々。さすがにこれはヤバいと焦りはじめ、12月末ごろからプログラミングスクールの利用を検討し始めました。
※念のため言っておきますが、独学エンジニア自体は大変素晴らしいサービスだと思っています。ただ、当時の私ではサービスのレベルに達することができず、うまく活用できませんでした。
1月(Git, PHP応用、Laravel, ネットワーク基礎知識)
色々比較検討した結果、とあるプログラミングスクールに入会することに決めました。(後で書きますが、途中で辞めることになるので名前は伏せます)
スクールのカリキュラムは最初の1か月間はスクールの教材と課題をこなし、残り2か月で生徒同士の共同でアプリ開発をするというもの。入会して意気揚々とスクール生専用ページを開き、教材と課題を見て思った感想が、
「ん?教材も課題もボリューム少なくない?本当にれだけでエンジニアになれんの?」
正直、スクールの課題をこなしているだけでは到底エンジニアになれると思えなかったので、スクールはあくまで補助として使い、メインはこれまで通り独学で行うことを早々に決意しました。
学習内容のほうはGit, PHP応用(オブジェクト指向など)、Laravel, ネットワーク基礎知識などを書籍を中心に勉強。この頃から週1でQiita記事を書いたり、エンジニアが集まる勉強会などにも積極的に参加するようになりました。
一応、この時期にはLaravelを使ったシンプルなCRUDアプリ(掲示板機能的なもの)が作れるくらいにはなりました。
2月(SQL, Bootstrap, セキュリティの知識、フルスクラッチ開発)
Laravelの基礎機能は使えるようななったものの、「正直よく分からないけどなんとなく動いている」 感が満載でした。
なぜよく分からないのか?と考えた結果、データベース・SQLに対する知識のなさではないかと考え、一度体系的にSQLの勉強をやりました。
SQLを学んだ後、せっかくPHPとSQLが使えるのだから、これだけで何か作ってみたいと思い、フレームワークを使わないフルスクラッチ開発に挑戦しました。これがめちゃくちゃ大変で、最初は2週間くらいで作れるミニアプリを作ろうと思ったのですが、結果的に1か月もかかってしまいました。その分学んだことは多く、ネイティブ言語への理解、データベース、セキュリティ、プログラムを組むうえでの論理的思考力など、一般の未経験エンジニアがやらないところまで知れたのは大きな収穫でした。
フルスクラッチで開発した筋トレログアプリ 『My Workout』
https://pure-garden-14346.herokuapp.com/index.php
一方、スクールのほうは共同開発のフェーズに入っていましたが、他の受講生とレベルの差がついてしまい、自分の実装は終わっているのに他の受講生の担当箇所が終わっていないため待機しているという時間がほとんどになってしまいました。
3月(Linux, Docker, Git-flow, フレームワークでの開発)
3月上旬でスクールは退会することになりました。理由はさっき書いたように共同開発で待機しているだけの時間が増え、学習効率・スピードが独学>>>スクールの状態になってしまったからです。
3月中旬までは、デプロイまで含めて先ほどのフルスクラッチ開発に費やしました。
就活をはじめるにあたって、フルスクラッチだけではなくフレームワークを使用したポートフォリオも欲しかったので、すぐに次のアプリ開発に取り掛かることに。今までは割りと基礎技術を重点的に学習していたため、今回はモダン環境にもチャレンジしてみたいと思い、開発環境はDockerで構築、デプロイはAWSへすることを目標にしました。
ただし、DockerやAWSを採用したのはいいものの、知識がないので一からLinuxを含めたインフラ関係の勉強をし直すことに。これが大きな誤算で、もっと早い段階で勉強しておくべきでした。(DockerはGithubなどに公開されてるフリーのイメージを使ってお茶を濁すこともできたのですが、それだとポートフォリオに採用している意味がないと思い、結局書籍で体系的に勉強しました。)
あとは、スクールを辞めてしまい共同開発の経験が中途半端で終わってしまったので、個人開発ですがGit-flowを意識して、issueで要件定義
⇒featureブランチを切って開発する
⇒プルリクを出す
⇒mainブランチにマージする
という流れまで一人でやることにしました。
そんなこんなで時は流れ、あっという間に学習期間の期限としていた3月末に...。
4月~(就職活動開始)
結果として、3月末までにフレームワークを使ったポートフォリオは完成しませんでしたが、それでも就職活動をはじめることにしました。ポートフォリオが完成するまで就活を延期するという手もありましたが、下記の理由から予定通り始めることにしました。
- この4か月間の学習で、エンジニアの勉強には終わりがないと分かったこと
- 就職活動をしながらでもアプリ開発は続けられる
- 面接などでフィードバックを得て、それをポートフォリオに反映することも可能
特に自分の中で1番上の理由は大きかったです。エンジニア界隈ではよく言われることですが、4か月間勉強しただけでも身に染みて分かります。おそらくこの調子だとフレームワークのポートフォリオが完成しても、「まだまだあれもこれも勉強したい!」となって一生就職活動をはじめられなかった気がします笑
そういう意味でも、期限を切って就職活動を強制的に開始したのは良い判断だと思いたい。
そんな感じで、今は絶賛就職活動中です。
良い求人あったらご連絡ください!お待ちしております!!笑
4か月間独学で勉強してみて思うこと
※自分は一瞬だけスクールに通ったので完全独学とは言えないかもしれないですが、結果的にほとんどスクールのカリキュラムにはお世話にならなかったので「独学」ということにしています。
まず思うのが、独学でプログラミングを習得するのは本当に大変ということ。ITエンジニアの勉強といっても、マークアップ言語、フロントエンド、バックエンド、データベース、インフラ、ネットワーク知識、セキュリティなど、本当にたくさんの分野があります。その中から素人が自分の目指しているキャリアに沿った内容を迷いなく選択することはほぼ不可能と言っていいでしょう。
そういう意味では、最速でエンジニアになりたいと考える人は高いお金を払ってプログラミングスクールに行く価値はあると思います。大手のスクールであれば、カリキュラムはガッチリ固まっていますし、方向に迷った時もすぐに担当のメンターに相談できます。
一方で、独学のメリットは回り道できることだと思っています。例えば、サーバーサイドエンジニアを目指す場合、CSSの知識はほぼ要らないですし、ポートフォリオを作ることだけ考えれば、SQLやセキュリティ対策はすべてフレームワークがやってくれるので必要ありません。さらに言えば、私がやったフルスクラッチ開発など回り道の象徴とも言える行為です。Webアプリ開発でいえば、実際に現場に入ればフルスクラッチで開発することなどほとんどないと思います。
ただ、回り道のおかげで得た知識は貴重だと思っています。就職活動ではプラスに評価されないかもしれないですが、エンジニアになり数か月、あるいは数年たった時にどこかで役に立つのだろうなと思っています。まあ、私の目標はエンジニアになること自体ではなく、エンジニアとして活躍し、充実した人生を送ることなので。「とりあえず、なんでもいいから早くエンジニアになりたい!」と考えるのであれば、そうは思わなかったでしょう。
あとは、学習を続けるにあたって一緒に勉強する仲間やメンターの存在は必須かなと思います。毎日分からない事象と戦い続けるプログラミングの世界、一緒に戦える仲間を見つけるのは本当に重要です。
スクールを検討する方はメンターの質はもちろんですが、モチベーションの高い生徒が揃っているか、生徒同士のコミュニケーションができる場はあるかという点にも着目してみるといいと思います。
独学の方は、MENTAなどで個人的なメンターを探すか、積極的に勉強会などに参加してコミュニティを作るといいと思います。自分は素人ながら、現役のエンジニアさんが参加する勉強会などに積極的に参加していました。幸いなことに、みなさん温かく迎えてくださって、勉強のモチベーションが落ちかけた時も勉強会で繋がった仲間たちに支えられながらここまで来れたと思います。
使用した教材
最後に、私が今まで使用した教材を紹介してこの記事を締めたいと思います。
ここまで長々とお付き合いいただき、ありがとうございました!
書籍
- 1冊ですべて身につくHTML & CSSとWebデザイン入門講座
- ほんの一手間で劇的に変わるHTML & CSSとWebデザイン実践講座
- 確かな力が身につくJavaScript「超」入門 第2版
- 確かな力が身につくPHP「超」入門
- 図解即戦力 Amazon Web Servicesのしくみと技術がこれ1冊でしっかりわかる教科書
- 【改訂5版】図解でよくわかる ネットワークの重要用語解説
- PHPフレームワーク Laravel入門 第2版
- Web開発のためのMySQL超入門
- 体系的に学ぶ 安全なWebアプリケーションの作り方 第2版
- Bootstrap 5 フロントエンド開発の教科書
- 仕組みと使い方がわかる Docker&Kubernetesのきほんのきほん
- 新しいLinuxの教科書