はじめに
Fintech系の自社アプリを開発するエンジニアとして1年間が経ちました。
今回の記事では、1年間で学んだことを振り返ります。
色々と書きますが、中には読んでいて「1年坊主が偉そうに」と不快に感じる方もいるかもしれません。
あたたかい目で読んでいただけると幸いです!
余談ですが、未経験からエンジニアに転職する際に書いた記事が以下です。
自分で読み返してみました。
勉強した内容だけでなく、独学する習慣の身につけ方や生活習慣を改善することにも触れています。
独学を継続するコツも書いているので、こちらも併せて読んでみてください。
対象読者
・未経験からエンジニアになって間もない方
・未経験からエンジニアになりたい方
・若手エンジニアを指導している方
・未経験エンジニアを採用しようか迷っている方
未経験から始めたため、最初は打ちのめされることもありました。
しかし、日々の努力や周囲のサポートを受けて、成長できたことを自負しています。
この記事では、技術的な成長や経験したことなど、個人的な体験を交えながら、1年間を振り返っていきたいと思います。
この記事で伝えたいこと
朝学習と朝散歩の習慣を身につけろ!!!
このあとから、1年間でやってきたことを長々と書いていきます。
いろいろやってきましたが、それらを達成できたのは「朝学習」と「朝散歩」の習慣があったからです。
以下をひたすら継続することで成果がでます。
・朝起きたらすぐに勉強を開始
・起きてから1時間が経つ前に勉強を一旦切り上げて、朝散歩へ
・15~30分散歩
・始業まで勉強
「朝学習」と「朝散歩」の習慣を身につけるべき根拠を書くとキリがないので書きません。
私が根拠として認識している本を紹介するにとどめます。
技術的な経験
この章では、業務で経験したことを列挙します。
Rails
新規機能開発・既存機能修正
自社アプリの開発をしました。
ユーザー向けの機能開発だけでなく、
カスタマーサポートチームや、マーケティングチームの要望に応えて、機能開発をすることも多々ありました。
Fintech 系の企業なので、堅牢なコードを書く考え方が身に染みていった感覚があります。
Rails
Ruby
Rubocop
のアップデート
自社アプリではRailsを主に使用しています。
Rails はマイナーバージョンのアップデートを担当しました。
アップデート作業は慎重にやる必要があり、たくさん調査してレビューしてもらった記憶が強く残っています。
Ruby はメジャーバージョンのアップデートをしました。Rails と比較すると労力は少なかったです。
Rubocop のアップデートも担当しました。
このときも調査をして学ぶことが多かったです。
他社APIを自社アプリに組み込み
アプリに必要な機能を自分たちで全部実装することは困難であるため、他社が提供するAPIを利用することがあります。
最初はAPIの使い方がよくわからず、エラーが頻発してしまいました。
ベテランエンジニアに教えてもらいながら、何とか実装することができました。
また、APIのレスポンスを受け取った後の処理についても、試行錯誤しながら実装していきました。
この時にAPIの仕組みや、Webhookのことを学ぶことができ、成長を実感しました。
Google Cloud
2つのアプリを1つのインフラに統合するタスクを担当しました。
業務では初めてインフラを担当して、最初は何もわからずめちゃくちゃ大変でした。
ここでは、Kubernetes
とTerraform
を使用したため、モダンな技術の経験ができたことが嬉しかったです。
最初は、Google CLoud のコンソール画面(GUI)でログやKubernetes の状態を見て確認していました。
しかし、ベテランエンジニアから、コマンドで確認する習慣をつけるようアドバイスをもらいました。
最終的には kubectl
コマンドを駆使してデプロイやデバックをすることができるようになりました。
本番反映するときに多少のシステムエラーが発生しましたが、コマンドでのデバックを身につけていたので、大きな問題にならず乗り越えることができました。
また、インフラを構築するだけでなく、下記の経験をすることができたのも、成長につながったと自負しています。
・本番反映作業時のスケジュール管理、作成
・本番反映作業時のタイムテーブルの作成
・本番反映時の緊張感のある雰囲気
・本番反映時のシステムエラーに対応
・他チームとの連携
詳細は別の記事にまとめる予定ですが、ざっと使用した技術をあげます。
Google Cloud
Kubernetes Engine
Cloud Strorage
IAM
BigQuery
Cloud SQL(DB)
MemoryStore(Redis)
Artifact Registry
Cloud Armor
Cloud DNS
Firebase Authentication
など...
Terraform
Terraform
1年間の心境の変化
0~1ヶ月目
最初の1ヵ月は下記のような状態でした。右も左もわからない不安な状態が続きました。
・ベテランエンジニアが何を言っているかわからない
・アドバイスをもらうが、そのアドバイスに含まれる用語や前提知識がわからない
・つまり、アドバイスの意味がわからない
・会議で飛び交う専門用語をググりまくる
2~3ヶ月目
この期間に開発やアップデートなどのタスクをやるようになりました。
ベテランエンジニアにアドバイスをいただきながら、何とかタスクをこなしていた感じです。
・実装して動作するが、パフォーマンスや再利用性などの考慮はできない
・まだもらったアドバイスを理解し切れないことが多い
4~6ヶ月目
だんだんとアプリケーションの理解が深まりました。
担当するタスクも少しずつ難しくなっていきました。
この期間で経験したことから、自分が書いたコードの意図や根拠を明確に説明できるようになってきました。
・シンプルな実装であればできるようになった
・複雑な部分はまだ難しいと感じることが多い
7~10ヶ月目
後輩エンジニアができました。
Railsでの開発で困ることが少なくなってきました。
拡張性や再現性パフォーマンスなどを意識してコードを書くようになってきました。
・ある程度複雑なロジックでも実装できる
・後輩にアドバイスする場面が増える
11~12ヶ月目
この2ヶ月はもっぱらインフラをやっていました。
前述していますが、Kubernetes
やTerraform
を経験できました。
・バックエンドとインフラが連携する仕組み
・インフラの全般的な知識
・Kubernetes
やTerraform
を経験
振り返ってみると、最初は自信がないし右も左もわからず不安でした。
しかし、ベテランエンジニアに支えられ、同僚と協力する(これについては後述)ことで成長できたと感じています。
最後の数ヶ月はインフラを担当して、文字通り右も左もわからないが再来しました。
ただ、粘り強く取り組めば完遂できることはわかっていたので、最後までやり切ることができました。
新人エンジニアは不安を抱えている場合が多いかと考えます。
指導をしたりメンターをしたりしている場合は、こまめに声をかけてあげてください。
質問や相談したいけど、まだ早いかなと躊躇している新人が救われるかと思います。
個人の勉強
業務以外で勉強したことを書きます。
色々やっていますが、一番時間をかけているのは、「Rails の Hotwire を使用してSPAのようなUXのアプリを開発」です。
参考として特に良かった教材を添えておきます。
・Rails の Hotwire を使用してSPAのようなUXのアプリを開発(実際に運用しています)
・Next.js でTODOアプリを開発(勉強用)
・Go でTODOアプリを開発(勉強用)
・インフラ
・以下の本で勉強
コミュニケーション
コミュニケーションにおいては、この一年で以下に重点を置いていました。
・端的に話す
・チームの雰囲気をつくる
端的に話す
コードを他者に説明するときに端的に話すことを心がけていました。
話し方のコツは専門書を読んでいただきたいですが、私が意識しているのは以下です。
・ワンセンテンス ワンメッセージ
・一文は60文字以下にする
・なるべく結論から話す
・難しい言葉をつかわない
チームの雰囲気をつくる
私が所属しているチームは、以下のような構成になっています。
・フルスタックのベテランエンジニア2名
・新人エンジニア5名
ベテランエンジニアと新人エンジニアでは力量の違いが有りすぎます。
どうしたら成長速度をあげることができるかを模索しました。
結論として、「気軽に相談し合えるチームの雰囲気」をつくることが肝要であると考えました。
そして、以下の取り組みを開始しました。
・新人でのコードリーディング、およびコードレビュー会
・新人同士での情報共有をNotionで共有
・新人でのコードリーディング、およびコードレビュー会
下記の記事で紹介しています。
(↑の記事を書いた時は新人が3人でしたが、今では5人になっています。)
新人でのコードリーディング、およびコードレビュー会を毎週実施しています。
↑の記事のまとめを引用します。
私たちのように未経験同士(新卒同士)が積極的に協力して仕事をしていくことで、
上司の負担を減らすだけでなく、自分たちの成長にもつながることが期待できます!
個人的にやっていて良かったなぁと思う事は以下の2点になります。
・ 自分が担当したタスク以外の知識を共有できるので成長速度が速くなること
・ 同僚同士の関係が良好になり仕事がスムーズに進むこと
未経験から転職した人や新卒の人は仕事に慣れず不安な気持ちを抱えることが多いかと思います。
同じような境遇の人同士が協力してお互いに成長しあい刺激を与え合う事が特に重要だと思っています。
・新人同士での情報共有をNotionで共有
これを始めたきっかけは以下の記事を見たことです。
この記事をチームに共有して、自分たちもやってみようと働きかけました。
情報共有や学びの共有はもともとやっていましたが、体系的にまとめる慣習ができました。
さらに、この取り組みは上司であるベテランエンジニアに評価されました。
私が所属しているチームだけでなく、「他チームとの情報共有ができるようにしてほしい」と言われました。
今後の目標
エンジニア2年生では以下を目標にやっていきます。
・朝学習と朝散歩を継続する
・毎月1冊の技術書を読む
・Ruby
だけでなく、Go
も勉強する -> バックエンドの知見を深める
・インフラの知見を深める
・個人開発のアプリを成長させる
とりわけ、個人開発のアプリを成長に重点を置きたいと考えています。
というのは、エンジニアリングだけでなく、アプリを使ってもらうための力が身に付くと考えるからです。
(デザインやマーケティングの能力)
個人開発のアプリはもう完成していて、公開もしています。
デザインやマーケティングにも力を入れる段階にきています。
また別の機会に紹介できるよう努めます。
まとめ
この記事で伝えたいのは、
朝学習と朝散歩の習慣を身につけろ!!!
です。
実際は個人差があって、朝にやれば良い、偉いというものでもありません。
自分なりの方法を確立して、それを継続することが大事です。
それから、プライベートも大切にしましょう。
私は毎日、毎週、毎月の楽しみを作るようにしています。
遊ぶのがうまいのもスキルの1つです。
最後に、ここまで読んでいただきありがとうございます。
偉そうに書いてきましたが、1年エンジニアをしただけの弱いエンジニアであることに大きな変化はありません。
少しでも早く強くなれるよう、良い習慣を継続していきましょう!