Don't Repeat Yourself

Don't Repeat Yourself (DRY) is a principle of software development aimed at reducing repetition of all kinds. -- wikipedia

社会人5年目が終わった

社会人5年目が終わってしまいました。社会人4年目の終わりにも記事を書いたので、毎年恒例にしていきたいと思って今年も書きます。

今年できたこと

5年目で目標としていたもの

データサイエンスは、部署の変更に伴って触れる機会が多くなり、また自分でも一通り Kaggle の問題を解けるようになりました。ひとまずデータサイエンティストがどういう手順で処理をしていくかを知ることができて、私の中では満足した結果を得られたと思います。

分散システムについては、今年何冊か本を読むことができました。『Data Intensive Applications Design』『Designing Distributed Systems』という本を以前おすすめしていただいて読み、これらの概念を実際に業務でいくつか使って実装できました。今年はさらにマイクロサービス関係の知識を深めていきたいと思ったので、1冊か2冊くらいは深堀りできそうな本を読んで、また実際のプロダクトのアーキテクチャにいかしたいなと思っています。

関数型プログラミングの基礎分野については、今年大幅に進歩したと思いました。離散数学に入門して群論などを勉強できたのと、それで少し数学に慣れて、圏論の本も読み通すことができました。関数型プログラミングにおいては多くのモナドを組み合わせて実装を行っていくのですが、実際にモナドをどのように使ったらよいのかという話は、Scala関数型プログラミングの側面を使って DDD アプリケーションを構築する『Functional Reactive and Domain Modling』という本を通じて知識を深めることができました。これもまた、実際の業務に少し導入できました。

アルゴリズムについては、今年もまたサボってしまいました。というか、あまり興味がわかないのかもしれません。ただ、外資系のテック企業に就職する際には必須になってくるので(それに加えて英語もなんですけど)、キャリアを逆算するとかならず必要になると思います。どこかで絶対時間を作ってやります。どうやったらモチベーションが湧くかなー。

総じて今年は仕事が忙しく時間が以前ほどは取れませんでした。が、取れなかったなりに多くを勉強できた気がするので、私の中では満足です。もっとやれた、と思うと切りがなくなってしまいますし、ライフバランスが崩れてしまいそうなので無理はいけません。

仕事

  • テックリード2年生
  • 1からサービスを実装してリリースまで通した

まず、テックリード2年生でした。が、後述するように開発していたサービスに時間を大きく持っていかれることになってしまい、結果としてテックリードらしいことがあまりできなかったなと思っています。一方で、この4月からまた別のプロダクトを見ることになったので、そこでようやくテックリードらしい仕事ができるんじゃないかと思っています。

テックリードも2年生になると、見る幅が広がってきます。とくに職位(グレード)が、実は今年は通年で2段階上がったんですが、求められる仕事のレイヤーが変わってきた気がします。4月からは新人研修の担当になりました。また、全社の採用イベントに呼ばれることも増えました。部署の代表として何かに参加する機会も増えてきました。自分のプロダクトの成果とそういった組織全体の成果の評価比率のすり合わせをしていかないといけません。

仕事の大きな成果としては、やはり1からサービスを実装してリリースする経験をできたことだと思います。私はもともとアプリケーションエンジニアなので、AWS はあまりよくわかっていなかったし、またすでにリリースされているサービスをエンハンスするキャリアパスが多かったため、CI/CD などを自分で用意するという経験には正直乏しかったです。が、1からサービスをリリースしたことで、Docker コンテナを自分で考えて作って、Kubernetes の Pod の構成とかを考えて、Kubernetes 上の Pod に上手にアプリケーションを CD するところまで考えてやりきることができました。もちろん、人の手を借りはしたものの、0から100まで通して見ることができたのは、とても大きい経験でした。EKS を使った実際の構成はこの記事に書いてもらいました。構成の素案を私で考え、記事を書いてくれた彼と一緒にブラッシュアップしていきました。

Web のアプリケーションについては一通り見られるという自信はつきました。また、もともと得意だった JVM 上のパフォーマンスチューニングなどの強みも見つけられました。しかし、私はあくまでスペシャリストを目指したいと思っているので、一体どこに強みを置くかは最近の悩みでもあります。

自分の思う強みは他人に言われたものが正しいと思うものの、今年発見できてなおかつ自覚のある強みが1つあります。私はたぶん、抽象的に物事を考えたり、抽象度の高いものに言葉や名前を与えて整理するのが人よりも得意な人種の可能性が高いです。この強みが活かせる部分は、おそらくソフトウェアアーキテクチャ(システムアーキテクチャ)の考案なんだと思います。よりよいシステムのアーキテクチャを考えられるエンジニアになるために、もう少しコードを書く時間を増やしたいです。今年は理論の強化をしたので、実装の強化がしたいなと思っています。

個人で好きにやったもの

Rust.Tokyo を主催しました。プログラミング言語のカンファレンスを開くというのは初めての経験だったので、いろいろ戸惑いましたがなんとか無事終えることができてよかったです。みなさまに感謝。

Rust の LT での登壇については…今年は上述したとおり仕事が不意に忙しくなることが多く、「登壇するぞ!」と1ヶ月前に意気込んでも、その後2週間くらい大変で時間が取れず、結果的に発表が中途半端になってしまったなと思うことが何度も何度もありました。これは、素直にごめんなさいです。

Rust で登壇していたのは、そもそも私が仕事で Rust を使ってみたいなと思っていて、自分が登壇していればそれを口実に技術を導入しやすくなるからという裏の目的がありました。実際、仕事で Rust を使う機会が増えてきていて、この裏の目的は達成できています。それもあって、今年はちょっと登壇の回数を減らすと思います。

Rust のコミュニティには新しい人がたくさん増えてきていて、盛り上がりを感じます。今年度も Rust を楽しんでいきましょう!

また、多くの車輪の再発明もしました。具体的にはコンパイラ、CPU エミュレータ、ちょっとしたブラウザなどです。とりあえず疑問に思ったら実装してみて理解するというやり方、楽しいのでありだと思います。

プライベートについては、関わる人も増えてきて、またいろいろ変化もあったりして、自分ひとりの人生ではなくなってきたなという思いが強いです。今後も周りの方にいい影響を与えられる人間でありたいので、日々の研鑽を怠らないようにがんばります。

今年度(6年目)にやりたいこと

仕事は仕事でもう目標を立ててしまったので、主に自分の勉強の話を今年も書いておきたいと思います。

  • Write Code Everyday する: ちょっとやってみたいんですよね。ただ私、会食とかが多くて帰るのが0時とかそういった生活なんですが、どこまでやれるか…本当の Everyday はできないかもしれないんですけど、少しでもいいから業務以外のコードを書く日を増やしたいです。Project Euler とかなら目標立てやすいかな?あとは Leet Code を1日1問解くなど。いろいろ考えられますね。
  • いろいろ論文読みたい: なにかの役に立つわけでもなく、また、研究者でもないので完全に趣味ですが、そろそろ基礎知識がついてきたと思うので、論文読んで入門以上の知識を深めていきたいです。技術書を買っていると、永遠に入門者から抜けられない気持ちにたまになるので…
  • RISC-V エミュレータ作りたい: 作ってる人がいて、実際に xv6 が動いたようなので、自分もやってみたいなと思いました。興味があります。
  • 群論をはじめとする代数学を深めたい&余力があったら機械学習周りの数学やりたい: 証明込みで楽しみたいです。証明読むの好きなんですよね…。ということで、群論については興味をもったので、本格的な数学書を手元に用意しました。

あとは、その頃に発売した技術書を買っては読むみたいなことは、引き続きやっていきたいと思っています。