異業種・異職種からエンジニアに転身するときに気をつけたいこと

## はじめに

自分は新卒から約5年間、エンジニアリングとは無縁の業種・職種で勤めたあと、諸般の事情でほぼ未経験かつ独学でエンジニアになりました。
現在は主に品質保証（QA）やテスト自動化を専門とする、いわゆるQAエンジニアとして働いています。

この記事では、自分が異業種・異職種からエンジニアに転身したとき、どういうことに気をつけてきたかについて説明しようと思います。

## この記事のターゲット

- 非エンジニア職からエンジニアに転身しようと思っている方
- エンジニアになったはいいけど、いまいち自分の強みを見つけられてない方

## 気をつけたいこと

### 過去の経験を捨てない

前線で活躍するエンジニアはそれこそこの道うん十年のベテランだったり、幼稚園のころからプログラミングやってますみたいなナチュラルボーンエンジニアみたいな人だったりするので、基本的に技術で勝負すると勝ち筋はありません。
逆に、そんなエンジニア達が逆立ちしても手に入らないものは、あなたが数年掛けて培ってきた**ドメイン知識**や**実務経験**など、いわゆる **「現場の勘」** だったりします。
それを捨てるなんてとんでもない！

自分は非エンジニアだったころは物流業界で働いており、倉庫の現場作業における肌感や、SCM（サプライチェーンマネジメント）周りの業務知識、いわゆるWMS（倉庫管理システム）と呼ばれるものについての知識が一通りありました。
なので、物流関連のシステム開発に携わるときはキャッチアップが早いですし、例えば新機能のテストをしたり仕様のレビューをしたりするときにも「この機能はおそらくこういう使われ方をするだろう」と想像しながら進めることができます。
このことは、他のエンジニアに比べて大きなアドバンテージになります。
大いに活用すると同時に、積極的に同僚たちにご自身の知識を共有していきましょう。

エンジニアは勉強熱心なので、毎日どこかしらで様々な勉強会が開かれていますが、 **ドメイン知識だけは勉強会では得ることができません**。ニッチな業界ならなおさらです。
あなたの業務知識は、あなたの持つ最強の武器です。ぜひ活かしていきましょう。

### エンジニアになることにこだわりすぎない

いきなり逆説的ですが、エンジニアになることにこだわりすぎないほうがいいです。

基本的に、技術というのはそれ単体で何かに役に立つことはなく、何かと組み合わせてはじめて効果を発揮する物です。
ものを運ぶときに、ハダカのまま抱えて持ち運ぶか、袋や箱に入れて持ち運ぶか、箱に入れて台車に入れるか、いろいろな方法があると思いますが、目的はあくまで **ものを運ぶこと** であり、台車を動かすことではありません。
プログラミングなどの技術を学ぶことは、台車の動かし方を覚えるようなものです。運ぶモノがなければなんの役にも立ちません。

「エンジニアって楽で実入りが良さそうだからエンジニアになりたい！」という動機を否定するわけではないですが、今の時点で何かしら取り組んでいる仕事があるのであれば、まずは**技術を学んで今の仕事を楽にすること**を目的にしたほうが良いです。

手段はたくさんあります。
VBAや、Google Apps Scriptなどのプログラミング言語を学べば、ExcelやGoogle SpreadSheetなどを操作するスクリプトを書くことができますし、マクロの自動記録で操作手順を記録→再生することだってできます。
流行りのRPAや、[Zapier](https://zapier.com) などのサービスを使えば、ノンプログラミングで業務を効率化することだって出来ます。
[Microsoft Azure Machine Learning Studio](https://azure.microsoft.com/ja-jp/services/machine-learning-studio/) を使えばコードを記述せず機械学習を使うことだってできます。

非エンジニアから見ると結構誤解されやすいところではあるのですが、エンジニアは何もプログラミング言語だけで全てを解決しているわけではありません。
↑に挙げたようなノーコード系のサービスを使うことだってありますし、特に黎明期のスタートアップではいろいろなサービスを組み合わせて最短で目的を達成することが必要になることも多いです。

つまり、非エンジニア向けの選択肢は、エンジニアになってからも使えるのです。
何一つあなたの未来にとって無駄になることはありません。ガンガン使いましょう。
（もちろん、プログラミングは最も汎用性が高い選択肢なので、こちらも覚えておいて全く損はありません。適材適所です）

自分は新卒時代、非エンジニアとして倉庫で働く傍ら、ExcelとVBAを学んで日々の事務作業を自動化させたりしていました。
いわば、そのときの経験が、今現在エンジニアを本業とする上での原体験になっているわけです。

既存業務をうまく整理しつつ、エンジニアリングで効率化するというスキルは、エンジニアとして生きる上でもとても大切だったりします。
無理にジョブチェンジしなくても、今の仕事を改善する過程で、エンジニアのはじめの一歩は踏み出せます。エンジニアになることだけを目的にするのはやめましょう。

ちなみに、当時ブラウザを使う業務がいくつかあったので、VBAからIEを操作して業務を自動化させていたのですが、その時の経験は現在QAエンジニアとして仕事をする上で非常に役立っています。

### 専門性を意識する

専門性というのは、例えばフロントエンドが得意とか、バックエンドが得意とか、インフラが得意とか、そういうやつです。
[偉大なプログラマ(+人間)になるための101のTIPS](https://qiita.com/rana_kualu/items/f3a2d6318ecaaf6dea59#30-find-your-niche) にも、 `Find Your Niche(自分の専門を見つけよう)` という言葉がありますが、自分がどういう分野に向いてて、どういう分野に習熟していきたいのかは早めに決めちゃったほうがいいです。

出来れば名刺にも書いてしまいましょう。
「自分はxxエンジニアです」と名乗り始めれば、もうあなたはxxエンジニアです。
名乗ることで、同じ分野の知り合いが出来ます。知り合いが出来ると世界が広がります。

もちろん、他にもっと向いてる専門分野を見つけたなら、そっちに鞍替えするのは全然アリだと思います。
そこはもう気軽にやってしまいましょう。
大丈夫！異業種異職種からエンジニアに転身することに比べれば、エンジニアからエンジニアへの転身なんて軽い軽い！

### 良い習慣を身に着けたエンジニアと仕事をする

出来れば経験豊富で、かつ良い習慣を身に着けているエンジニアと仕事をしたほうがいいです。
良い習慣というのは、例えばテストコードを書いてるとか、コードレビューをしているかとか、ライブラリのアップデートを定期的にやってるとか、そういうことです。
習慣、と言われるとなんだか精神論みたいで嫌だと思うかもしれませんが、コードベースをキレイに保ち、長く使えるプロダクトを作るというのはすごく大変なことで、それが出来る人と仕事をするというのはものすごく良い経験になります。

とはいえ、これからエンジニアを目指そうという人は`良い習慣` がどんなものか分からないと思うので、本を読んでどういうものか何となくイメージしておくといいかもしれません。
例えば 

- [プリンシプル オブ プログラミング 3年目までに身につけたい 一生役立つ101の原理原則 ](https://www.amazon.co.jp/dp/B071V7MY82) 
- [アジャイルサムライ――達人開発者への道](https://www.amazon.co.jp/dp/B00J1XKB6K/)

なんかはプログラミングの素養がなくてもけっこう読めるのでおすすめです。

あと、親切になんでも教えてくれる人がいいです。
教えるのが好きな人はだいたい勉強が好きなので、ちゃんとした知識と経験がある人が多いです（個人の感想です）。

## 余談

冒頭で **独学・未経験でエンジニアになりました** とか偉そうに書いてますが、特に強い意思に基づいてそうなるように行動したわけではなく、その場その場でやりたいことをやりたいようにやっていたら結果的にそうなっただけです。
そういうこともあるよね。にんげんだもの。