キャリアチェンジしてフロントエンドエンジニアとして採用されるまでの記録。
勉強を始めた頃にこういう系の記事を色々と読んで参考にしたんだけど(これとかこれとか)、日本語でもあるのか探してみたときにあまり具体的なのは見つからなかったので書いておきます。
※ 以下は主な勉強内容をかなりシンプルにしてまとめたもので、実際にはよく迷走していたし、この他にも細々と色々勉強してました。使った教材は全部英語だけど、英語できなくても大体の流れ&期間を知る参考にはなるかと思います。
HTML/CSS & JS 超基礎(2月〜4月)
仕事辞めるキャリアチェンジするプログラミング勉強する!と決めたのが2月。ブートキャンプに行くべきか自分で勉強するべきか、色々考えた末に自分で勉強することに。仕事を辞めるまで2ヶ月弱あったので、まずは勉強する習慣を作ろう、本当にこれをやりたいと思えるのか試そうとしていたのがこの期間。
最初にCode SchoolのHTML/CSS, JavaScriptの有料コースを一通りやる。無料で基礎を勉強できるサービスはたくさんあるけど、あえて有料を選んだのは、怠け者の私が仕事で疲れて帰ってきた後にいきなりがっつり勉強するなんて無理だったので、お金を払うことにより無駄にしたくないという気持ちを自分に芽生えさせるため(貧乏性)。
Code Schoolでいきなり仕事に応募できるレベルにはならないけど、導入としては最適だったと思う。なんとなく今後勉強していくべき内容がわかればそれで良いと思ってやっていた。これで毎日勉強する習慣はついたので、次は無料のFreeCodeCampでまた超基礎をぐるぐるとやる。
怠け者が何かを新しく勉強するためのコツは、とにかく5分でもいいから毎日やることで、実際には何も身に付いていなくてもよし、まずは勉強を面倒臭いと思わなくなることが大事。
HTML/CSS & JS 基礎(5月〜6月)
仕事を辞めてがっつりフルタイムで勉強を始める。何もかもが断片的にしかわからず、そこからどうやって一つのものを作るのかよくわからなかったので、Udemyで学びながら実際に作っていく式のコースを二つやった。JavaScriptメインの The Complete JavaScript Course と、Web Developmentを一通り学べる The Web Developer Bootcamp (フルスタックじゃなくてフロントエンドで行こうと決めたので、バックエンドの途中でやめた)。Udemyはかなり頻繁にセールをやるので、コースを買うのはセールになるまで待つのが良いかと思います。どっちも15ユーロで購入。
JS 基礎〜応用(?)(7月〜8月)
なんとなくわかったような気になっているけど、JavaScript わかるようで全然わかってないという時に見つけたのがWatch and Codeで、無料コースでGordonの教え方が好きだったので有料コースをやる。実際にエンジニアとして働くとき、何かを最初から作ることよりすでに書かれたコードを読んでそれを使ったり修正したり追加で書いていくことの方が圧倒的に多い、だからコードを読むスキルを身につけようということでめっちゃコードを読んでいく系。
かなり理解が深まったけど、振り返ってみると上記のも合わせてチュートリアルをやりすぎだった、もっと早く自分で何か作ってみるべきだったとは思う。
実践(9月)
FreeCodeCamp の自分で作ってみる形式の課題をやる(Build a JavaScript Calculator とか)。最初はどうやったら作れるのかさっぱりわからなかったので、色んな人のコードを見ながらヒントを得て、簡単な部分からちょっとずつ作っていく式にした。なんとか全部やったけどコードがあまりに汚くうんざりしたので、Udacity で Clean Code の大切さとその書き方を学ぶコース JavaScript Design Patterns (無料)をやる。
React (9月〜10月)
エンジニアの友達と話したり比較記事などを色々読んだ感じでは、Angular 2よりReactやる方が良さそうだなと思ってReactをやることにする。Vueも面白そうだったけどあまり求人を見かけず、まずは仕事を見つけることが最優先だったのでReactに絞る。
最初にUdemyで一番人気だった Modern React with Redux をやったけど、全然わからなくて絶望する。初心者向けのチュートリアルではES6をメインで教えないので、ReactとES6を同時に学んでいくことになり、何が何だかわからなくなったのも原因の一つだと思う。結局そのコースはrefundしてもらって、別のコース The Complete React Web Developer Course (with Redux) を買った。ES6初心者向けに作られているのでオススメ。それでもこの時点ではReduxがイマイチよくわからない。
Reactの勉強始めたけどJavaScriptまだまだわからない部分たくさんあるし不安、と思って始めたJavaScript 30(無料)がかなり良かった&Wesの教え方が好きだったので、ES6 for Everyone を買う。合う合わないはあると思うけど、Wesは喋りが上手だし少しでも楽しくしようとしていることが感じられるので激推し。
Chingu (10月 〜 11月)
React一通り基礎はやって、次どうしよう?と思っているときに見つけたのがChingu。世界中の同じようにプログラミングを勉強している人たちが集まって、3〜4人くらいのチームを作って一緒に何か作る。それぞれのスキルや目的ごとにチームが決められて、何を作るかはチームで話し合って決めるんだけど、自分たちのアイディアを形にするチームもあるし、既存のサイトやChrome extensionをクローンするチームもある。私は3人のチームメイトとAirbnbのサイトをクローンしました。
これで少しはReactについてわかるようになってきたのと、Reduxを使わなかったことによりなぜReduxが必要なのかを身を持って知れて良かった。あとはCSSの曖昧だった部分の理解もできた(特にflexbox)。チームでGitHubを使うのも初めてだったし、eslintやstyled componentsなど知らないものがたくさんあって大変だったけど超勉強になった。
平行してチュートリアルを見返したり記事や公式docを読んだりしながらReduxの勉強を自分でしつつ、小さめのアプリを三つReactで作って、ウキウキと仕事に応募し始める。…返事ゼロ!!!心がバキバキに折れて、この頃よく泣いていた。
面接(12月&1月)
仕事が見つからないので二回目のChinguに参加、testingとflowについて学びながら自分たちで考えたアプリを作る(※ 早い段階で一人は仕事を見つけ、一人はパソコンを盗まれ、その後に私も仕事を見つけたので未完のまま終わる)。
この頃Twitterにて メキシコ人でフロントエンドエンジニアでパリで働いている超かっこいい女友達が出来る。彼女からのアドバイスを受けて、条件を満たしていないと思う仕事にも応募して、ジュニアであることを強調するのもやめたら、初めて返事が来るようになって、しかも評価が良くてびっくりする。
ちなみに "Why Women Don’t Apply for Jobs Unless They’re 100% Qualified" (女性はなぜ条件を100%満たしていないと応募しないのか)という面白い記事があるので女性はぜひ読んでほしい。
技術テストは期限内に簡単なアプリを作る式のことが多かった。このAPIを使ってこういうアプリを作ってください、React, Redux, React Routerを使うこと、unit test 書いていたり Flow/TypeScript 使っていたりレスポンシブだったらプラス、みたいな感じで指定されて、24時間以内に提出することもあれば一週間以内に完成させれば良いということもあった。
技術テスト、だいたい最初は難しく感じるけど、今まで使ったことないものを使うので勉強になるし、やっている間にできることが増えていくのが実感できて、さらにフィードバックまでもらえるので楽しかった。
その後の面接で提出したテストに関する質問と、JavaScript, React, CSSに関する質問を受けたりした(promiseとは、async/awaitとは、そのメリットは、arrow functionとこれまでのfunctionの違い、なぜReactを選んだのか、flexboxとは、みたいな)。
15社応募して、リクルーターとの電話で終わったのが1社、技術テストまで行ったのが4社、そのうち2社からオファーをもらう。Mobile ad techのスタートアップ BidMotionで働くことに決めて仕事探し終了。BidMotionはReact使ってなくて、AngularからVueに移行中なので、今ひーひー言いながらどっちも勉強しています。
その他色々
- 前職はPlatform Analystという肩書きでSQL書いたり簡単なBot作ったりしてました。なので技術的なことに多少は触れていたのと、5年以上前にHTML/CSSを勉強しているので超初心者ではなかったです。
- 上記のコースに払ったお金の合計は200ユーロ+くらい。完全無料でやるのも可能だったと思うけど、多少の犠牲を払うことによりやらなきゃという義務感を得られることや、有料コースはサポートがあって質問にきちんと答えてくれたり、新しいバージョンが出たら内容をアップデートしてくれたりするので、組み合わせてやるのが良いと思う。あと無料の教材はネットに溢れていて選ぶのも大変なので、評判の良さそうなコースをさくっと買ってしまえば悩む時間を減らせる(まあ有料でもたくさんあるんですけど)。
- じっとしていると他のどうでもいいことを考え始めてしまうので動画をずっと観ているのが苦手なんだけど、1.5倍速とか集中しないとついていけないスピードにすることにより雑念を振り払ってました。
- 一番良いのはフレームワーク、ライブラリーの公式docを読むことってよく言われるけど、初心者にはハードルが高いので、わかりやすく説明してくれるチュートリアルをやって、そこそこ理解してからdocを読み込む方が良いと思う。最初に読んだときは意味がわからないと思っても、勉強してから読むとちゃんとわかるようになっていたりするので心配するべからず。
- 大事なのは自分の勉強スタイルを知ることで、どういう時にやる気を失い、どういう時にさくさく勉強していけるのかを自分でよく観察すると良いと思う。私の場合は、難しすぎて何から手をつけていいかわからないときにやる気を失うとわかったので、一番簡単そうなところを探すために分解し、そこから始めるようにしてた。
- 定期的に不安が襲ってくるので、あれもこれも出来ない仕事見つからないかもしれないってネガティブになったときは、求人情報を見ながら今後勉強するべきことを一つずつ書き出し、漠然とした不安を分解してました。なんでも分解してみることにより理解しやすくなるのでおすすめ。
- 求人情報は早い段階からチェックして、行きたいと思える会社の求人をストックしておくと良し。私はHuntrを超活用した。Kanbanボード式で職探しの進捗管理ができる&Chrome extensionがあって簡単に求人内容をコピペできるので良い。
- 自分的には当たり前なこと、働く会社を選ぶ上で大事なのはプロダクト、誰にも使われないものを作りたくないし、そもそもその機能はいるのかと思ったら素直にそう言いたい、デザインがおかしいと思ったら意見を言いたい、みたいなことも評価された。技術的なことにしか興味のないエンジニアも多いから、自分ごととしてプロダクトを捉えられたりデザインの大切さがわかることはプラスらしい。
-Eloquent JavaScriptとかYou Don't Know JSの本も何度かトライしたけど、毎回挫折。最初から読むのは諦めて、YDKJSはある程度わかってきたトピックの知識を深めるために読んだりした。
- 8ヶ月も勉強しているのにまだこのレベル、あれもこれも出来ないって悲観してたけど、いざ面接に呼ばれるようになると、8ヶ月でこんなに出来るようになったの?本当にReact 3ヶ月しか勉強してないの?という感じだったので、習得は早い方だったらしい。人に見せてみないと自分のレベルはわからない。
- 2016年の記事だけど、"How it feels to learn JavaScript in 2016" に書かれているみたいに Modern web development を勉強するってまさにこんな感じでカオスなので、最初は圧倒されるかもしれないけど大変なのはみんな一緒なだし、時間が掛かるものだと思って焦らずコツコツ積み重ねていくことが大事。
- 独学で(フルスタック)エンジニアになるための勉強法、みたいな記事で勉強期間が6ヶ月になってるのをちらほら見たけど、6ヶ月でやるのは厳しいと思う。がっつり面倒を見てプランを考えてくれるメンターでもいない限り、大体の人はやる気を失ったり落ち込んで勉強があまり進まない時期もあるだろうし、色々試しすぎて失敗することのが普通なはず。でもどのレベルでJuniorの仕事が見つかるのかは国によるかもしれない。
- ポッドキャストは初心者に優しいCodeNewbie, みんな大好きWes BosのSyntax, 何の話をしているかさっぱりわからないときもあるけど JavaScript Jabber を主に聴いてました。もう勉強したくないけど何もしないのには罪悪感がある、みたいなときにポッドキャスト聴くのおすすめ。
- 求人はLinkedIn, Glassdoor, AngelList, Welcome to the Jungleでチェックしてたけど、良いのはだいたいAngelListで見つけたし、返事が来たのはほぼ全部AngelList経由だった。
- Hired, talent.ioも登録したかったけど、未経験だからか審査通らず。
- 給料は3Kくらい下がった。エンジニアだしもうちょっともらえるのかなと思っていたけど、オファーをくれた2社とも提示額がほぼ同じだったのと、複数のエンジニアの友達に聞いたところジュニアとしてはかなり良い方だと聞いたのでそのまま承諾した。こればかりは仕方ないので今後上げていけるよう頑張りたい。
- ○○歳だけどエンジニアとして仕事を得るには遅すぎるか?という質問はそこら中で見かけるけど、FreeCodeCampを作ったQuincyの "Stories from 300 developers who got their first tech job in their 30s, 40s, and 50s" を読むと良いと思う。ちなみに私は今29歳。
- 誰だって Impostor syndromeには苦しむし、それに関するブログなどもたくさん出ているので、自分に自信が持てなくて不安になったり落ち込んだりしたときは、他の人がどうやって克服してきたかを調べたり、素直にそう誰かに言って励ましてもらうのも良いと思います。ChinguのSlackでそういう場面をちらほら見た。私はSyntaxのこのエピソードをよく聞いていた。
- 以下勉強中の私が自分を励ますために書いたツイート:
終わりに
これからも何度でもゼロから勉強するつもりだし、そのことに抵抗がないこと、これまで実際にやってきたことによりまあ出来るだろうという自信がついたことが、人生にとって何よりプラスだと思っています。何かを始めるのに遅すぎるということはないので、やりたいという気持ちがあったら絶対にやってみるべき。
ちなみに8年前は英語が話せなかった私の英語との闘いの記録はこちら。
※ カバー写真は Unsplash より Glenn Carstens-Petersさんの写真を使わせてもらいました。