35歳未経験でエンジニアになった自分がこの一年でやったこと

# はじめに
35歳定年説、という言葉があります。
文字通りエンジニアの定年は３５歳までであるという意味ですが、逆に私は**３５歳で実務未経験から**エンジニアという道に踏み込みました。

転職から約一年が経ったので、この一年の振り返りの意味も込めて記事を投稿します。

# この記事の目的
- 未経験からエンジニアへ転進しようとしている人の応援がしたい！
- プログラム初心者に**「こんなクソ雑魚でもエンジニアになれるんだ！」**と希望を与えたい！

# 誰？
@m-coder と申します。２０１８年10月よりAndroidアプリエンジニアをやっております。使用言語はKotlinです。

# 経歴
（多少ぼかしが入っています）
学歴はほぼ**無**です。高卒です。理系ですらないです。
職歴はアルバイト生活ののち、3年ほど事務職でExcelマクロをしこしこ組んでいました。
いろいろあって去年の10月に今の会社へ転職し、実務未経験からAndroidエンジニアになりました。

# 入社前のプログラミングスキル
高校の頃からぼんやりと「プログラミングでゲームとか作れたら楽しそうだなあ」と思いつつC言語をかじってお決まりのようにポインタで挫折してみたり、VBでじゃんけんゲームを作って遊んでみたりしていました。

といっても「趣味でプログラム組んでます」と言えるほどの実力もなく、せいぜい画面一個の、2、３時間もあれば組めるようなアプリを数個作ってみたことがあるぐらい、という程度のプログラミングスキルでした。
クラス？オブジェクト指向？なにそれおいしいの？

# 今できること
アーキテクチャはクリーンアーキテクチャ、MVVMを経験しました。
当たり前ですがプロジェクトはGit管理です。
Androidの主要なライブラリ（Retrofit2、OkHttp3、RxJava(RxAndroid、RxKotlin)、Dagger2、Realm、Glide、Picasso、Data Binding、Android Architecture Components etc...）をとりあえず一通り使った、ぐらいの経験値を積みました。
テストはユニットテストやUIテストを少し書いた経験がありますが、まだまだ本格的に導入はできていません。
今はKotlin Coroutineを勉強中です。CircleCIやfastlaneを使った連携も機会があれば勉強したいと思っています。
デザインパターン？　あーそーゆーことね完全に理解した。

# 一年間でやったこと
入社前のスキルを見てもらうと分かるように、とにかくプログラマーとしては**ミジンコレベル**です。
なんなら情報系の学部で学んだ新卒一年目の後輩に知識で負けます。
記憶力も当たり前のように落ちてきており**危機感がハンパないです**。

そんな感じに口が裂けても「エンジニアです」とは言えなかった自分が、一年で「エンジニアです（小声）」と言えるようになるまでにやったことを書いていきます。

## 技術系全般の勉強方法
アーキテクチャなど、技術系全般の知識を身に付けるためにした勉強です。
### 技術系の記事に日常的に触れる
[Qiita](https://qiita.com/)、[Stack Overflow](https://stackoverflow.com/)をはじめとして、一日一回は技術系の情報に触れるようにしました。
私の場合は少しでも気になった記事は[Pocket](https://getpocket.com)に記事をストックしておき、時間が空いた時などに眺めていました。
ふとした時に「あれはこういう意味だったのか！」と気付いたりすることもあるため、意味がわからなくても、とりあえずストックする、というスタンスをとっています。

### 他人のソースコードを読む
おそらく先達のエンジニアの方々が百万遍ぐらい言っている事だと思いますが、自分でやってみても一番費やす時間が多く、一番学びも多かったのがこれです。
自分が関わったプロジェクト・関わってないプロジェクト・OSSなど、とにかくソースコードを読んで実行してブレークポイント設定して値がどう変わるか見て…というのを繰り返しました。

他人のソースを読むことによって
1. アルゴリズムなど、自分にはない発想の気づきになる →　自分の引き出しが増える！
2. 実装に不安を感じている部分の答え合わせになる（かも）
などのメリットがあります。

ただ、これ（他人のソースコードを読むこと）が普通に出来るようになったのはここ3ヶ月ぐらいで、それまでは読んでも「なるほど、わからん」となっていた事の方が多いです。
非常に勉強にはなりますが、初心者のうちはハードルが高い学習方法だというのも事実だと思います。

### 手を動かす＆わからないところはググる
当たり前の話で申し訳ないのですが、やはりプログラムはある程度自分で書かないと身につきません。
しかも私はクソ雑魚ですが職業エンジニアですので、期日内に動くアプリを提供しなければなりません。
~~どんなクソコードでもいいから~~とにかく動くものをと、ひたすら書いて、ビルドして、アプリをクラッシュさせて半泣きで修正するのを繰り返しました。[Logcat](https://developer.android.com/studio/debug/am-logcat?hl=ja)はいいお友達です。

そしてエンジニアに重要だなと実感したのは**ググり力**です。
抱えている問題を解決するコードをいかに早く見つけ出すかはものすごく重要で、~~正直動けばコピペでも良いと思います~~。
ググり力さえ身につければあなたももうエンジニアです。　※個人の感想です

## Android関連の勉強
Android、Kotlinの知識を身に付けるためにした勉強です。
### Kotlin助走教本を読む
有志の方がまとめられた[Kotlin助走教本](https://drive.google.com/file/d/0Bylpznm149-gTGRjOFRkWm9PODg/view)を3周ほど読みました。
導入部分などは今となっては少し古くなっていますが、Kotlinの基礎的な情報がまとめられており、今でも充分ためになります。

### 公式リファレンスをざらっと読む
[Kotlin公式](https://kotlinlang.org/docs/reference/)　※[日本語訳サイト](http://dogwood008.github.io/kotlin-web-site-ja/docs/reference/)あり　
のリファレンスになんとなく目を通しました。最初に全部読もうとしたりすると心が折れるので、ざっくりと流し読んだあとは文法に詰まったりした時に参照する、という利用方法です。

### カンファレンスのスライドを読む
少し知識が身についたら、DroidKaigiなどのセッションで発表されたスライドをガンガン読みました。
[DroidKaigi 2019 スライドまとめ](https://qiita.com/HanaleiMoon/items/07a38971c2ff00315ead)
[DroidKaigi 2018 スライドまとめ](https://career.levtech.jp/guide/knowhow/article/375/)
[DroidKaigi 2017 スライドまとめ(1日目)](https://freelance.levtech.jp/guide/detail/95/)
[Kotlin Fest 2019 スライド一覧](https://qiita.com/forests-k/items/68e71d3fe6e0cdb478bd)
[Kotlin Fest 2018 資料一覧](https://kotlin.connpass.com/event/91666/presentation/)
スライドの良いところは、**最新の技術のキャッチアップ**が出来るという点です。

「いまこういう技術が流行っている」「最新バージョンでこんな機能が追加された」といった情報は書籍等では得られにくいので、カンファレンス資料を追いかけるのが良いと思います。
Qiitaでも良いですが、この手の資料は発表者が顔出しで発表する資料のため、一定以上の完成度があるという利点があります。

参考までに自分は下記の優先順で読んでいきました。
1. 今自分がキャッチアップしようとしている技術近辺のスライド → Dagger、アーキテクチャ周りなどが多めでした
2. 現時点では関係ないけど将来的に使いそうだと思った技術のスライド(AAC、Coroutineなど) → 結果的にかなり役立ちました
3. 関係ないけど興味があるスライド → 息抜き

### 技術書はそんなに読まない
私の場合はですが、技術書はそんなに読み込んでないです。
（学習しはじめの頃に[速習Kotlin](https://www.amazon.co.jp/%E9%80%9F%E7%BF%92-Kotlin-Java%E3%82%88%E3%82%8A%E7%B0%A1%E5%8D%98%EF%BC%81%E6%96%B0Android%E9%96%8B%E7%99%BA%E8%A8%80%E8%AA%9E%E3%82%92%E4%BB%8A%E3%81%99%E3%81%90%E3%83%9E%E3%82%B9%E3%82%BF%E3%83%BC-%E9%80%9F%E7%BF%92%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA-%E5%B1%B1%E7%94%B0%E7%A5%A5%E5%AF%9B-ebook/dp/B07HQMNLCV)は読みました。安くてKotlinの要点がまとまっているのでオススメです。）

その中でも大変参考になったのは以下の３冊です。
1. [実践 Android Data Binding](https://nextpublishing.jp/book/10257.html)
2. [Master of Dagger](https://booth.pm/ja/items/1577764) → 現在進行形でお世話になっています。
3. [Android テスト全書](https://peaks.cc/books/android_testing) → まだ実践に活かせていませんが名著だと思います。

あとはほとんど[Qiita](https://qiita.com/)などの技術系記事にお世話になりました。
ブログ系でお世話になった率が高いのは下記です。
1. [Kenji Abe - Medium - ](https://medium.com/@star_zero)
2. [stsnブログ](https://satoshun.github.io/tags/android/)
3. [Y.A.M の 雑記帳](http://y-anz-m.blogspot.com/)


# 最後に
この記事が少しでも初心者の方や未経験からエンジニアになる方のお力になれれば幸いです。

「おめでとう！　@m-coder は　ミジンコから　**すこし大きいミジンコ**に　進化した！」
ってなれるように今後も頑張っていきます。