github octcat icon
twitter bird icon
rss icon

営業からエンジニアになるためにやったこと記録

2022-10-16

trail hike

Photo Credit: Simon English

「未経験 エンジニア」で検索すると大量の検索結果がヒットしますが、どの情報が信頼できてどれが信頼できないのか見極める力も最初はないので、自分が勉強を始めようとした際にはだいぶこまった記憶があります。

毎年出されるDeveloper Roadmap (日本語訳も有志の方々が作ってくれていたりします)をみても、範囲が膨大&順番に進めても全体像が見えず、勉強を始めたての頃は何からどう手をつけていいのか分からなくなってしまっていました。

今開発者になってしばらく経ってから考えると、確かにどの要素もそれが何を指していて、なんのためにあるものなのかぐらいは知っておくべきではあるのですが、知識量には濃淡があるのが普通です。

例えば、Backend のパートには Authentication のパートがありますが、自力で認証サーバーを作成することができるレベルの知識はなくても業務アプリケーションを作成することはできます。もちろん認証サーバーを提供するサービス事業者でアプリケーションのコア部分の開発をするのであればそう言った知識も必須になるかと思うのですが、なくてもできる仕事はあるし、これら全ての要素を深く理解しようとすると 10 年単位で時間を要することになってしまいます。

ただ、初心者にとって辛いのは、「どのレベルまで個々の知識を持っていたら良いのか検討もつかない」ことかと思っており、残念ながらここは一定経験を積んだりしていくしかない部分もあります。

経験を積む段階に入る前に、あまり興味がない分野の技術を深掘りしすぎると難しすぎてつまらなくなり勉強が続かず、かといって必須部分の知識が抜けているとスタートラインに立てず経験を積むこともできません。個々の知識のレベル感を詳細に示すことは難しいので、今回はあくまでも異業種からエンジニアに転向した際の一例として参考にして頂けたら幸いです。

勉強を進める中で参考にさせていただいた記事や、私自身他の人の体験に勇気づけられた部分が沢山あったので、自分の経験も少しは還元できたらと思い自分の体験もシェアすることにしました。


*先日エンジニアになって初めての評価面談が完了し、少なくともお荷物にはなっていないということが確認できたのでこのタイミングで記事を公開することにしました。内容自体は半年前ぐらいに忘れないうちにと書き溜めていたのですが。。。

自分について

ざっくりエンジニアになる前の自分がどんな人だったか記載しておきます。

  • プログラミングの勉強を始めたタイミングは 25 歳の冬
  • 文系学部卒
  • スタートアップで営業職として勤務
  • 英語力は日常会話〜テーマによってはビジネスレベルも可ぐらい
  • プログラミング経験は勉強開始時点で Progate を触ったことがあり、VBA でマクロを組んでたことがあるぐらい

決してすぐエンジニアに転向できる状態ではありませんでした。

現在に至るまでの経緯は後ほど詳細に記述しますが、最終的に私はエンジニアになるために転職したのではなく、社内転籍でエンジニアになりました。具体的には、営業 → 社内プロダクトとビジネスを繋ぐためのエンジニア(所属は Biz 組織のまま) → バックエンドエンジニア(所属も Tech 組織に移動)という経緯を辿り、現在は社内アプリケーションの開発に主にバックエンドエンジニアとして携わっています。これまでは主に TypeScript で開発を行なっていましたが、10 月から Rust での開発にも挑戦し始めたところでキャッチアップに必死です。

対象読者

この記事では、よくある「未経験から3ヶ月でエンジニアに!」のような内容は紹介していません。強いていうなら、「未経験から 1 年ぐらいでエンジニアに!」というような内容です。

Lilian さんの note「【転職エントリ】Google に入社します」に圧倒されて、全然参考にならなかった人でも十分参考になるレベル感かと思います。逆に、Lilian さんの note のペースでいける。という方にとっては、私のペース感は遅すぎて全然合わないかと思います。(にしても Lilian さんのペースは凄すぎる。。。紹介して下さっていた本は一通り買って読みましたが、読むことはできてもこのペースで中身を完全に理解して面接での質問にも答えられるレベルには到底自分は持っていけませんでした。。。)

また、私は「一定長期間(5-10 年)かけてキャリアを伸ばしていく前提でエンジニアになりたい」と考えて以下の行動を取ってきたので、とにかく最短でとにかく最短でエンジニアの職をゲットしたいという場合にはもっと早く職をゲットすることができる方法があるかもしれません。また、私自身「一定期間(5-10 年)かけてキャリアを伸ばしたエンジニア」ではまだないので、答え合わせはできていないことご了承下さい。

営業からエンジニアになるためにとった戦略

全体像

全体感としてとにかく「基礎体力をつける」ことを最も重要視して取り組んで来ました。

未経験から Web エンジニアになるには

  • Docker
  • AWS
  • Go / Ruby
  • React
  • etc

といった要素を取り込んで”モダンなポートフォリオ”を作成するのが良い。というような発信を見て私も最初何もわからない頃は「そうなのかー」と思っていました。もちろん1つ1つの要素を切り取るとモダンですし、実際に企業でこういった要素技術を利用していることも多いでしょう。しかし、私は面倒な部分を隠蔽してくれる便利技術の裏側で動いている基礎から理解したかったので、

  • ネットワーク
  • DB
  • データ構造
  • ブラウザ
  • etc

といった技術の勉強をすることに重きを置いて学習を進めてきました。

なぜこの戦略を取ることにしたのか

私は 10 年で一定力のあるエンジニアになりたいと考えていました。なぜ 10 年という時間軸に定量的な明確な理由はないのですが、周りのエンジニアとしてすごいなと思う人は、何だかんだ 10 年ぐらいの時間をエンジニアリングに投資してきているとみえる人が多かったからです。もちろん中には、3-5 年ぐらいでぶっちぎる人もいるのですが、その人は本当に天才的に頭がいいと思っていた人だったので参考にしませんでした。

10 年という期間で考えた際に、目先の年収やステータス、開発に利用するフレームワークや言語などはどうでも良く、とにかく強いエンジニアに揉まれることができる環境に入りつつ、今後数年の成長にレバレッジを大きくかけることができる状態になることが重要でした。

そのため、AWS / Docker / Go / TypeScript(React)などで転職活動のためのキラキラ?ポートフォリオを作りあげるということはせずに、土台となっている部分の勉強にフォーカスし、これらの技術スタックやより新しい技術スタックを使いこなす必要が生じた場合にもできるだけ早くキャッチアップが可能な状態を作り上げていくことを目指しました。

やはり基礎ができていることが大事で、数学でいったら一次方程式がわからない状態で二次方程式を解こうとしても解けないし、二次方程式が解けない状態で微分積分を理解しようとしても理解できません。微分積分の公式、パターンを丸暗記して対応していくことで微分積分の一部の問題は解けるようになるかもしれませんが、その基礎となる単元の理解が疎かだと応用が効かないし、新しい概念を理解しようとした際にスピードが出ません。

コンピューターでも、基礎の上に乗ってきている最新の技術は基礎のわかりづらい部分、面倒臭い部分がいい感じにオブラートで包んで、扱いやすくしたものが多いので、一見時間がかかるように見えますがこの作戦が最も効率が良い作戦である。と自分は判断しました。

結果的に面接で聞かれた質問や、コーディング試験で問われた問題も基礎を問うものがほとんどであり、言語やフレームワーク、コンテナ、クラウド技術などの詳細については聞かれることはありませんでした。これは受けるポジションのレベルにもよるとは思うのですが、未経験からジュニアポジションで入る分には必要なさそうと言えるでしょう。

やったこと:全体像

勉強開始ー5ヶ月目

  • 気合を入れるために 20 万で PC 購入
  • JavaScript & TypeScript 触る
  • 基本情報技術者試験の勉強&資格取得
  • Udemy の適当な講座でアプリケーションを作った

6 ヶ月目-8 ヶ月目

  • アプリケーションをいくつか1から作ってみた
  • University of the People(アメリカのオンライン大学)の Computer Science コースに入学

9 ヶ月目-12 ヶ月目

  • 仕事の中で、効率化できそうな部分を開発していく
  • 応用情報技術者の勉強&資格取得
  • 個人ブログ作成

13 ヶ月目-16 ヶ月目

  • エンジニア転向に向けて動く
  • ネットワークスペシャリスト資格取得

やったこと:勉強編

基本的には所々同時並行しているコンテンツはあれど、上から順番に取り組んで行っておりました。勉強系コンテンツと、エンジニア転向するためにとった行動は順番的には上の全体像に記載した通りでしたが、以下ではわかりやすくするために勉強系を先に記載し、取った行動は最後にまとめて記載できたらと思います。

Progate

これは今回勉強を開始する前の話なのですが、Progate の Python や JavaScript のコースを受講したことがありました。しかし、当時はこれで何ができるようになるのか全然イメージが湧かず、コースを1周して終わりになっていました。しかし、なんとなく抵抗感がなくなっていた&コードを動かしてみたことがあったのは意外と良かったのかなと思っています。

気合を入れるために PC 購入

一番大事です。自分は意志が弱いタイプ&テンションが上がることが大事とわかっていたので、かっこいいと思える PC を書いましょう。すでに強い PC を持っている方はディスプレイやキーボードを憧れのモデルに買い換えるのもありです。

JavaScript / TypeScript 勉強

今から勉強するなら TypeScript の勉強だけで OK で、JavaScript の勉強は不要かと自分も思っていたのですが、どうしても TypeScript のドキュメントやネット上の記事は一定の JavaScript の知識をベースに書かれたものが多いので、まずは JavaScript から勉強することをお勧めします。

とは言っても、JavaScript の勉強自体に時間を使いすぎる必要もないと思うので早めに TypeScript の勉強に移行するのがお勧めです。使った教材を順番に列挙していきます。

JavaScript Primer

JavaScript Primer - 迷わないための入門書 #jsprimer

一通り読み、JS の全体感を掴みます。所々にブラウザ上でコードを実行できる環境が用意されているので動かしてみます。

理解が難しいものに出会った際には、自分で既に書かれているコードを変えて動かしてみつつ理解していくのがお勧めです。初めてプログラミング言語に触れる方は特に、よくわからず詰まる部分もあるとは思うのですが、動かしたり繰り返し読んだりしてもどうしてもわからない概念が登場することもあると思います。その際には思い切ってスキップしましょう。これから勉強を進めるうちに理解できることもあるだろうし、別の概念に触れてから戻ってくるとわかることもあると思います。そもそも、理解しないと作ることができるものに出会った際に、強制的に理解できるまで頑張る必要が出るのでその時まで取っておいても問題ありません。

私も最初はクラスが全然わからず飛ばしましたが、後ほどオブジェクト指向でなぜ作るのかを読んでなんとなく雰囲気がわかるようになり、Java を大学の授業で学んでやっとこ理解できました。

React Tutorial

チュートリアル:React の導入 - React

TypeScript の勉強をする前に、React tutorial をやって五目並べアプリみたいなものを作りました。

JavaScript の後にそのまま TypeScript の勉強をしても良かったのですが、ひたすら言語仕様を読んでいく勉強を 2 回繰り返すと飽きそうだったため、何か動くものを作る感覚が掴めた方がいいと思い React tutorial をやりました。

CSS はチュートリアルが提供してくれていたので、この段階ではほぼ何も考えずに、なんとなく React の雰囲気が理解できれば五目並べを完成させることができて嬉しかったです。

TypeScript Tutorial

TypeScript Tutorial

JS Primer と同じノリで通しで読みつつ、所々手を動かしてみました。

基本情報技術者試験

JS や TS の勉強と並行して基本情報技術者試験を受けました。

キタミ式イラスト IT 塾 基本情報技術者をメインに学習し、試験直前に基本情報技術者 合格教本基本情報技術者試験ドットコムで過去問を解きました。

ネット上だと意味がないと言われていることもある試験ですが、自分は超重要だと思っていて、技術者として最低限知っておくべき基礎が詰まっているいい試験だと思いました。配列やオブジェクトを変数に入れても、メモリへの参照が変数に入るだけで実態は同じ。と言われた際にメモリが何か?を一切わからないと理解が辛いですが、メモリがわかっていればスッと理解できる概念かと思います。こういったことがこれまで学習する上でたくさんありました。

カレンダーアプリを作ってみる

ここまでを完璧に理解していたら、パフォーマンスなどの非機能要件はおいておいて、作りたいものは頑張って調べつつなんとなく作ることができるはずです。

それにしても、最初に作るアプリはどんなものがレベル的にちょうどいいのか、当時の自分はあまり想像ができていなったので以下の記事を参考にカレンダーアプリを作ってみることにしました。

2020 年に Web フロントエンドを勉強する人が作るべきたったひとつのアプリ - Qiita

ここで作ったカレンダーアプリは、データの永続化は行なっていないし、any はあるしでひどいものでしたが、アプリを作るとはこういうことか。がなんとなくわかって良かったです。

後一番は何かを作ることができた。という成功体験を得ることができたのが大きかったです。

また、TypeScript の文法に慣れつつ、ループをどう回すか、条件分岐をどう使うかといったプログラミングの基礎の基礎が肌に馴染んできたのが良かったです。

使った技術は

  • TypeScript
  • React
  • Material UI

でした。

CSS の理解

これまで、CSS はまともに触ったことがなかったので調べつつ雰囲気で書き出しました。

設計論やレスポンシブ対応などはいったん全部置いておいて、とにかくスタイルが希望通り当たることを重視しました。

その中で、Flexbox を使いこなす必要があるとわかったのでカエルのゲームなどをやって動きを理解していきました。

Flexbox Froggy

Git と GitHub の理解

せっかく開発するならば、Git で管理して GitHub にホストしてみよう。ということで、Udemy のコースを一つ買って全体をさらい、わからないときは調べつつ使い出しました。

初めてのアプリ制作ということもあり、自分で行った変更を戻せなくなってしまうことは多々ありました。そんなとき、Git でバージョン管理していた恩恵に預かることができて良かったです。

devtool を雰囲気で使う

Google カレンダーの UI を簡易的に再現したかったのですが、最初はそう HTML を組み立てたら希望通りの UI になるのかわかりませんでした。そのため devtool をいじって Google カレンダーを構成している HTML をみたり、あたっている CSS をみたりしました。

Heroku にデプロイ

せっかく作ったからにはデプロイしたく、無料でかつ簡単に使える Heroku にデプロイしました。

アプリその2を作ってみる

カレンダーアプリを作ったあとは、次のアプリとして引越し管理アプリを作ってみました。引越しをする際に必要になる事柄をいい感じにまとめてくれる引越しに特化した TODO アプリのようなものです。

使った技術は以下です。

  • Next.js
  • Vercel
  • Firestore
  • Redux
  • Storybook
  • Material UI

今回は Firestore を活用してデータの永続化も行いました。それを通して、非同期処理の概念と書き方も掴みました。

また、Jest を用いてユニットテストも書いてみました。

デプロイは Vercel に行なっています。

コンピューターサイエンスが学べる大学に入学

基礎体力基礎体力言っていますが、一定強制的にコンピューターサイエンスの全体を学びたかったのでアメリカのオンライン大学である、University of the People の Computer Science Degree に申し込み学習を開始しました。

詳細はUniversity of the People に通い出して 1 年にまとめました。

応用情報技術者

春に基本情報技術者試験を受けたので、秋に応用情報技術者試験も設けました。勉強方法は基本情報技術者試験同様です。

ブログ作成

自作ブログってなんだかかっこいいというのと、実績としてアピールできるものが欲しかったので個人ブログを立ち上げました。

ただ Zenn や Qiita でアウトプットするのではつまらないので、Gatsby でマークダウンから静的 HTML を生成するブログサイトを作成し、さくら VPS でサーバーを借り、お名前.com でドメインを取って構築しました。

お名前.com はほぼ迷惑メールみたいなメールを大量に送りつけてくるので違うドメイン管理サービスを利用すれば良かったと後悔していますが、マネージドではないレンタルサーバーにデプロイして、SSL 証明書を取得して、ファイヤウォールを設定して、サーバーに入って設定ファイルをいじって etc といった経験ができたのはとても良かったです。

この際に、GitHub Actions を用いての自動デプロイも構築しました。

詳細は以下の記事を見ていただければと思います。

ネットワークスペシャリスト

ネットワークスペシャリストはエンジニアに転向してから転向してからとった資格ですが、応用情報技術者の次のステップということでネットワークスペシャリストを受験しました。詳細は #夏からネットワークスペシャリストにまとめてあるので、興味がある方は目を通して見てください。

その他読んだ本など

その他いろいろな本を読んだりしましたが、どのタイミングで読んだか忘れつつあるので箇条書きで思いついたものをあげておきます。

やったこと:行動編

仕事の中で、効率化できそうな部分を開発していく

今回エンジニアに転向するにあたって鍵になったパートでした。これまた鶏卵問題なのですが、エンジニア組織に入り込もうと思うと求人票を探しても、「未経験可」を謳っているまともな組織はほとんどなく、あってもかなり貴重か怪しい求人ばかりです。

今では新卒でさえ完全な未経験を取る自社開発企業が減っているので、中途なら尚更です。これからエンジニアになりたいにも関わらず、エンジニアの経験がないからなることができない。というどうしようもない状況を解決するためにこの経験が役に立ったわけです。

私は社内でエンジニアになりたい旨を相談していたのですが、社内のエンジニア組織で働くにはこの時点ではまだ実力が足りていませんでした。

しかし、データの取り回しは最低限できそう。移り変わるビジネス環境に社内プロダクトの開発だけでは追いつかない部分もある。痒いところをいい感じにしてくれる人がいると助かる。ということで、そういう仕事やってみる?という話になり、ビジネス組織の中にポジションを新設していただき、そこで開発の仕事をすることができることになりました。

この組織では、GAS を用いて業務を効率化したり、PDF 操作スクリプトを Colab で書いたり、モニタリングに必要なダッシュボードを作成したりといったビジネス上あると非常に助かるがまだないもので自分が作成可能なものを色々と作成していきました。チームでの開発というより個人での開発がメインではありましたが、エンジニアとしての業務経験をスタートさせることができた&社内のデータ構造、プロダクト、オペレーションに詳しくなることができました。他社の面接を受けさせて頂いた際にも、この経験を評価して頂けることも多かったです。

エンジニア転向に向けて動く

開発の仕事を始めることはできていたのですが、チームでの開発でフィードバックをもらいながら、できる人の技術を盗んでいった方が成長が早いと思っていたので、チーム開発を行うことができる環境に異動したいと考えていました。一番は社内でのエンジニア転向をしたかったのですが、当時の実力では厳しそうだったので一旦諦め、外部の求人に応募しました。

HP から応募した2社はどちらも書類が通りませんでした。たまたまかもしれませんが、一定の実績がないと厳しいケースも多いのでしょう。転職媒体経由でご連絡を頂いた企業様で面白そうな会社さんとカジュアル面談を行い、そのうち4社と面接を行いました。業界は様々、従業員数 20-200 人程度、いづれも自社サービスを開発している企業様で、結果としては 3/4 社からエンジニアポジションでオファーを頂くことができました。面接で聞かれた質問で分からなかったこと、理解が曖昧だと気づくことができたことについては面談後すぐメモをしておき、当日のうちに詳細を調べて理解し、面談のお礼メールに自分の理解をまとめて記載しておいたりしました。一定ポテンシャル採用の側面もあることはわかっていたので、学習モチベーションがあること、すぐ行動できることは評価になると思ったためです。自分としても知識を拡充することができたし、多少なりともいい評価に繋がったはず?と思うのでやってよかったかなと思っています。ビジネスの感覚と開発者としての伸び代を評価して頂きオファーを頂けたのですが、そもそも開発者として経験が多少なりともあったからこそ、評価の土俵に上がることができていました。やはり未経験からエンジニア転向するにあたっては、どうやって最初のエンジニアとしての経験を積むかが大事になりそうです。

一通り面談が終わりオファーを頂いたタイミングがちょうど社内で新規プロダクトを立ち上げている最中であり、そのプロダクトは私が突貫工事で作っていたプロダクトをリプレイス&拡張するものでした。開発言語も私が使っていた TypeScript であったこと、ドメイン知識が深い人がまだチームにいなかったことなどが偶然が重なり、最終的に当初の希望通り社内異動ができることになりました。そのため、面接をして頂いた会社様には貴重な採用リソースを使って採用して頂いたのに申し訳ない限りでした。。。

終わりに

長々と自分の話を書きましたが、少しでも参考になる方がいれば幸いです。もし疑問点、不明点、相談等ありましたら、Twitter などから DM 頂ければと思います。私で答えられる範囲で回答させて頂きます。自分自身、身近なエンジニアの方や Twitter で勝手にフォローしていたエンジニアの方などに相談させて頂き、たくさんフォローして頂いたので、少しでも還元できたらと思っています。