コンサルから(グローバル)エンジニアにキャリアチェンジしました。

コンサルからソフトウェアエンジニア

コンサル、Webサービス立ち上げを経て、2019年9月からエンジニアになりました。
この記事では、なぜエンジニアになるのか、エンジニアになるためにしたことをまとめたいと思います。

プログラミングブートキャンプって何?という方にも参考になる記事となっています。

なぜソフトウェアエンジニアに?

前職時代

エンジニアになる前は日系の総合コンサルティングファームに新卒で入社しました。そこでは製造業向けの経営基幹システム導入や業務改革などに携わり、アメリカ駐在や海外展開プロジェクトといったグローバルな経験を積むことができました。

その中で、日本企業の組織のグローバル化の困難さ、つまり多様な人が働く組織づくりの難しさに直面し、もともと自分のサービスを作ってみたいと考えていたので、仕事をやめ2018年5月からRuby on Railsを学び始めました。

新卒入社前に基本情報技術者の資格を取得していたり、ABAPと呼ばれる特殊な言語ではあるものの、仕事でコードを読む習慣はあったので、Ruby on Railsの習得自体はそこまで難しくはありませんでした。

半年ほどサービスのビジネスモデル構築、開発、マーケティングなどをしてみて、ビジネス拡大の目処が立たなかっこと、家族の都合で東京を離れたこと等を踏まえ、キャリアを考え直し始めました。

ソフトウェアエンジニア業界を考えてみた

コンサル(システム導入)時代のエンジニアに対するイメージはいわゆる上流工程(戦略策定、要件定義、設計)が高付加価値でエンジニアは下流工程(開発、テスト、運用)を担当し単価が下がるというイメージでした。

今後もそうなのかと考えたときに、Web業界はそうではなくなってきていることを知りました。

つまり、今後エンジニアがより戦略や要件定義を担当し、そのままコードを書くようになり、コードを理解していない管理だけするマネージャーやソフトウェアの開発手法を理解していないマネージャーはエンジニアと様々なプロジェクト管理ツールによって淘汰されていく。コード、システム開発のベストプラクティスを理解した人がサービスの設計から開発まで全てを担うことになる、そしてそのような企業が勝ち残っていくと考えました。

実際メルカリの新卒PM職ではプログラミングを研修の1つに取り入れています。(リンク

最近の7pay事件のようにいわゆるSIer企業に発注し、仕様に基づき実装するだけの仕事やその発注側の管理者としての仕事は技術への理解不足や運用スピードの遅れにより今後ビジネスの競争に勝てなくなり、減っていくことが想像できました。

そこで、また将来自分でサービスを作るためにも、コンサルの経験を生かしつつ、技術を理解したプロダクトの企画・設計から開発、運用までをみれるプロダクトマネージャとしての仕事と、実際にモノを作るエンジニアとしての仕事の可能性を探し始めました。

特にソフトウェアエンジニアは以下の私の欲求にもマッチしていて、仕事としてエンジニアになる方法を探し始めました。

1. プロダクト作りがしたい。
2. グローバルな環境で仕事をしたい。
3. 常に新しいことに挑戦したい。

なぜエンジニアがグローバルにつながる?
コンサル時代アメリカで仕事していたときに、アメリカでアメリカ人を対象にコンサルをするハードルの高さ(高いコミュニケーション力とアメリカ特有の専門知識)に直面しました。

エンジニアであればコミュニケーション力や国特有の知識を共通化された技術力でカバーすれば自分(生まれも育ちも日本)でもアメリカでやっていけると考えています。

エンジニアになるための準備

特定の言語のコードの書き方を学ぶのでなく、プロダクトづくり自体を学べ、グローバルなチーム(英語)で自分の時間全てを没頭できるような環境を探していた時にCode Chrysalis(コードクリサリス)*のことを思い出しました。

Code Chrysalisは12週間でフルスタックエンジニアとなるためのシリコンバレー式コーディングブートキャンプ。

Code Chrysalisは一度自分のサービスの立ち上げのためにエンジニアを探していた時にDemoDayと呼ばれる卒業生の発表会に参加したことがあり、グローバルな生徒、発表されていたプロダクトのレベルの高さをみていたことがありました。

直接アメリカに行くことも考えていましたが、アメリカの同様のサービスと比較して安価なことや、日本におけるグローバルなエンジニアコミュニティにも興味があったこと、しばらくは日本を拠点にしたいと思っていたことより、Code Chrysalisへの入学を決めました。

Code Chrysalisへの入学試験

Code Chrysalisに入学するためには2つの試験(もちろん英語)を通る必要があります。

  1. コーディング試験
  2. コーディング面接

2019年の1月11日に試験勉強を始め、JavaScriptとは何かというところから、基本的な文法を勉強し始めました。

コーディング試験自体は1週間でパスすることができ、オンラインでの面接を1月29日に受けましたが、途中の問題を解くのに時間がかかってしまい、再度持ち越しとなりました。結果的に翌週の2月4日に再度面接を受け、合格することができました。

面接に合格するまでに、Callback Function, Higher Order Function, Recursionといったことを学びました。尚、勉強法はCode Chrysalisがまとめてくれている(リンク)ので興味があれば参考にしてください。

※前述の通り私は前職の就職時(2013年)に基本情報技術者の資格を取得していたのと、Ruby on Railsの半年独学の経験がありました。面接の準備にかかる時間は人それぞれですが、目安としてフルタイムで1ヶ月学習らしいです。

入学(2019年4月)までの準備

試験に合格すればそれで入学まで何もしなくていいということはなく、その間もPrecourseという事前課題が出たり、定期的に講師との面談があったりします。

この期間では、GitHubを使いながら、基本的なHTML、CSS、JavsScriptを学びました。ここまでで基本的なJavaScriptの文法はES6含め、覚えきっておくという感じでした。

課題の1つにEloquent JavaScriptという書籍(Web版*無料)を読む必要があるのですが、英語にそれなりに自信があってもこの本には非常に手こずりました。
とはいえ、ここで英語(でのIT用語)に慣れておかないと授業が始まったらついていけなくなるという思いの元、とにかくエンジニアとしての知識と同時に英単語の学習にも力を入れておく必要がありました。

勉強に疲れた時はYouTubeを見ていました。オススメは、Fun Fun Functionです。

3ヶ月のイマーシブプログラム参加(2019年4月~6月)

私のコースは10人でアメリカ、ヨーロッパ、アジアそれぞれから集まってきているクラスでした。クラスメートの多くはすでに日本に住んでいる人でしたが、このクラスのために日本に来た人もいました。

※クラスメートの紹介はこちら

※カリキュラムはこちら

学ぶ内容はカリキュラムを参考にしていただければと思いますが、3ヶ月の内容を簡単にいうと、JavaScriptをメインにフルスタック(フロントはReactやVue、バックエンドはNodeで開発してHerokuやAWSをPaaSとして使うイメージ)な技術を学びつつ、チーム開発(ペアプロ、TDD 、Git、CI)やプレゼンテーションといったソフトスキルも身につけることに注力したカリキュラムになっています。

楽天やPivotalといった会社でのプレゼン、JavaScript以外の言語の学習期間、最終発表ではリクルーターを含めた100名を越すオーディエンスの中での発表などといったイベントなどもありました。

カリキュラムの後半には、仕事探しのためのサポートとして、コーディング面接対策英文履歴書の添削転職候補先へのアプローチ方法についてやテックコミュニティの紹介なども充実しています。

コース期間中は基本的にペアプログラミングで課題を2人1組で解いていき、いくつかプロジェクト形式で3、4人のチームで1週間から最長3週間をかけてプロダクトを作ります。

最後にプレゼンをするプロダクト開発の時にはユーザーストーリーの作成から、使うテクノロジーの検討必要最低限の機能(MVP)の定義とスケジュール作成といったプロダクト寄りの検討から、スケジュールや実装の難易度に合わせて、個人で責任範囲を決めて実装するのか、ペアプロやモブプロをするのか、レビューはどうするのかといったことをチームで0から検討していくプロダクト開発の方法についても話し合いながら進めていく必要がありました。

私のチームが作ったサービスのリポジトリはこちら(公開は取りやめています。)
姿勢検出AI(tensorflow.js) を使ったダンス採点サービス

これらの経験は、単純に「コードを書く」ということではなく、「誰のため、何のためにプロダクトを作るのか」という定義や、「チームとして成果を最大化する開発手法、技術は何か」を自ら考え行動し、リーダーとなるための教育としても機能しました。

また、毎日知らないことを英語でインプット&アウトプットすることは英語圏で生活したことがある私にもやはり難しく、そこをサポートするコミュニケーションクラスも週に一度あり、プレゼンやディベートの指導も非常に助かりました。

仕事探しと面接

卒業後の仕事探しには、主に以下のサービスを使いました。
Indeed: https://jp.indeed.com
LinkedIn: https://www.linkedin.com
Wantedly: https://www.wantedly.com
AngelList: https://angel.co/jobs

学校の方針としても、また(グローバルな)ソフトウェアエンジニア業界の傾向としても斡旋会社を使わないで職探しをすることが一般的となっているようです。
Code Chrysalisという学校の特性をリクルーターが理解しづらいことや、自分の魅力を伝えるのを他人に任せるということを避けるためにも、会社へのファーストコンタクトや興味のある会社と繋がるためにメール(カバーレター)や自己紹介の練習を学校がサポートしてくれます。

実際にミートアップで会った人経由で面接に行くようなケースもあり、特にグローバルなテックミートアップは東京でもまだ数は限られているので、何度かミートアップに参加すると顔見知りが増えることになります。

コーディング試験対策

コーディング試験対策として、Code Chrysalisでは毎週2回コーディングの問題を解く課題があり、それをやっていました。

それ以外には、LeetCodeの問題(初級〜中級)を解いていました。

コーディング面接対策

コーディング面接対策も学校であり、講師が課題を口頭で伝えそれに対しホワイトボードを使って解くというのを何度か行いました。

進め方としては、問題の内容の確認、解決策として含めるべきもの、含めなくていいものの認識合わせ、全体像のラフスケッチ(構造化、pseudocode)、コードの記述という流れが一般的のようです。

個人的にはホワイトボードを使って人と認識合わせをしていくというのは前職コンサルで日常的に対応していたことなので、ここで問題になることはなかったです。

プログラミングが得意な人は逆に、最初からコードを詳細に書いてしまって詰まってしまったり、詳細化しすぎて時間がかかりすぎてしまったりということがあるようなので、最初から詳細に入るのではなく、まずは全体像を描くという点に注意すべきだと感じました。

仕事探しの結果

今回、仕事に応募してみて、だいたい40社に応募し、30社から書類落ちもしくは返信なしという形で、残りの10社のうち1次面接で落ちるのが5社程度、それ以外は最終まで残る(もしくは条件が合わず途中で辞退)という形でした。

そして結果的に、訪日インバウンド旅行のサービスを提供している日本の会社に入社することになりました。

これは自分が作りたいと思うサービスや、会社のビジョン、そこで働く人の想いに合致したこと、また社内でのエンジニアの立ち位置と技術スタックから判断したためで、基本的には英語の環境をメインに仕事を探していました。

Code Chrysalisに入るまで知らなかった事実として、日本でもグローバルなスタートアップ(とそのコミュニティ)は存在し、特に開発チームは日本人がいないという会社もそれなりにあり、そこには驚き、また嬉しい気持ちがありました。

自分としても多様性のある職場作りには興味があるので、今の会社でもより多様性のある組織の構築に携わっていきたいと考えています。

また今回色々な会社に応募してみて、プログラミング歴が約1年という中で、色々な意見を応募した会社からフィードバックされました。

特に日本企業で多かったのは、「(ほぼ)30歳という年でエンジニアになるのは大変だし、社内で若手(20代前半)と一緒に仕事をするのは大丈夫か」という確認です。

この質問はやはり日本の組織は難しいなと感じる場面で、「年齢と職位がある程度一致している」会社には採用されにくいし、こちらとしても働きたくないと思ってしまう大きな要因となりました。(もちろん年齢が上のジュニアエンジニアを雇っても使いづらいというのは理解しています。)

特に欧米系の人たちは履歴書や面接においても年齢(や性別)を伝えることをしないので、何歳だからこのポジション、何歳だからこの仕事に適任という考えはなく、あくまで個の能力を見て判断という形になります。

日本の組織には一体感や責任感、品質へのこだわりなど独自の強みがある一方で、この人材不足と変化の激しいビジネス環境の中で多様な人を受け入れつつも強みを残すための組織づくりの必要性はこれからますます重要性を増しそうです。

東京のグローバルテックコミュニティの紹介

最後に私が参加したミートアップも紹介しておこうと思います。今後日本にいながら英語で仕事をしたいという人のネットワークの参考になれば幸いです。

Code Chrysalis: https://www.meetup.com/CodeChrysalis/
DevJapan: https://www.meetup.com/devjapan/
Mercari Dev Meetups: https://www.meetup.com/MercariDev/
ReactJS Tokyo: https://www.meetup.com/ReactJS-Tokyo/
Tokyo Tech Startups: https://www.meetup.com/StartupTokyo/
Tokyo Tech Meetup: https://www.meetup.com/tokyotechmeetup/
Le Wagon Tokyo – Coding Bootcamp: https://www.meetup.com/Le-Wagon-Tokyo-Coding-Station/

最後に

30才から未経験で(かつ英語の環境で)エンジニアになるというのは、全然可能でした。

ただしもちろん給料が下がったり、チームリードからチームメンバーに職務が下がるなど我慢しなければならない点もあります。

それを踏まえても、私としてこの経験は、自分自身が勝手に抱えてしまっている社会からのプレッシャーや、周りの視線を乗り越えて、長期的に自分や自分の家族が幸せになれる働き方や自己実現に繋げる変革の期間として非常にいい機会となりました。

サポートしてくれた家族、友人、CodeChrysalisの講師、クラスメートに感謝します。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です