平凡な社会人の日記

平凡な社会人の日記です。怠惰な毎日を送っております。

未経験からソフトウェアエンジニアになって2年が経ちました。

これはなに

開発未経験からソフトウェアエンジニアになって2年が経ったので、自分が何ができるのか棚卸ししておくだけの記事です。

目的

  • これからエンジニアになる人への道標
  • 何やっているかを聞かれた時に投げつける用
  • 転職の際に職務経歴書に貼る用(今のところ予定なし)

自己紹介

こんにちは。さっちゃん(Twitter:@toshiakisan1127)です。猫が好きです。
物理学科を卒業して大学院を中退して未経験でソフトウェアエンジニアになりました。詳しくは過去記事を見てもらえればと思います。

physics-heibon.hatenablog.com

あれから2年と数ヶ月、今のところ何とかやれています。今回は1年目と2年目を振り返りつつ、技術の棚卸しを行います。毎年やるのは、新卒で入った会社の先輩に、自分が何ができるか分からなくなるからやっておいた方がいいと言われてその通りだなと納得したからです。一年目は以下の記事に書いています。
physics-heibon.hatenablog.com

ちなみに、特に転職を考えているからというわけではないです。たまにカジュアル面談とかやってますが、それでも結局今の会社がいいと感じています。別に会社が好きではないのですが、部の人たちは好きですし給料も3年目にしては悪くはないと思ってます。働き方も柔軟。何より学ぶことが多くありますし周りもみんなそれぞれすごいポイントがあって刺激になります。もちろん思うことはなくはないですが、それはどこに行ってもあるものなのでokです。

1年目

大学院を中退して6月の終わりに就職活動を始め、新卒でIT企業のポテンシャル枠の採用に潜り込みました。ソフトウェアエンジニアになりたかったので入社まで少しでもプログラミングに慣れようと、9ヶ月くらいAtCoder競技プログラミングをやったり、基本情報技術者試験JavaScriptの勉強をしました。2.5ヶ月の研修では、プログラミングに触ったことがない、または少し触ったことがある人たちで、JavaScriptから始まってVue, Spring boot, PostgreSQL, Dockerを使ってローカルで動く認証認可付きのチャットアプリを作成しました。この時は自分はたまたまリードする方だったので業務時間中は周りや他のチームの手伝いに行って業務後2時くらいまで勉強や検証を行っていました。ある日は朝5時まで同期とやっていて、研修で教えてもらった内容の深掘りをやったりして楽しかったです。これが青春かと思いました。

7月からは新規開発のチームにアサインされたのですが、まず業務で書くコードの膨大さに驚いて、1ヶ月くらいは何が分からないかも分からない状態でした。しかし、先にエンジニアとして採用されていた同期や周りの人に恵まれてなんとか...なっていたかは怪しいです。
9月あたりからは新しいマイクロサービスをツヨツヨエンジニアと一緒に立ち上げることになったのですが、ここでAWSの話が会議に出てきてまた何も分からない状態になりました。VPCすらよく知らなかったですし、それなんですか?と聞いたらAWSの英語ドキュメントを渡されて読めといわれたので頑張って読んでました。休日もAWSの勉強をして、11月にはAWS SAAの資格を取ったあたりから設計にも口を出せるようになって楽しかったです。

この頃はSpring bootでAPIを建てたり、AWS SAM(CloudFormation)でIaC化したり、LambdaをPythonで書いてCognito、Neptune、DynamoDBで認証認可の機構を作ってました。Auth2.0の勉強も必要に応じてやりました。

2月あたりにはkubernetesの勉強を始めて業務でHelmを使い始めたり、SAMでデプロイしていたものの管理が辛くなってきたのでTerraformに全書き換えしました。特にkubernetes周りはめっちゃ強くて良い先輩と一緒にペアプロしていて、日曜日にも二人で出社して誰もいない会社で踊るなど一番楽しい期間でした。

4月あたりからはフロントエンドの人が足りないと言うことで自分もvueを書いてました。プロダクトオーナーと要件の認識を合わせてUIを考えて合意を取ってから実装、バックエンドとの疎通、stgテストを行いました。これを7月まで続け、転職することになります。(転職理由については直接会って聞いてください、大体家庭の事情です。)

2年目

8月からは心機一転、新しい会社でtoBの大規模開発に参画しました。すでに出来ている文化にはなかなか馴染めず、最初の3ヶ月くらいは毎日つらいつらいと言っていましたが、この辛さは自分が選んだものであり、この辛さが自分の成長のためには必要だと思っていたので感情とは裏腹に計画通りだなーと客観的に考えていました。最初はフロントエンドの簡単な開発から入りましたが、大規模なシステムのコードを見るのは初めてだったのでまた途方にくれることになりました。しかし、前職ですぐに泣きつく重要さを理解していたので何も出来ずに時間が過ぎるというようなことはなかったように思います。会議で出た分からない用語は全部メモして、適当な人の時間を確保して壁打ちしてました。
そんなこんなで引き続きVue、Spring bootを中心に案件をこなしながら最近まで生きています。大規模開発ならではの事例として、大量のレコードを捌く時に適当にやっているとO(N^2)になってしまうところをO(NlogN)にするなど、競技プログラミングで培ったパフォーマンスを気にする実装が出来て興奮しました。「月刊 競技プログラミングは役に立つのか」A. 俺には役に立った!

やっていることとしては基本的に、企画の方がやりたいことに対して何のためにやるのか、どういう手段でやるのか、小さく早くユーザーに価値を届けるにはどうすればいいかを一緒に考えて、概要の設計をして見積もってGOが出れば詳細に設計したり実装、テスト、リリースまで行っています。
そんなこんなで最近は品質を保つためにチーム内で学習コンテンツを用意して半年に一度やってもらったり、パフォーマンス改善部隊としてパフォーマンスを測定する環境を整えて改善し、よくない実装が入ったら修正の提案をしたり楽しくやってます。また、Nuxt3も業務で触るようになりましたが、ルールがあってvueに比べて好き勝手かけないところが自分は大好きです。個人開発でもNuxt3 + app runnerを使っています。

技術

()はチームでは使っていたが自分は触っていないのであまり自信がない。思いついた順です。

  • フロントエンド
    • Vue2/3, Nuxt3
    • JavaScript, TypeScript
    • Vuex, Pinia
    • jest, MSW
    • axios
    • webpack, vite
  • バックエンド
  • インフラ
    • Docker
    • AWS
      • EKS/ECS
      • RDS
      • S3
      • Lambda
      • DynamoDB
      • Code シリーズ
      • Neptune
      • CloudFormation
      • CloudFront
      • あとなんか色々(面倒になった)

終わりに

AWS DOPと英語を勉強中!まったりがんばろ〜。