未経験の文系サラリーマンが30歳手前からエンジニアになるまでにやって良かった5つのこと

# はじめに
こんにちは、[IESHIL](https://ieshil.com)でエンジニアをしている須貝です。
この記事は [Livesense - 自 Advent Calender 2017](https://qiita.com/advent-calendar/2017/livesense-ji)の第14日目になります。
「**自**」ということで、おねんどおねえさんの画像収集を自動化した話でもしようかと思ったんですがあまり需要がなさそうなので、 **自**分の話でもしてみたいと思います。
私、今年で35歳になりまして一説によると定年待ったなしなんですけど、エンジニアになってまだ5年ちょいしか経ってないんです。エンジニアになる前（20代後半まで）は**雑誌や書籍の編集・ライター**をやっていました。

そんなちょっと変わった経歴なので、エンジニアではない方に「どうやったらエンジニアなれるんですか？」と聞かれることがよくあります。が、これまで必死で駆け抜けてきたため、ろくに振り返らなかったこともあり的確に答えられないというモヤモヤがあったんですよね。
というわけで自分の振り返りと、これからエンジニアになろうと考えている方のために、**自分がこれまでにやってきてよかったこと**をお伝えしようと思います。

# 1. 簡単なものでいいので何か作ってみる
プログラミング学習で一番大切なのは**モチベーションを維持すること**だと思います。
入門書を一から読み進めて途中でわけわからなくなって「うわあああああ！！！！」となるよりは、基本的な文法をかじったら**さっさと何か実際に動くものを作る**ほうが最初は成長が速いです。

私の場合は最初はTwitterのBOTを作ってました。単にランダムに何かつぶやくだけのもので、DBも使っていないし、本当に簡素なものなんですけど、最初はそんなのでいいと思うんですよね。当時はすごく楽しかったです。APIって何？、トークンって何？　みたいな感じでわからないことをググってばかりでしたけど、自分で「こういうことを実現しよう」と考えて書いたプログラムが動くのは楽しいので、非常に良いサイクルが回ります。

# 2. 作ったものは公開する
で、作ったものは**どんなにひどいものでも公開する**ことをおすすめします。
公開しても大して使われないことが大半だと思うのですが、運良く使ってくれる人がいれば何かフィードバックをもらえるかもしれないし、世界に公開することでもっと良いものを作ろうというモチベーションが湧いてきます。

技術的な面から考えても、**ローカルで動かすのと公開するのでは大変さが段違い**です。例えばスマートフォンのネイティブアプリであれば実機で動かすのとストアに公開するのとでは得られる経験値が圧倒的に違うので、初期の成長を加速させるにはとにかく作ったものは公開するのが良いと思います。
ちなみに私はAndroidアプリを個人で作って公開していたのですが、攻めの開発をしまくっていた結果、**開発者アカウントをBANされてしまった**という苦い経験があります。注意しましょう。

# 3. 知識を体系化する
まず作りたいものを作る、その過程でわからないことがあったらとりあえずググる、といった感じで初学者のうちは必要になってから学ぶ遅延評価型の学習スタイルで行くほうが効率が良いでしょう。その一方で、プロダクト作りにリソースを割きすぎると、ある特定の技術の表面的な理解にとどまってしまって、その背景にある理論的な部分への理解が抜け落ちてしまいやすいです。ですから、機を見て適切に**知識を体系化していく**必要があると私は思います。

対処法はいろいろありますが、私の場合は資格の勉強で知識の体系化に取り組んでいました。もちろん独学で大丈夫な方はわざわざ資格を取る必要はないと思います。私の場合はモチベーションを保てなそうだったので、結果がわかりやすい試験勉強でこのへんを補うようにしていました。最近はオンラインのスクールみたいのがいっぱいあるんでそういうのでも良いかもしれません。何にせよ**プロダクト開発（応用）と座学（基礎）の両輪をバランスよく回していくと効率が良い**のかなと思います。

# 4. 勉強会を主催する
これは前職で未経験からエンジニアになったときの話なんですが、前職では人の入れ替わりが激しかったのでそういう人たちとゆるくつながっておきたいなと思って勉強会を主催（共催）していました。[^1]
結果、同じ会社の人だけでなく、社外のエンジニアの方とも知り合うことができて良かったです。
もちろん既存の勉強会、コミュニティに参加するというのでもOKです。ただ、私の場合はゲストとして参加するよりは、**ホストとして開催したほうが参加者とコミュニケーションが取りやすそう**だなと思ったのでそうした、というだけです。お伝えしたいのは**外の世界を知っておいたほうが良い**ということです。

# 5. スマホのネイティブアプリを作る
これは意図してというよりは結果的に良かったことです。スマホに関わる業務をしていたおかげで、**ソフトウェアはハードウェアの上で動いている**という当たり前のことを学べました。私の言いたいことは以下の記事にまとまっています。

[えふしんに聞く「僕が若手エンジニアならこれを学ぶ！」トップランナーの考える成長戦略 ②コンピュータの仕組みを学ぶには「モバイル」をやるべし](https://employment.en-japan.com/engineerhub/entry/2017/09/22/110000#%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF%E3%81%AE%E4%BB%95%E7%B5%84%E3%81%BF%E3%82%92%E5%AD%A6%E3%81%B6%E3%81%AB%E3%81%AF%E3%83%A2%E3%83%90%E3%82%A4%E3%83%AB%E3%82%92%E3%82%84%E3%82%8B%E3%81%B9%E3%81%97)

>コンピュータの仕組みを学ぶ一番てっとり早い方法は、モバイルやIoTのプログラミングをやることです。モバイルやIoTのコントローラはハードウエアリソースが限られており、メモリやCPUを意識しながらプログラミングする必要があり、必然的にコンピュータの仕組みに詳しくなれるのです。

IoTは自由度が高すぎるので**ある程度枠組みが決まっているスマホのネイティブアプリ開発のほうがとっつきやすい**かなあと個人的には考えています。と言いつつ、RaspberryPiは意味もなく何台も買いました。

# おわりに
改めて読み返してみると[Livesense - 学 Advent Calendar 2017](https://qiita.com/advent-calendar/2017/livesense-gaku)に書いたほうがいいんじゃないかという内容になってしまいました。
いろいろ挙げてみましたが、つまるところ**"JUST DO IT"**という感じなんでしょうか。来年はもっとアウトプットを増やせるようにがんばっていきたいと思います :muscle: 

## 私の略歴
- 大学卒業後、ライターを5年くらいやる
- 退職してニートになる
- 独学でプログラミングをやりはじめる
- 職業訓練校に半年通ってAndroidに入門する
- 客先常駐のエンジニアとして三年半くらいがんばる
- 昨年転職して今に至る

[^1]: 「主催していました」と過去形なのは、中心になっていた参加者のライフステージの変化により（主に私なんですが）、定期的に開催するのが難しくなって活動休止状態になっているためです。現状たまにランチ行って近況報告するだけのゆるい集まりになっています。