エンジニアとして就職できた

あとで読む

最初に

自分のようにネガティブな側面を持っていても良い環境で働けるようになったので、同じような状況のいる人の参考になったり出来ると嬉しいです。

あと Qitta とかで未経験からエンジニア転職などの記事を見ると「ポートフォリオでテストコード書いて、push で CI/CD でテスト自動化してます」みたいなクオリティ高い物が多くて、それを読んで頑張らなきゃと思う部分もありますが、突き詰め過ぎて挫折しては意味がないので、エンジニア転職を考えている人にとっての 1 例として、参考になれると嬉しいです。

1 年 5 ヶ月くらい前に zenn でこんな投稿をした。

未経験でプログラミング出来るようになったけど、エンジニアになれそうにない。

新卒で入社した会社を 3 ヶ月で辞めてしまって、無職で落ち込んでいる時に書いた記事になる。

自分が働ける場所なんて、もうこの世界には残ってないのではと思うくらい凹んでいました。

そこからしばらく(1 年くらい)プログラミンを勉強して zenn・qiita 等で記事にまとめて投稿しながら無職でいた。

正社員になるまで何してたか振り返りながら、書こうと思う。

Python で 人気のオンライ商品購入するBot を作成する

大学で卒業製作する際に使用した Python を使って Bot を作り始める。最終的には使える物にならず、一旦技術力が付くまで保留にしてある。

JavaScript を触り始める

YouTube をダウンロードするアプリが欲しくて、良いのがなかったのと webアプリは関連知識がたくさん必要になると思って、まずはデスクトップアプリとしてフロントを HTML・CSS・JavaScript、バックエンドを Python で完結できる物を作ろうと思って挑戦した。 Electron に似たようなのが Python にあるという事で作り始めたが、結果的にデスクトップアプリとして配布までいけなかった。 配布先の環境で Python・Chrome を必要としたり前提条件が多すぎて自分が思うデスクトップアプリのパッケージをインストールして直ぐ使える所まで持っていけなかった。最初から Electron で作れば良かったなと今は思う。 そして、機能を沢山持たせたせいで、失敗した際の挙動や複数ダウンロードは何件まで出来る様にするか等の気に掛ける事が膨れ、作っていく内に把握するのが大変になっていった。 得る物もあって JavaScript を使って Python から値を受け取って、ダウンロード状況をプログレスバーで表示したり、ダウンロード自体を並列で行う事で同時ダウンロードでの速度を速くしたり今までより出来る事が増えた。

Zenn に勉強した事を投稿する

自分の勉強方法としてお気に入りなのは、まず動画から入る。これは動画の通りに書けば動くので挫折しにくい。写すだけなので認知負荷が少ない。次に書籍かチュートリアルを行う。この頃には書籍から入るよりは抵抗感が薄れていると思う。書籍を読む際も記事にまとめながら書けるとさらに理解度が上がるからおすすめ。最後に作りたい挙動でアプリに組み込む。ここまでいけると大体自由に機能を作れるようになっていると思う。

個人的に思う挫折しない流れ

動画でざっと把握する Udemy とかに良い講座があって写経とか出来ると最高>書籍>公式のチュートリアル>記事にまとめる>作りたいアプリ等に組み込む

上記の方法を行いながら次のアプリを作る準備をしていた。

React・Next.js・TypeScript を触る

JavaScript の構文をある程度使えるようになったので、次は流行ってるライブラリーを使おうと思った。それで React を選択した。理由は Vue は最初使いやすくて良いが、アプリの規模が大きくなるにつれて管理が難しくなってくると聞いたからである。 前回のデスクトップアプリの失敗が思い浮かんだので(素人が個人で作るアプリならそこまで大差ないと思うが)React を選択した。Facebook が開発しているのもいいなと思った。あと TypeScript との相性が良いというのも選択理由に入る。

React のチュートリアルを始めたのだが、OX ゲームを作る事になった。チュートリアルでは「web 開発したいのにゲームなんて思わずにやってみたら分かるので」というような事が書かれていたが、これは完全に無視するべきである。 全く初心者だとここから web で React をどう使用するのかイメージ出来ないのでおすすめしない。Udemy で React に入門した人のためのもっと React が楽しくなるステップアップコース完全版 をやるか Next.js のチュートリアルで React を触りましょう。React について深く学びたい場合は Udemy の講座をおすすめする。逆に Next.js のチュートリアルはとても分かり易かったのでおすすめ。チュートリアルを行った後は技術ブログを作りました。zenn に投稿してる記事を GitHub リポジトリで管理していたのでそれをビルド時に取得してページを作成するというシンプルな物になる。 作成した技術ブログ こちらの作り方を zenn に投稿したら 100 を超えるいいねが貰えたのがとても嬉しかったです。株式会社キカガクの創業者の方からも 引用リツイート をして頂いてとても自信が付いたのを覚えています。転職活動する際の自己 PR にも自分が作成したブログにこのような反応があった等話す事が出来たので、とても感謝しています。

アルバイトを探し始める

ほんとは大きいフレームワーク Django, Rails のような物を使用してログイン機能を持ったユーザに提供するサービスを作ってから、転職活動を行おうと思ってました。ただこれらを使いこなすにはデータベースの知識、設計方法、テスト方法等学ぶ必要があって、すぐには難しいと感じていました。しかし、ここまで来るのに 1 年近く経っており、今の技術力で雇ってくれる企業がないか探し始めました。もちろん未経験なのでアルバイトでないかと思い探しました。自分としては適性があるかどうかも知れるし開発がどのように行われているのか現場を見てみたいという気持ちもありました。雇う側もアルバイトなら正社員として雇うまでのハードルは上がらないと考え、そこでアルバイトしながら 1 年ほど自分の個人開発を続けられば良いと思いました。ポートフォリオとして作成した技術ブログ を載せて 3 通ほど履歴書を送ったのですが、スキルセットが足りないのか、経歴が褒められたものではないのでかで 2 つは書類で落とされてしまいました。その中で 1 通だけ独学歓迎と募集に書かれていた企業から面接の連絡がありました。 面談は全部で 3 回ありました。アルバイトにしては多いなと思いながら、毎回しっかり準備していきました。途中で中途採用なので 2 週間の有給インターンという形になるが問題ないかと連絡がありました。内容が若干変わる事はあったのですが、とにかくエンジニアを経験してみたかったので後先は考えずに面談を進める事にしました。最後は社長との 1 対 1 の面談まで行きました。それでなんとか 2 週間の有給インターンに参加する事ができました。 ※面談という物は面接だとここで学びました。

インターンに参加する

週に 3 日 、1 日 8 時間で 2 週間、計 6 日間のインターンを行った。 インターンでは実際の開発と同じようにタスクを降って頂いて、それをこなしていくものでした。

内容

  • Cloud Firestore に定期的保存されるログが 100 万件くらい溜まっているので、それを削除するスクリプトを書く

この作成した物を Cloud Functions に載せて定期的に回してログを削除してサーバに掛かる費用を抑えようという内容でした。

いきなり本番に対して操作は出来ないので、テスト環境を渡して頂きそこにテストデータと同じ階層のログを 2000 件くらい保存して、削除する事から始めてドキュメントとかを参考になんとかテスト環境のログを削除するスクリプト自体は書き上げる事ができました。

インターン自体はフルリモートで行われて、勤務時間は常時 zoom に接続しておくという状態でした。勤務終了 15 分前に時間を設けて頂き、エンジニアの方々と話す機会がありました。もしかするともう話す機会はないのかもしれないと思いフロントエンジニア、バックエンドエンジニア、QA エンジニア等の色々な分野の方々と話しました。エンジニア一筋の方が多いかと思っていたのですが、他の職種から転職された方々もいて、きっかけがあれば門は開かれているんだと思いました。

そこからコードレビューをして頂いて、おっけいをもらった時点で 2 週間のインターンは終了しました。 2 週間のインターンはとても楽しかったです。勝手に インターンシップ という無職になった中年のおっさんが Google のインターンに行くという大好きな映画があるんですけど、それをイメージしながら毎日を過ごしてました。

正社員になる

これは自分でも最初に応募した状況からは想定してなかった展開になりました。 2 週間のインターンが終わった段階で再び面談をする事になって、そこで正社員になるかこのまま終了するか(一応インターンをお代わりする選択肢もあったみたい)という選択肢になって、インターンが楽しかったので、そのまま週 5 で続ける事にしました。 しばらくはインターンで頂いたタスクをこなして、テスト環境では動作したけど 100 万件とかの大量のデータになると、見た事ないエラーが発生してかなり苦戦して1ヶ月くらいは同じタスクをこなしてました。そこから最初チームに参加して、サービスに直接関わる機能開発を一緒に行わせて頂いたのですが、自分のスキルセットが足りなくて全然役に立てなかったです。なので一旦 rails のチュートリアルを購入して、それに合わせてRSpec テストの書籍もこなす時間を取って頂きました。そこからサービスで使用される rails 等が読めるようになって今は一人で小さな機能修正等をこなしながら色々と学ばさせて頂いている状態です。前職の社会人歴を超えて、2 ヶ月も更新しているのでこの調子で出来るだけ長く息をしていたいなと思います。

正社員になってから git の操作が個人で開発するよりも複雑な操作を求められるので、こう言った独学で勉強していた際との違いや業務の中で学んだ事をどこかでまとめられたらなと思っています。個人での開発も頑張っていきたいです。最近は記事を読んだり、Udemy を少しづつこなすくらいしか出来ていないですが...

学習ロードマップ

内容は大きく前回とは変わらずサービスを作る際に決済機能は欲しいので、その前学習として Stripe を使用して今の Next.js ブログに寄付ページを作成する。それで会社のサービスで使われているような大きなフレームワークでログイン機能付きのサービスを作成して、そこでデータベース設計等を入門出来たら最高だなと思っています。会社のコードは読み放題なのでログイン部分、テスト、開発に関わる手法等参考にできたらと思います。

この辺りの記事とか読むとデータベースの設計する上で大事なポイントを解説してくれているので出来そうと思わせてくれる。

予定(ブログに stripeAPI を使って決済画面を作る) → 予定(Railsを使って決済機能付きの質問サイトを作成する) → 予定(数学を勉強し直したい) → 予定(Coursera アンドリュー先生の機械学習講座を受けたい:一度挫折してる)

現状

stripeのサンプルコードをTypeScript化しようとして奮闘している。stripeのライブラリには型が入ってるはずなのに、ライブラリが吐き出す値に型を当てる必要があったり、全然上手く当たらなくて疲れ切ってる。

文系から理系になりたい

今時、文系・理系を分けるのはナンセンスだと思うが、自分は難しい数式を使ってそれをコードに落として、課題を解決していくエンジニアに憧れるので数式が扱える人を尊敬している。理系の方々がそれに当てはまると思うので、自分もいつかなりたいと思う。今から大学に通うのは厳しそうなので、数学に関する資格を取って理系の大卒レベルの知識を有している事を証明できるようにして、その知識をエンジニアとして活かしていきたいと思う。

最後に

会社には拾って頂いてとても感謝しています。スピードは遅いですが、色々勉強を続けて、サービス開発に大きく貢献できるようなエンジニアになれたら最高だなと思います。

記事に関するコメント等は

🕊:Twitter 📺:Youtube 📸:Instagram 👨🏻‍💻:Github 😥:Stackoverflow

でも受け付けています。どこかにはいます。