新規事業開発室 新卒1年目の山邊です。新規事業開発室のエンジニアが多く集まる関西支店(大阪)でBill One | あらゆる請求書をオンラインで受け取るを開発しています。
私は学生時代に趣味としてプログラミングをしていました。仕事としてプログラミングをしていく中で思った、趣味のプログラミングと仕事としてのプログラミングの違いを書いてきたいと思います。
コードの保守性
趣味でも仕事でもリーダブルコードで書くことは大事だと思います。ただ、個人の開発や趣味のプログラミングであれば、ある程度早くかけて正常に動いていれば OK な場合も多くあるでしょう。 しかし、仕事としての開発では、それと同じぐらい保守性が重要です。数年後に入ってきたエンジニアや数年後の自分がコードだけを見て、意図を理解できるように書く必要があります。
コードの保守性を保つためにはチームとしてコーディング規約やアーキテクチャを整備することが重要だと思います。もちろんBill Oneにもあります。 個人として出来ることとしては、他のメンバーのPR (Pull Request) や既存のコードを読んで学ぶことです。他の人のコードを素早く理解できるようになり、真似する事が上達の近道だと思っています。
変化は難しい
当たり前ですが、仕事ではプロダクトを作っているわけなので使っている技術を簡単に変えることはできません。Bill Oneでは React + Typescript や Kotlin を使っていますが、興味があるだけで、違う技術を使うことは簡単にはできません。 その点、個人での開発であれば、気にすることなく試してみることができます。なので個人で新しい技術を使ってみたり、勉強会などを通じて新しい技術を学んでいます。
もちろん、ライブラリはかなり自由に使うことができます。ライブラリの選定も重要な仕事の一つです。Bill Oneで使っているライブラリの採用基準が気になる方は同じチームの加藤が記事を書いているのでそちらを参考にしてください。
開発の優先順位
個人の場合はある程度、自分で優先順位を決めて開発できます。一方で仕事の場合は流動性が高く、自分の意志ではコントロールできない事が多いです。 ユーザーからのフィードバックや競合製品との比較、経営判断やコストなど、多くの要素が絡み合って優先順位が変わってきます。Bill Oneでは基本的な優先順位をPMが決めていますが、タスク内の開発の優先順位はメンバーがそれぞれ最終決定をします。 個人開発でも視野を広げて優先順位を決めると、より良いものができるのかもしれません。
開発分野
Sansan社内ではサーバーサイドとフロントエンドを分けているチームが多いですが、Bill Oneでは機能ごとに上流から下流まで全て一人で開発します。もちろん分けて開発するべきかどうかは議論の余地があるとは思いますが、個人的には広い分野を学びたいと思っているので、自分にはあっていると思っています。Bill Oneを開発しているだけで、GCP, React, TypeScriptや Kotlinなど幅広い分野が学べていると思います。
これは個人開発とも共通している部分でしょう。個人開発においても多くの場合は上流から下流までを実装する必要があります。この技術力は学生時代の趣味の技術力が活きるかなと思います。
責任感
個人的に一番重要だと思うことは、自分の書くコードに責任を持つことです。 Sansanは 名刺管理のサービスを提供しているので、個人情報の漏洩やインシデントに対してしっかりと向き合っています。もちろんBill Oneも同じで、責任を持ったコーディングが求められています。 インシデントを起こさないことも重要ですが、それでも起きてしまうことはあります。
実際に私もインシデントにはなりませんでしたが、表示系でエラーを出していた事があります。サポートへの問い合わせで発覚しましたが、良くも悪くも自分が書いたコードが原因だったので、すぐに対応する事ができ、発覚した日に修正をリリースする事ができました。 意志と意図を持って判断し、コーディングしておけば、インシデントが発生したとしても迅速に対応できると思います。(開発に利用しているサービスの障害などで、自分では対応できない場合もあります)
レビュー
個人や仕事で求められる能力はそれぞれですが、仕事で求められる技術は簡単には身につきません。私もまだまだ成長途中です。しかしコードレビューを受けることが学びに繋がります。 コードレビューの内容も仕事をしていくうちに変化します。初めは変数名やチーム内の流儀の指摘が多かった印象ですが、最近では仕様についての議論や設計の穴などが目立つようになりました。コメントの数も入社時は20を超える事が当たり前で60くらいまで伸びたPR (Pull Request) もありました。最近になって20コメント以下が多くなってきました。ちなみに他のメンバーは10コメント以下がほとんどなので、今後も気を引き締めて頑張ろうと思います。
レビューを受けて修正していく事で成長しているなと感じました。軽微な凡ミスが無くならないのは今後の伸び代という事にしておきます。
最後に
個人の趣味としてプログラミングをすることも、プロダクトを作っていくということもどちらも楽しいことだと思っています。 仕事で学んだことを個人の開発で活かし、個人で学んだことを仕事で活かして成長していきたいと思います。