未経験からARスタートアップエンジニアになった1年を振り返ってみた

こんにちは。
この記事は[AR Advent Calendar 2018](https://adventar.org/calendars/2956#list-2018-12-13)の14日目の記事です。

ARのスタートアップでエンジニアとして働き始めて1年になりました。

最近こんなものつくってます。
<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">デモだよ <a href="https://t.co/VWf2LkFinv">pic.twitter.com/VWf2LkFinv</a></p>&mdash; そーま (@masoma101) <a href="https://twitter.com/masoma101/status/1072481795646636032?ref_src=twsrc%5Etfw">2018年12月11日</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

しかし、実は1年前までは新規事業の立ち上げやコンサルタントをしており、エンジニアとは無縁のところで生きていました。

ちょうどプログラミングを始めて1年ということで、未経験から1年でどのように学んできたかをまとめてみました。

自分自身、未経験からどうやって学んでいけばわからなかったり、本当にエンジニアになれるのか不安でした。
自分のように未経験からエンジニアに挑戦をされる方が読んで自分でもやれると思っていただければ幸いです。

下記のように整理しました。
-　どのようなものを作ってきたか
-　実践してみてよかったこと
-　実践してよくなかったこと
-　実践してよかったかわからないこと
-　後悔してること

※個人の主観部分もありますのでご了承の上お読みください。
※もし他にもオススメがある！って方は、こそっと教えて頂けると幸いです。

#どのようなものを作ってきたか

- ######チュートリアル(制作期間：1ヶ月)
    - [Unityの教科書 Unity 2018完全対応版 2D&3Dスマートフォンゲーム入門講座 ](https://amzn.to/2RUkGt3)
        - とても丁寧に説明があり、こちらを1冊目に選んだのは後から振り返っても本当によかったなと思います。
    - [Unity5 3D/2Dゲーム開発実践入門　作りながら覚えるスマートフォンゲーム開発](https://www.amazon.co.jp/dp/4883379671/ref=asc_df_48833796712548949/?tag=jpgo-22&creative=9303&creativeASIN=4883379671&linkCode=df0&hvadid=295723231663&hvpos=1o2&hvnetw=g&hvrand=15869839430610819762&hvpone=&hvptwo=&hvqmt=&hvdev=c&hvdvcmdl=&hvlocint=&hvlocphy=1028853&hvtargid=pla-524447509586&th=1&psc=1)
       - UnityのVerが異なったため結構引っかかるところも多く、個人的にはやらなくてよかったなと思います。

- ######対戦脳トレゲーム（制作期間：1.5ヶ月)
    - ミニゲーム集のようなものを作りました。
    - Unity基本操作/Unetを学びました。
        
- ######ARチュートリアル（制作期間：0.5ヶ月）
    - [UnityによるARゲーム開発 ―作りながら学ぶオーグメンテッドリアリティ入門](https://www.amazon.co.jp/UnityによるARゲーム開発-―作りながら学ぶオーグメンテッドリアリティ入門-Micheal-Lanham/dp/4873118107/ref=sr_1_4?ie=UTF8&qid=1544764380&sr=8-4&keywords=オライリー+unity)
        - GoogleのAPIやARkitの使い方を学べます。内容としては少し難しかったですが、ポケGOのようなものが作れるということで楽しく開発をすることができました。
    - [ARKitとUnityではじめるARアプリ開発](https://www.amazon.co.jp/ARKit%E3%81%A8Unity%E3%81%A7%E3%81%AF%E3%81%98%E3%82%81%E3%82%8BAR%E3%82%A2%E3%83%97%E3%83%AA%E9%96%8B%E7%99%BA-%E8%96%AC%E5%B8%AB%E5%AF%BA%E5%9B%BD%E5%AE%89/dp/4798054364/ref=sr_1_3?ie=UTF8&qid=1544764449&sr=8-3&keywords=ar+unity)
        - ARkitの基本機能を簡単に学ぶことができました。
    
- ######AR * 位置情報ゲーム(制作期間：4ヶ月)
    - シナリオAR脱出ゲームを作りました。
    - LINEのようなチャットUI/GPS/AR/データ保存を学びました。
    
- ######ひたすら知識インプット(期間：1.5ヶ月)
    - [ARの教科書](https://www.amazon.co.jp/AR%E3%81%AE%E6%95%99%E7%A7%91%E6%9B%B8-Dieter-Schmalstieg/dp/4839965366/ref=sr_1_9?ie=UTF8&qid=1544764449&sr=8-9&keywords=ar+unity)
    - [コンピュータはなぜ動くのか～知っておきたいハードウエア＆ソフトウエアの基礎知識～](https://www.amazon.co.jp/gp/product/4822281655/ref=oh_aui_detailpage_o01_s00?ie=UTF8&psc=1)
    - [プログラムはなぜ動くのか　第２版　知っておきたいプログラムの基礎知識](https://www.amazon.co.jp/gp/product/4822283151/ref=oh_aui_detailpage_o02_s00?ie=UTF8&psc=1)
    - [ネットワークはなぜつながるのか 第2版 知っておきたいTCP/IP、LAN、光ファイバの基礎知識](https://www.amazon.co.jp/gp/product/4822283119/ref=oh_aui_detailpage_o01_s00?ie=UTF8&psc=1)
    - [イラスト図解式 この一冊で全部わかるサーバーの基本](https://www.amazon.co.jp/gp/product/4797386665/ref=oh_aui_detailpage_o02_s00?ie=UTF8&psc=1)

- ######DEMO制作(制作期間：2ヶ月)
    - AR体験をできるTipsやDEMO開発/FireBaseの活用
    - Shader/FireBaseを学びました。

- ######参考書（にしているもの）
    - [C#実践開発手法 (マイクロソフト公式解説書)](https://www.amazon.co.jp/gp/product/4822298477/ref=oh_aui_detailpage_o07_s00?ie=UTF8&psc=1)
    - [実例で学ぶゲーム3D数学](https://www.amazon.co.jp/%E5%AE%9F%E4%BE%8B%E3%81%A7%E5%AD%A6%E3%81%B6%E3%82%B2%E3%83%BC%E3%83%A03D%E6%95%B0%E5%AD%A6-Fletcher-Dunn/dp/4873113776/ref=sr_1_1?ie=UTF8&qid=1544764639&sr=8-1&keywords=3d%E6%95%B0%E5%AD%A6)
    - [Unityゲーム プログラミング・バイブル](https://www.amazon.co.jp/gp/product/4862464130/ref=oh_aui_detailpage_o02_s00?ie=UTF8&psc=1)

- ######その他、勉強のために読んだ
    - [Team Geek ―Googleのギークたちはいかにしてチームを作るのか](https://www.amazon.co.jp/gp/product/4873116309/ref=oh_aui_detailpage_o00_s00?ie=UTF8&psc=1)
    - [スクラム　仕事が４倍速くなる“世界標準”のチーム戦術](https://www.amazon.co.jp/%E3%82%B9%E3%82%AF%E3%83%A9%E3%83%A0-%E4%BB%95%E4%BA%8B%E3%81%8C%EF%BC%94%E5%80%8D%E9%80%9F%E3%81%8F%E3%81%AA%E3%82%8B%E2%80%9C%E4%B8%96%E7%95%8C%E6%A8%99%E6%BA%96%E2%80%9D%E3%81%AE%E3%83%81%E3%83%BC%E3%83%A0%E6%88%A6%E8%A1%93-%E3%82%B8%E3%82%A7%E3%83%95%E3%83%BB%E3%82%B5%E3%82%B6%E3%83%BC%E3%83%A9%E3%83%B3%E3%83%89/dp/4152095423/ref=sr_1_16?ie=UTF8&qid=1544765908&sr=8-16&keywords=%E3%82%A2%E3%82%B8%E3%83%A3%E3%82%A4%E3%83%AB)
    - [アジャイルサムライ−達人開発者への道−](https://www.amazon.co.jp/%E3%82%A2%E3%82%B8%E3%83%A3%E3%82%A4%E3%83%AB%E3%82%B5%E3%83%A0%E3%83%A9%E3%82%A4%E2%88%92%E9%81%94%E4%BA%BA%E9%96%8B%E7%99%BA%E8%80%85%E3%81%B8%E3%81%AE%E9%81%93%E2%88%92-Jonathan-Rasmusson/dp/4274068560)
    - [リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック ](https://www.amazon.co.jp/%E3%83%AA%E3%83%BC%E3%83%80%E3%83%96%E3%83%AB%E3%82%B3%E3%83%BC%E3%83%89-%E2%80%95%E3%82%88%E3%82%8A%E8%89%AF%E3%81%84%E3%82%B3%E3%83%BC%E3%83%89%E3%82%92%E6%9B%B8%E3%81%8F%E3%81%9F%E3%82%81%E3%81%AE%E3%82%B7%E3%83%B3%E3%83%97%E3%83%AB%E3%81%A7%E5%AE%9F%E8%B7%B5%E7%9A%84%E3%81%AA%E3%83%86%E3%82%AF%E3%83%8B%E3%83%83%E3%82%AF-Theory-practice-Boswell/dp/4873115655)
    - [入門 Python 3](https://www.amazon.co.jp/gp/product/4873117380/ref=oh_aui_detailpage_o07_s00?ie=UTF8&psc=1)
    - [わかばちゃんと学ぶ Git使い方入門〈GitHub、Bitbucket、SourceTree〉](https://www.amazon.co.jp/gp/product/4863542178/ref=oh_aui_detailpage_o06_s00?ie=UTF8&psc=1)
    - [〔入門〕はじめてのデータベース](https://www.amazon.co.jp/%E3%80%94%E5%85%A5%E9%96%80%E3%80%95%E3%81%AF%E3%81%98%E3%82%81%E3%81%A6%E3%81%AE%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9-%E8%97%A4%E5%B3%B6-%E4%B8%80%E6%9C%88%E7%94%B7/dp/4774155764/ref=sr_1_1?s=books&ie=UTF8&qid=1544767117&sr=1-1&keywords=%E5%85%A5%E9%96%80%E3%81%AF%E3%81%98%E3%82%81%E3%81%A6%E3%81%AE%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9)
   
- 今後読む予定のもの
    - [ドラゴンクエストXを支える技術 ── 大規模オンラインRPGの舞台裏 (WEB+DB PRESSプラスシリーズ)](https://www.amazon.co.jp/gp/product/4297101742/ref=oh_aui_detailpage_o04_s00?ie=UTF8&psc=1)
    - [スラスラわかるC# 第2版 (Beginner’s Best Guide to Programmin)](https://www.amazon.co.jp/gp/product/4798154636/ref=oh_aui_detailpage_o05_s00?ie=UTF8&psc=1)
    - [オブジェクト指向でなぜつくるのか 第2版](https://www.amazon.co.jp/%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E6%8C%87%E5%90%91%E3%81%A7%E3%81%AA%E3%81%9C%E3%81%A4%E3%81%8F%E3%82%8B%E3%81%AE%E3%81%8B-%E7%AC%AC2%E7%89%88-%E5%B9%B3%E6%BE%A4-%E7%AB%A0/dp/4822284654)
    - [ゲームプログラミングC++](https://www.amazon.co.jp/%E3%82%B2%E3%83%BC%E3%83%A0%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0C-Sanjay-Madhav/dp/4798157619)
    

#実践してみてよかったこと
######一週間単位で強制的なアウトプットを行うこと
友人などに毎週土曜日に検証をしてもらう予定をいれ、何がなんでもその日までに終わらなければならない状況を作っていました。これは作業の波ができたり、具体的にアウトプットすることを定めるので作業効率が上がりました。

######「これは決まり！」
当初ですが、下記のような決まり文句みたいなものや構文などは「これは決まり！」と納得して、深く考えないで進めました。あまり最初から全てを理解するには時間もかかり、アウトプットできないことでやる気も低下します。

```c#
using UnityEngine;
using System.Collections;

public class Test : MonoBehaviour
{

}
```

######スクリプトを見て、何をしているか日本語で言い直しができるようになる
一方で、何もわからないままコードを使っていても応用できないので、どのスクリプトが何をしているか/どの順序でコードが読まれているかなどは丁寧に追いかけました。
そうすることで、次回同じ場面に出くわした時にどのメソッドを使えばいいかとわかるようになってきます。

######気分が前向きなものに取り組む
気分が向かないことをすると作業効率が落ちる性質だった為、これは徹底していました。幸いにも学ばなければいけないことが多かった為、他に作業がないという状況はありませんでした（笑）

######知ってる7割、知らない3割
これもよく言われます。上記とも絡むのですが、やる気の低下に繋がります。

######もくもく会に参加
これは本当にお勧めします。いくつかのもくもく会に参加しましたが、毎回何かしらの学びがあるものです。また周りは全員自分よりできる人なので、わからないことを聞いたり、どのように作業を進めているかを見るだけでも本当に肥やしになります。

######Unity1week参加
アウトプットを出し、且つ、他人が必ずプレイしてくれる環境はなかなかありません。Unity1weekが開催された後、全てのゲームを実況してくれるので実際に遊んでくれている人の反応が見れてとてもうれしいです。

######コード詰まったら一旦放置
1日考え続けた問題が、朝起きてやるとすぐ解決するという話をよくあります。作業にのめり込みすぎて視野が狭くなっていたりするので、「一旦放置」はとても有効です。

######発信の多いエンジニアをフォロー
先輩エンジニアたちは、学びなどをどんどん発信してくれます。Twitterのタイムラインで見るだけで生きた情報を仕入れることができます。

######他のエンジニアの人のエディタを見る
他人のエディタを見る機会はめったにないですが、エディタは毎日使うものなので、皆さん色々カスタマイズされています。これを真似ない手はありません。
もくもく会に参加やアポをとってエディタを見せてもらいます。

######ユーザーに触ってもらう見る
やる気の向上です。友人を毎週会って、どんどん触ってもらいました。エラーがでたとしてもうまくいったとしてもユーザーの反応が見れることは本当にうれしいものです。


#実践してよくなかったこと
######具体的な目的なくコードを読むこと/具体的な目的なく勉強すること
上記の「ひたすら知識インプット(期間：1.5ヶ月)」は失敗しました。

一本ゲームを作ったことで、もっと仕組みを理解したいと思い取り組んだのですが、目的もなく知識をだらだらいれるだけになってしまう上に、あまり使えない知識になってしまいました。

アウトプットベースで知識を入れた方が効率的ですし、何より楽しいです。

#実践してよかったかわからないこと
######基礎技術の勉強
コンピュータがなぜ動くのかなど学びました。しかしこれを学んだほうがいいかは正直わかりません。普段の開発で役立っている感じはしません。（フロントしかやってないからかもしれませんが。。）

ただUnityがコードを読む時にどのような順序で読むかなどの仕組みについては、早めに理解したほうが圧倒的にプログラムを書く時にプラスになります。

#後悔してること
######コードレビューをし合えるエンジニア仲間を持つのが遅くなったこと
本当に家（兼オフィス）に篭りきりでプログラムを書いている為、あまり自分のコードを見てもらう機会がありませんでした。最近やっとコードを見てくれる方と出会い、知らなかった自分の癖や当たり前に皆さんがやっていることを学べました。

あとエンジニア同士で話すのって本当楽しいです。普段はエンジニアが社内にいないので、知らなかったです。もっと早く知っとけばよかった。。。


#最後に
いかがでしたでしょうか？少々長くなってしまいましたが、ここまで読んでいただきありがとうございます。

私自身、エンジニアになりたての頃は、本当に今からやってプログラミングができるようになるのか？と毎日不安でした。しかし1年ひたすらインプットとアウトプットを繰り返すことで、自分でもエンジニアになれたなと思えるようになりました。

まだまだ未熟者ですが、今後も学び続けてユーザーにとって価値のあるプロダクトを作っていきたいです。