検索して上位に出てきた「未経験でエンジニアになったけど辞めた人の体験談」みたいな記事がエアプっぽくて的外れだったので、実際に未経験でエンジニアに転職すると何が大変で、何が辛いのかの体験談を語ります。
未経験でエンジニア就職して大変のは以下の点です。
- ツールを使いこなせず、環境構築ですら戸惑う
- 既存のコードが理解できなくて Pull Request を出せない
- Pull Request を出しても指摘されまくって先に進めない
- 独学で学んできたことと実際のコードのレベルが違いすぎる
- 現場のコードが下手でも、実力がないので下手なコードでに気付けない
ツールを使いこなせず、環境構築ですら戸惑う
まずエンジニア転職して最初に戸惑うのがツールの多さでしょう。
- Git, GitHub
- Docker
- AWS などのクラウド環境
- IDE(Visual Studio Code, WebStorm, IntelliJ IDEA)
- ターミナルでの操作
- データベースの操作
- プロジェクト特有のツール
それぞれのツールごとに 1 冊の本が出ているくらいの分量です。 ツールを当たり前のように使いこなさないと、開発のスタートラインにすら立てません。
Git の操作になれないうちは、コミットをどう打ったらいいかわからないですし、 Pull Request も出せません。
初学者の多くは Pull Request って聞いたことあるけど、何だっけ?みたいなレベルからスタートなので、キャッチアップが非常に大変です。 現場の会話も理解できません。
開発環境はおそらく Docker で作られていると思います。 どの会社も環境構築の手順書は存在するとは思いますが、たいていの場合、手順書通りにやっても動きません(笑)
Fixture データが古くなってたり、ビルドが通らなかったり、色々あります。 それぞれのツールの基礎知識がないと、詰まったときに自己解決できないのが辛いところです。
Dockerfile の意味がわからないと、コマンドを打っても何をしているのかは理解できないでしょう。
「意味不明なものを、意味不明なまま使い、なんとなく動くまで頑張る」というのが初心者の通る道ですが、辛いです。
最初の半年くらいは「意味不明」が残ったまま、仕事を進めていくことになるでしょう。
既存のコードが理解できなくて Pull Request を出せない
実際のプロジェクトでは、個人開発とは全く違うレベルの規模のコードを扱います。 全体像を理解するまでにものすごく時間がかかるのです。
未経験の皆さんも就職前に個人で開発することはあったと思います。 個人開発だと、どこのコードを書いても「自分」しか開発者がいないので、だいたい全てを把握しているでしょう。
しかしながら、会社での開発はチームプレーです。
たくさんの人がコードに手を入れていきます。 既にいなくなった人もたくさんいます。
git blame でゴミコードをコミットした馬鹿に腹を立てることもしばしばです。
要はコードの規模が大きい上に、いろんな人がいろんな品質でコードをコミットしていくので、理解するのが大変なのです。 もちろん慣れてくれば理解できるスピードは上がるのですが、どんなに経験を積んでも全体像を掴むまでは時間がかかるでしょう。
プロジェクトの規模が大きければ大きいほど、理解には時間がかかります。
ただ、個々のタスクは全体の一部の修正に留まりますので、安心してください。 それでも「どこを直せばどう動作が変わるか」がわからないと、うまく修正できないとは思います。 初学者には大変です。
Pull Request を出しても指摘されまくって先に進めない
独学のコードと現場のコードは違います。 独学で勉強して頑張って動くコードを書いたとしても、現場が求める水準にはなかなか達しません。
開発現場では人のためにコードを書くからです。
他の人が読みやすく、理解しやすく、改修しやすいように設計し、コードを書かなければいけません。
最初は Pull Request を出すなり、大量に指摘が入るでしょう。最初からうまくできる人はいないですし、指摘されないと成長できないです。 経験者からの指摘は、独学では絶対に学べません。現場に出て、何か言われて、悔しくて勉強して、血肉にして、良いコードを書いていく。
これの繰り返しです。
現場のコードが下手でも、実力がないので下手なコードでに気付けない
未経験でエンジニアになった人は、生まれたばかりのひよこです。 初めて配属されたチームのコードを親のように眺めます。正しいものとして眺めるでしょう。
しかしながら、実際にはクソみたいなコードが大量に残されています。 全部が綺麗なコードな現場はありません。
下手くそが紛れることもありますし、外部委託の底辺プログラマが書いたコードが残っているケースもあります。
めちゃくちゃ下手くそなのだが、自分も未経験なのでそれが下手なことに気付けない、という状態に陥りがちです。
下手なコードは読みづらく、どこで何をしているのか意味不明です。 眼の前のコードが意味不明なのは、自分のせいではない可能性があるのです。
しかし未経験の場合は「下手なコード」を「こいつマジで下手くそだな」と認識できません。
英語で文章が書かれていると期待して読んでみたら、
"Dieser Code ist hoffnungslos schlecht."
みたいな文章が出てくるような、そんなコードもたくさんあります。上の文章は「このコードはどうしようもないくらい下手くそです」というドイツ語です。
そこはもう、運ゲーなのでどうしようもないですが、「未経験のツラミ」であることに間違いありません。
IT 未経験からエンジニアに転職して、SE として年収を上げていく方法|プログラミングスクールは使えるのか?
未経験でも問題にならないケース
Google 検索して上位に出てきた記事に、以下のようなケースが未経験には辛い、と書いてありました。
- 静かすぎて質問しづらい
- 上司の教え方が上手ではなかった
- もっと人と話したくなった
- プログラミング好きな人には勝てない
馬鹿なのかな?コミュ障なのかな?
静かで質問しづらいってのは会社によりますが、普通に話せよ、と思います。
上司は運ゲーです。周りの人間のレベルが自分のレベルなので、レベルが上がれば上がるほど、変な人が周りからいなくなっていきます。
「もっと人と話したくなった」というのは意味不明です。最初からエンジニアやらずに営業でもやってください。
「プログラミング好きな人には勝てない」
野球が好きなおっさんがプロ野球選手にはなれないように、好きなだけでは限界がきます。
またプログラミングは勝負ではなくビジネスの手段なので、勝ちに行く必要もないです。
「プログラミング好きな人には勝てない...」と悩むのは、とりあえず 3 年続けてからでいいのではないでしょうか。
- 作りたいものを作れること
- 他の人が作ったものを理解できること
- 作りたいものをうまく作れること
このレベルに 3 年で到達するのが重要です。 それ以上のレベルは自分にはよくわかりませんが、毎日勉強して、毎日手を動かしていればちょっとずつ上達していくので、あまり気にならなくなるとは思います。
スパンを長くして考えましょう。 10 年、20 年と続けるわけなので、「プログラミング好きな人に勝てるかどうか」よりも、「最後までやめないこと・続けること」の方がずっと重要です。