インフラエンジニアからソフトウェアエンジニアにロールチェンジして1年が経ち知ったこと
はじめに
私はもともとはインフラエンジニアでコードは全然書けず、それどころか書く機会を避ける傾向にありました。しかし、約1年前の2019年7月に異動を申し出てソフトウェアエンジニアにロールチェンジをしました。このnoteではロールチェンジしてどうだったのか?思っていた通りだったこと、違ったことなどを紹介します。
前提
前提として私がどういったエンジニアなのか説明します。
エンジニア歴は合計で5年ほどで、インフラエンジニアとして4年、ソフトウェアエンジニアとして1年ほど経験を積みました。このnoteの本題はこの1年で知ったことをお伝えすることです。
インフラエンジニアとしてはサーバー、ストレージ、ネットワーク機器のラッキング、配線、キッティング〜Windows、Linuxのミドルウェアの設定までのオンプレミス経験を2年、AWSでVPC、EC2、RDSなどのIaaSよりのサービスの構築・技術アドバイスを2年経験していました。複数の会社にまたがってこれらの経験をしましたが、どちらもいわゆるSIerという立ち位置でした。この当時はアプリケーションはまるで作れず、品質の悪いスクリプトをBashかPythonでかろうじて作れる程度でした。
また、学生(高専)時代の学科はコンピューターサイエンス(以降、CS)にほぼ関係が無く、基本情報技術者なども勉強した事が無いので体系的なCSの知識は無く必要になった時に都度調べて学んでいます。
新卒からエンジニアとして働いていたわけではなく、ハローワークで進められて何となくインフラエンジニアになりましたが、今ではエンジニアという仕事をとても気に入っており、業務に関係なく勉強したりイベントに参加するぐらいエンジニアの仕事が好きだし、技術が好きです。
どういった経験を積んだか
前述の通りSIerという立ち位置なので、顧客から依頼を受けてソフトウェアの開発を行いました。要件のヒアリング〜開発を担当していました。頻繁に直接顧客と打ち合わせの場を持ち、自分の担当範囲において報告や調整を行っていましたが、いわゆるリーダーロールではありませんでした。
使っていたプログラミング言語はPythonとTypeScriptです。フレームワークは使っていませんでしたが、フロントエンドを開発する際はReactを使っていました。バックエンド開発は全てAWSサーバーレスでの開発なので、特殊です。
使っていた周辺サービスやライブラリと合わせて列挙してみます、期間は結構ラフです。
・AWSサーバーレスでのAPI開発(Python): 7ヶ月
・AWS IoT、AWS IoT Greengrass、Amazon RDS
・フロントエンド管理画面開発(React): 3ヶ月
・GraphQL(Apollo Client)、React Hook Form、Material UI
・AWSサーバーレスでのAPI開発開発(Node.js・TypeScript): 2ヶ月
・Amazon DynamoDB
良かったこと
1人前になるまで待たずにまずロールチェンジ
仕事において自分の意思で新しいことに挑戦する際、 鍛えてから挑戦する or とりあえず挑戦してその中で鍛える という2択があると思います。私は後者を選択しました。これに関しては異動OKを出してくれた異動先の部署、快く送り出してくれた当時同じプロジェクトをやっていた某2名に感謝しか無いです😊。
日中は業務をこなしながら、わからないこと(言語が持っている関数やライブラリの使い方)は都度ググって対応、使えるようにはなったけど本質や根本的なことがわからないなどの場合は業務外で自分で調べたり、同僚に教えて貰ったり、調べる為のキーワードを貰ったりしていました。
Effective 〇〇(言語名)みたいな本を買って一度読んで(覚える&理解しきれなくても良い)脳内にインデックスを作って置くと、「あー、この部分もっとキレイに書けそうだけど、どうググって良いかわからん」みたいにならず「ここキレイに書けそう、あの本に書いてあったな!確認しよう!」ってなります。
もちろん、いきなり知らないことを業務にしたので最初は右も左もわからず、辛い of 辛いでしたが、成長効率はめっちゃ良かったです。
爆発的にできる事が増えた
アプリケーションが開発できるようになると能力が、
インフラエンジニアとしての能力 + ソフトウェアエンジニアとしての能力
になると思っていましたが、嬉しい誤算で実際は、
インフラエンジニアとしての能力 ✕ ソフトウェアエンジニアとしての能力
でした。時間と根性(それが一番大事なんだけど)さえあればオレは何でも作れるぜ!!って全能感を味わえます。キャッチアップしつつでOKなら大抵のロールのエンジニアが出来るようになりました、今後のキャリアにおいて選択肢がめちゃくちゃ増えて嬉しいです。
このプロダクトを開発者として応援したい!力になりたい!って思った時に、「どんなエンジニアロールで良いぜ!」って言えるの最高にカッコよくない?
想定外だったこと
ソフトウェア設計は業務でコードを書くだけではあまり学べない
優れたエンジニアと働いていれば、ソフトウェア設計も自然と学べると思っていたのですが、これは誤りでした。
要件や様々な事情に合わせて設計された優れたソフトウェア設計のリポジトリであったとしても、その過程や理由を知らずにチマチマと機能追加や修正をしているだけでは、ディレクトリ構成やどの層にどういった役割を任せるといったことは意外と理解もできないし(どこに書けば良いか感覚的にわかったやうので、理解する必要があまりない)頭に残りませんでした。
湧いてきた疑問は同僚に質問して解決していましたが、何時まで経っても自分で設計できる気がしなかったので本を読んで勉強する様になりました。イチオシは「ドメイン駆動設計入門 ボトムアップでわかる!ドメイン駆動設計の基本」です。今はこの本をTypeScriptで写経しつつ2周目をしています。
ソフトウェア設計以外も含みますが、例えば下記の本なども読みました。
・リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック
・Clean Architecture 達人に学ぶソフトウェアの構造と設計
・Webを支える技術 ―― HTTP,URI,HTML,そしてREST
あとがき
本当はもっともっと伝えたいことあるのですが、うまく上手く文章化できず、エタりたくないのでここまでで切り上げます。😭
もっと聞きたい!って方はガンガン、オフ・リモ飲みに誘って頂ければいくらでも話します!また、Twitterとかで雑にメンションで質問してくれればお答えします!
私はいま、ソフトウェアエンジニアをやれてとってもとっても幸せです!!
以上した!
この記事が気に入ったらサポートをしてみませんか?