エンジニアの業務未経験者に求められるレベルがどんどん高まっている

僕が初めてプログラマーとして仕事をするようになったのは、2018年の8月です。この記事を書いているのは2020年なので、今から2年前になりますね。いやぁ思えばよくここまできたもんだな、と感慨深いものがあります。

くだらない前置きはさておき、本題に移ります。本記事のメインテーマは、プログラマーの業務未経験者に求められるレベルのインフレ化現象についてです。この競争が激化する業界での、業務未経験者が職を得るための戦略とかを書いていきます。

エンジニアが仕事で価値を出せる、最低レベルについての考察

技術の進化スピードが半端ない

僕がプログラミングを始めたのは大学一年生のときです。大学受験が終わった3月からProgateをはじめました。大学一年の夏休みにはIT企業でエンジニアとしてインターンで働いていました。

その頃の僕の技術力はというと、言っちゃなんですが、ほんとにカスでした。サイト模写もろくにできないし、webアプリに機能をちょこっと追加するぐらいが関の山。

入社できたのは、インターンということと、早稲田大学という比較的高学歴の理系出身ということで、ポテンシャルを買ってもらったからです。運が良かったってことですね。

その頃の僕は、Dockerなんて聞いたことなかったし、CircleCIについて知ったのは働き始めてからだいぶだったとき。AWSってよく聞くけど、なんかよくわからねえなー、みたいな感じでした。そのぐらいのレベルでも雇ってもらえたんです。

それから2年が経過した今はというと、未経験者でも、Dockerで仮想環境を構築するのは当たり前、CircleCIなどでパイプラインを構築するのは当たり前、テストも単体テスト・結合テスト書くし、自動デプロイも実装する。AWSでサイトをホスティングしちゃうし、人によっては、EC2じゃなくて、ECSを使ってコンテナ上にデプロイするとか。いや、レベル上がりすぎでしょっていうw

人によっては、React・Vueとかを使ったりもするし、swaggerでAPI仕様書を作成したりするとか、まじ半端ねえなって思います

もちろん、上記に上げた全ての項目が未経験の状態から勉強してできる人って、ポテンシャル死ぬほどありますし、そのぐらいのレベルの人は数百人に1人ぐらいでしょう。

だいたいの人は、Docker, CircleCI, AWSなどのインフラ設定、などなどの項目のうち、1つか2つかろうじてできるようになるぐらいではないでしょうか。半分もできたらめっちゃ優秀だと思いますけど。

ちなみに、インターンで会社に入る場合だと、だいぶ基準が低くなります。そもそも、ポートフォリオとか作ってない人が大半なので。

キラキラ技術に惑わされない。基礎的なコンピューターサイエンスの知識の重要性

Dockerとか、AWSとか、ちゃんといじるとよくわかるんですが、基礎的なコンピューターサイエンスの概念の上に成り立ってるんですね。

Dockerをちゃんと理解するためには、Linuxについて知る必要があります。Dockerを理解するためにLinuxを学ぶ、というのは一見遠回りのように見えますが、その過程で身につく知識というのは一生モノで、しかも至るところで応用が利きます。

AWSも要はLinuxのサーバーなので、環境構築とか、コマンドとか、ユーザー管理とか、そこらへんも全部、Linuxを学ぶと身につく知識なんですね。

僕もまだまだ勉強中の身で、キャッチアップしないといけないものは山程ありますが、大事なのは、キラキラ技術用語に惑わされずに本質を捉える、ということです。

基礎を理解していると、応用が早い。コピペプログラマーにならないで済む

先程、Linuxを理解していると、Dockerとかインフラについて理解する助けになる、と書きました。このように、知っておくと、めちゃめちゃいろんなところに応用が効く概念、というのがありまして、そういうのをちゃんと学んでおくと、成長速度が爆速になります。

例を挙げるなら、

  • Linux
  • SQL
  • DB
  • API

などなど。じゃあどうやって勉強すればいいねん、という方のために、今度そういう記事を書きます。多分。

世の中には、いいコピペプログラマーと、悪いコピペプログラマーがいます。前者は、コードを理解してコピペしますが、後者は理解せずにコピペします。

やっぱりですね、基礎を理解しているのとそうでないのとでは、実力の伸び方が違いますし、応用力が違います。

Qiitaの記事に書いてあるコードをコピペして、あれ、なんかバグが出て動かねえぞ、と結局何時間も無駄にしてしまうのが前者。コピーしたコードを上手く改変して、短時間で成果を出すのが後者。

僕も最初は、理解してないけどとりあえずえいっ!、でコードを貼り付けて動かしたりしてました。ただ、だんだん限界を感じてきまして、このままじゃイカンな、ということで地力をつけてきました。

とりあえず、1社目さえ入れれば、あとはなんとかなる

エンジニア、というより、新しいことを始める全ての場合において言えることですが、最初の山が一番高いです。

エンジニアの第一宇宙速度、つまり、自分で勝手に勉強していってもグングン実力が上がるようになるのは、公式ドキュメントが読めるようになったとき、です。できれば英語で。

基礎的なエンジニアの力がつけば、だいたいどんなドキュメントを読んでも、理解できるor理解するために必要なことがわかる、わけですが、その「基礎的なエンジニアの力」をつけるために、だいたい業務で半年 ~ 1年ぐらい必要になるわけです。

エンジニア一年目は、まじで勉強すればするほど実力が上がるので、ハマると超楽しいです。

自主的な勉強が習慣化すると、家で学んだことが業務に生きてくるし、その逆もまたしかり、となって、ウルトラポジティブスパイラルに突入します。

会社でも、アサインされるタスクのレベルがどんどんあがって来ます。わからないことがあっても自分で解決できるようになりますし、質問のレベルも高くなっていきます。

逆に言うと、エンジニア一年目で、業務時間だけでしかプログラミングをしないと、成長曲線が一気に鈍化してしまいます。

教育コストはかかるわ、タスクの消化速度はかかるわ、かといって、実力が伸びているわけではないわ、という、「お荷物」、もっとキツイ言葉を使うと「負債」になるわけです。

どちらの選択肢を取るかはあなた次第ですが、せっかくエンジニアになろうとするなら、頑張りたいんですよね。