🏄

社会人1年目、できるようになったこととか


もうすぐ社会人 1 年目が終わる。2 年目が始まる前に、1 年目で学んだことを棚卸し。

コーディング

就職してからコードを書く量が大幅に増え、さらに自分の書くコードの質が上がった。 あきらかに読みやすくなっているし、速度やメモリを気にしたり、変更容易性や拡張性を考慮したりできるようにもなってきた。 ひとえにプロダクト開発チームの技術力が高いおかげ。ありがたい。 まだまだ確度は低いけれど、考慮できるようになっているだけでも大きな成長。

Golang、Echo

この 1 年、メインで書いてきた言語。 今後もメインとして使っていくが、学ぶほどにわからないことが増えていく。今後も勉強あるのみ。

基本的なものばかりではあるが、そこそこ記事も書いていた。

Golang

Web フレームワークは Echo。まだ Echo をちゃんとみていないので、Echo がなにを隠蔽してくれているのかよくわかっていない状態。ここは課題。

クリーンアーキテクチャ

この 1 年は、ゆるめのクリーンアーキテクチャでアプリケーションを開発した。 学生時代は Laravel で MVC のアプリケーションしか作ったことがなかったから最初探り探りだったが、いまは慣れた。

レイヤーが分かれていること、依存性の逆転が逆転していること、ドメイン知識がドメイン層に閉じ込められていることなどなど。 理解が浅いながらも実装に迷いはなくなっている。ここから詰めていく。

マイクロサービス、gRPC

2 年くらいずっとモノリスでやってきたのが、今年になってマイクロサービスに転向した。実装がとにかくめんどくさい。 マイクロサービスのメリットはなんとなく理解しているつもりだけど、ちょっと自信がない。

これは BFF かな、これは SVC かな、という責務の分離も難しい。

AWS(S3、SQS、Lambda、KMS)

名前しか聞いたことがなくて、なんとなくしか理解できていなかった AWS。 実際に業務で使うことによって、理解が深まった。 S3 と SQS と Lambda を連携させてひとつの機能を作った。AWS のパワーを感じた。 Serverless Framework が便利。

React、Redux、Hooks

サブ言語としてタスクをこなしていた程度。それっぽく書くことはできるけど、ちゃんと理解はできていないくらいのレベル。 Vue が template ベースなのにたいして、React は JS ベース。React がどういうものかを知ることができた。 Styled Component とか Atomic Design とかフロントエンドの雰囲気を知れてよかった。Redux つらい。

Vim

以前からターミナルでファイルをいじるときに使ってたけど、今年から VS Code と Goland に Vim のプラグインをいれて、本格的に使うようになった。 まだまだ知らないことだらけだけど、現時点でもかなり実装しやすくなっている。

SQL

Laravel を使っていたころはほとんど Eloquent で事足りるクエリしか書いてこなかった。 SQL をそのまま書く機会は皆無。

いまはサービスが大規模になったのと、Golang の ORM がシンプルだから SQL を書かざるを得ない場面に遭遇することがある。 そんななか、クエリの速度を気にし始めたり、サブクエリとか CASE を使うようになったりした。あと、ORM が遅いことを知る。

ログと Datadog

障害対応で Datadog を使うなかで、ログの設計やトレースの整備がとても大切であることを知る。 まだ経験はないが、意識は確実に変わった。

OAuth、OIDC

Google API が絡む機能を実装した。認可のしくみとして OAuth を利用した。 そもそも認証と認可の違いがわからないところからのスタートだったが、なんとなく雰囲気を理解した。

FE と BE の連携

FE エンジニアと BE エンジニアがはっきり分かれている開発体制がそもそも初めて。 FE と BE が連携しながら 1 つの機能を作っていくのが新鮮だった。 FE が使いやすい API 定義を考えたり、API 定義を更新するタイミングを図ったり。 なかなか難しかった。

QA エンジニアとの連携

チームに QA エンジニアがいる環境が初めて。最初はどう関わればいいのかまったくわからなかった。 いまは QA がいないと不安。プロダクト開発においてものすごく大切な役割。

デザイナーとの連携

チームにデザイナーがいる環境が初めて。自分はエンジニアとしてデザインのたたきを詰めていく。 データ構造を意識した意見をしたり。デザイナーの仕事を間近で見ることができたのはいい経験だった。

ビジネスメンバーとの連携

連携というほど絡んではないけれど、自分が開発に携わったプロダクトを売ってくれる人がいる。 ユーザの意見をくみとって、開発側に伝えてくれる人がいる。 あらためて、プロダクト開発はビジネスとテックの両輪あってこそ成功するものなんだなぁと。

立場の違う人とはたらくということ

いままでは受託のシステム開発で、話し相手はだいたい BE エンジニアだった。 いまは toB の自社開発で、営業、CS、PO、デザイナー、QA、FE などさまざま。 立場は違っても目的はみんな同じ。そんな環境が新鮮だった。

タスクの優先順位

受託開発のアルバイトは与えれたタスクを淡々と実装していくのみだけど、社会人になるとそうもいかない。 実装に優先順位があるし、障害が割り込んだり、MTG があったり、プレゼンの準備があったり。 状況に応じて、ひとまず TODO にしたりもする。そういうのが判断できるようになったのが大きな進歩。

タスクの難易度

自分にはちょっと厳しいかなくらいのタスクを積極的に選ぶ。 スクラムは能動的に自分のタスクを選ぶから、かんたんなタスクを選ぶことだってできなくはない。 でもそこはあえて難しいタスクを選ぶ。

タスクの進め方

完璧にしてからみせようだなんて思わない。 設計の全体像を考えたら、その時点でレビューしてもらう。手戻りがないように。

アウトプット前提

コーディング規約とか積極的に社内 Wiki に書いていく。 書けるということは理解しているということ。書けないということは理解していないということ。 もっといろいろ書き出していきたい。

リモートワーク

自分にリモートワークが向いていることがよくわかった 1 年だった。

  • 通勤がなくてよかった。その分、仕事にまわせる
  • パフォーマンスが上がった。まわりに人がいると集中できないから
  • 必要以上に疲れなくなった。内向的だから刺激の多い環境にいるとそれだけ疲れてしまう

週に 1 度だけ出社してきたのだけど、出社する日は仕事をするというよりメンバーとコミュニケーションをとるイメージ。 週 1 で会うくらいがちょうどよかったりする。

あと、デスクチェアは超大切。

スクラム開発

毎週リリースとふりかえりをくりかえす開発体制を体験できた。 スクラムにかんする理解はまだ浅い。スクラムにはどんなイベントがあり、それぞれなんのために存在しているのか、まだ説明できない。

不勉強を反省した

社会人 1 年目の最大の気づきは、自分はまだプログラミングのプも理解できていなかったってこと。 2 年近く Laravel で開発してきたが、Go を書くようになってからまだまだ理解が足りなかったと思うようになった。 無駄に器用だから、なんとなくわかった気分になったらそのまま実装を進めることができてしまう。わかったつもりになっている。

Golang のことに限らず、AWS やら k8s やら周辺知識も勉強しないといけない。 毎日すこしでもいいから勉強する時間を作っている。

自分のなかで「理解した」の定義というか、理解の深さみたいなものも大きく変わった。 わかっていないことが自覚できるようになったんだからいいことだと思う。 が、同時に「自分にエンジニアが務まるのかな」みたいな不安とか焦りも生まれた。 とはいえ、エンジニアとしてそれなりに評価されているので、もうすこし続けてみる。

読んだ本

読破できていないものを含む。