エンジニア歴2年の振り返り
2020年4月1日で職業エンジニア歴2年を満了するため、その振り返り記事を書いてみたいと思います。
職業エンジニア1年目
職業エンジニア1年目はPHPを使ったB2Bの自社サービスを作っていました。
プログラミングの勉強はRubyでしていたので少し戸惑うところもありましたが、正直言語が違う事の弊害は大きくありませんでした。
■ Rails → PHP(ノンフレームワーク)
もっとも大きかったのはRailsという何でもしてくれるフレームワークで学んで来たド素人が、PHPでノンフレームワークで12年以上稼働している巨大サービスのコードを読むことが非常に大変だったことです。
最初の1ヶ月はただのテスターに近い状態で、時間が余った時はひたすらコードを読んでおけと言われて追いかけるも大き過ぎて全体像を把握することができませんでした。
途中から読めるようになってくると先人達の知恵とスパゲッティーが見えて少し笑みがこぼれました。リファクタリングしてレビューが通ると「勝った!」と心のなかで無駄に勝利の雄叫びを上げて歓喜していたことを覚えてきます。
■ migration → .SQL
RailsやCakePHPは触ったことが合ったのですがORMやmigrationファイル的なものが見当たらずどうやってデータの更新やDBの編集を行っているのかわかりませんでした。
先輩に聞くと.sqlファイルが大量に入っているこれがそうだ!と言われてやっぱりかと思いました。
SQL直書き文化で初心者はデータを見るのもmysqlコマンドで直接見ろとのお達しでSQLの勉強になって非常にいい経験ができたと思います。
■ Git → SVN
SVNは正直嫌いです。
正しく使えば使いやすいのかも知れませんが毎日pullして来ないとコンフリクトのオンパレードで、その会社ではレビューする時は編集したファイルのみを自分でディレクトリー構造を真似たものを作って会社のサーバーに置いて上司にレビューお願いします。と言って見て貰うものでした。
GitHubを知った状態でこれはちょっと地獄です。
ただ私は運の良いことに開発リーダーの方にある程度気に入ってもらえて鬼のようなレビュー連弾を頂いたおかげで半年経つ頃には開発リーダーの思想に染まったコードを書くようになり始めました
■ 自社サーバーとAWS
以外な事にAWSは一部導入されていました。
新しいもの好きな私の性格を加味してかAWSで実装されている新機能の改修をさせてもらってAWSを業務で少しだけ使うことができてとてもいい経験になりました。
しかし、実装していたものがとある有名サイトをひたすらクローリングしまくるもので、AWSからのアクセスを禁止されていたり同一IPからのアクセス制限に引っかかったりなどで色々対策を考えて結局自社サーバーのいくつかをうまく使って逃れる事で実装したした覚えがあります。つまり結局AWSで動かしたコードは殆どが自社サーバーで動いています。
■ 独学Laravel & Vue.js
情報は複数方面から取るのが当たり前だと考える私は直ぐにこのレガシー環境を脱出する方法を考えました。会社ではいくつか提案してみたもののgitをsvn-gitで一人だけgitをしようとするもバレて禁止に。Slackも禁止になりせめてもの抵抗で会社で唯一VSCodeを使っていました。
そんな私はプライベートでLaravelとVue.jsの勉強をはじめました。
既にフレームワークからかけ離れた浦島太郎状態の私は戸惑いつつも本を勝って自分で適当なものを作って遊んでいました。正直言ってこの時の勉強は後のLaravelやVue.jsへの新しい物への抵抗を無くす程度にしかなっていなかったと思います。
職業エンジニア2年目
2年目は既に転職していました。
1年目の会社はたったの9ヶ月間しか在籍していないので大変申し訳無い思いでいっぱいです。新しい物好きな私にはレガシー環境の自社サービスよりも比較的新しい技術を使い放題な受託開発のほうが魅力的に見えたようです。
■ Laravelを使った受託開発
転職した受託会社ではLaravelを使った受託開発案件に入りました。既に殆ど開発が終了しているサービスだったのであまり勉強にはなりませんでしたが既存のコードを見るのは割と好きなので良かったと思います。
その後、平行してLINE Botを使った小説アプリを一人で作ったり、モバイルアプリのwebviewアプリの改修をしたりと前職では絶対にやらないであろう案件をやることができて新鮮でした。
■ Laravel & Vue.jsを使いたくて勝手に導入
医療系のサービスの立ち上げ案件をやらせてくれるということで大きめの案件の立ち上げに張り切ってDockerでLaravel & Vue.jsでSPAで作り始めました。
しかし、途中で止められてDockerもVue.jsもSPAも社内でできる人が居ないから駄目だとストップが入りました。一応伝えてから導入したはずですが判断に時間が掛かったのか作っている途中で止められて少しがっかりしたのを覚えています。
その後、VagrantでLaravel & Vue.js開発させてくれる事になりました。Dockerは諦める事になりましたがVue.jsを導入してAPI本数の多いサービスを作らせて貰うことができてよかったです。
jQueryマンだったのでVue.jsを使う時の考え方をインストールするためにネットで調べまくったので新しい技術を独力で身につける事ができるようになりいい経験になりました。
■ レビューして貰えない身分
エンジニア2年目の半分は誰にもレビューされる事なく、むしろレビューする側に回っていました。私程度の技術力ならもっとレビューを貰って学習していきたいのですが色々と会社の方針で案件を跨ぐレビュー文化が禁止になってしまって少し悲しい思いをしました。
■ 副業でサービス立ち上げNuxt & Firebase
本業の開発もある程度知見が溜まって楽になってきた頃、副業でモバイルサービスのバックエンドを開発する案件を頂きました。これが職業エンジニア3年目からの本業になるのですが年齢の近いエンジニアと議論してサービスを作るのは非常に面白かったです。
ある程度作ったらつよつよエンジニアからレビューの嵐を受けたいのでそれまでは自分の中にある知識をアップデートしながら開発に打ち込んで行きたいと思います。
転職した理由
本当は「転職してしまった理由」と書きたかったのですが、日本人の言霊信仰ではありませんが自分を卑下したような言い回しにも捉えられる後ろ向きな言い方は止めておきました。
結論: 一人開発は会社に所属している意味を見失う
タイトルの回答です。
長らく一人開発でノンレビューで開発をしていると会社に所属する意味を見失ってしまいました。環境的な問題なので自分では変えることができませんでした。
理想の環境
ではどんな環境が良いのか?
と自分に問いかけてみた結果、どうやら私は自分のメンターとなる人に壁打ちをさせてもらえる環境で自分が主導で動いく事を理想としているみたいです。
「私が先陣を切って道を開く!」
「先生!私の道は正しいのでしょうか!!」
これが今の私の理想なようです。
戦なら真っ先に死にそうなキャラですね。
豊臣秀吉を理想像とする私には羽柴の姓を頂くイベントはまだ訪れていませんが、今は木下藤吉郎として獣道を歩んで行きたいと思います。
追記
私にとっての先生とは必ずしも常に近くにいる存在では無いようです。書籍や定期的に連絡を取ることができるメンター。いつか出会えたらいいな。