はじめに
自分は2年半前まで無職で海外放浪していました。そんな自分が会社に就職してからエンジニアとして働く現在に至るまでを振り返ってみました。
前職
某大学の数学科を5年で卒業(全然大学行ってない...)
→ガス会社の営業職に新卒で就職
→無職
→塾講師などフリーター
→期間工として工場労働
→東南アジアのあたりを無職で放浪
という、基本エンジニアとは全く関係ないことを色々としていました。ちなみに正社員期間は9ヶ月です。そんな自分をアルバイトとして雇って頂けたのが現在の会社でした。
エンジニアになる為にやっていたこと
コロナの流行により日本に戻ってきてから、3ヶ月ほどプログラミングの勉強を独学で行っていました。ただ身につけたことといえば、本当に基本的なfor文やif文などの理解くらいで、初心者によくあるpyhonで簡単なプログラムを書いてみる程度のことしかできませんでした。自力でサービスをリリースするなどというレベルとは程遠い感じでした。エンジニアとしてプロダクトを開発するモチベーションだけはあったのですが、今振り返るとあんなレベルでIT関係に就職できたのはラッキー中のラッキーでした。
2ヶ月目
一応エンジニアになれる前提で入社したものの、経験があまりになさ過ぎたので入社してからの2ヶ月間は開発とは関係ないサービス運営業務を行っていました。仕事後にドットインストールやUdemyを用いて毎日iOS開発の勉強をしていました。ちなみに入社して初めてmacを触りました。
8ヶ月目
開発業務のはじめは、半年ほどiOSの修正業務を行っていました。このとき会社の主力アプリは基本的にObjective-Cで構成されており、初心者の自分はこの言語仕様やレガシーなプログラムに結構苦しめられました。
半年やるとUiKit周りのことや、ビジネスロジックの修正方法についてなんとなく理解してきました。ただこのときはまだREST APIの構造をあまり理解できておらず、自分は取得したデータを整形して修正するくらいのことしかしていませんでした。
この頃会社のiOSアプリは肥大化したMVCでしたが、自分はアーキテクチャや巷でよく言われること(DRY,SOLID原則など)について殆ど理解がありませんでした。
従ってアプリを動かすことはできていましたが、可読性や作業スピードはあまり良くなく、バグを含んだアプリのリリース率は現在よりかなり高かったように思います。
またiOSを修正していたノリで、Androidの修正や新機能の実装も行うようになりました。
1年目
この頃になると、徐々にAPIサーバーの修正に関わるようになっていました。REST APIの構造も理解して、新しいAPIの作成をなんとなく一人でやり始めたのもこのあたり(のはず)でした。
このころ正直APIサーバーの構造はいまいちわかってなかったのですが、なんとなくのノリでも修正させてもらえたことで、理解が進んだと思います。勿論リスクはあったとは思いますが。
この頃は自宅でも友達とアプリ開発しており、SwiftとJavaを触っている時間が長かったです。
1年目半
この頃にはインフラ周りを少しずつ触り始めました。AWSの管理画面からステージング用のインスタンスを作成したり、簡単なWebアプリケーションの作成をEC-2から行ったりしました。
またWeb周りの修正もなんとなく行っていました。Angular-JSやCake-phpのフレームワークで作成された管理画面やクライアントアプリの修正、DB操作を行わない簡単なWebアプリケーションをEc-2からSpring Bootを使って作成するなどのことをやってました。
サービスを吹っ飛ばすリスクを考えると、本当によく触らせてくれたなという感じです。
また、この頃くらいにようやくアプリのアーキテクチャや巷でよく言われていることを何となく理解するようになりました。ちなみにMVC以外のアーキテクチャを触ったのも初めてでした。このくらいの時期で、なんやかんやの都合により開発リーダーになりました。
2年目
この頃会社で爆速で新規アプリを開発しなければいけないフェーズになってしまい、一時期はiOSを割と新規実装してました。以前よりは早く、多少はマシなコードを書くようになりました。アーキテクチャとかは後からのリファクタリングで入ったようです(自分はMVCでViewとModelの切り分けだけは意識しながら書いてました)。
それが落ち着いた後は、DBまわりの処理の高速化や長く発生しているバグやエラーの修正を行うようになりました。その後はバックエンド側の仕事が多めです。
特にバックエンドの仕事では負荷や速さ、料金、セキュリティなどを多少意識し始めるようになりました。
現在(約2年半)
主にAPIサーバー周りの修正やインフラ周りの仕事を行うようになりました。サイズが大きい処理の修正や、インフラまわりを修正する際にはまだまだリスク想定が足りていないと感じている今日このごろです。
今後
個人としては、きちんと問題を構造化して切り分ける思考をできるようになることが今後の目標です。具体的には、全く知らないことでも自力でググってテストを考えて抜け漏れなくリスク想定しながら修正できるようになることです。険しい感じはしますが。
あとは問題解決にする際に、もっとチーム全体にとってのリソース・リスクなどを考慮できるようにならなきゃなと感じています。これも習慣化していかなきゃですね。
最後に
最近会社に新しい人が増えているので、自分が経験してきたことをざっくり書いてみました。今後の自分を想像してもらう参考になると良いかもしれません(かなりニッチ)。他の会社のキャリアデザインはよくわかりません。
なにはともあれ、今後も少しずつ精進していこうと思います。以上。