ゆく年くる年 from 2020 to 2021

はじめに

初めてのHatenaの投稿です。

表参道にあるFintechのスタートアップでTechLeadをしているバックエンドエンジニアです。

自分も32歳になり、普通に仕事しているだけでは技術的に困ることはだいぶ減ったが、それに甘んじては駄目で、仕事以外で技術的にinputし、可能であればoutputもしていきたい。

そこで、年末年始に一年の振り返りと来年に向けての目標として、今年は何を学んだか、来年は何を学ぶかを整理したくなった。 仕事では、OKRが設定され、各自目標を立てたりすると思うが、そのプライベート版である。

普段は技術系ネタをqiitaに書いているが、技術な話かと言われるとそうでないのでHatenaを開設した次第である。

1年に1度しか更新しない想定なので普段は更新しないし、おそらく他人が見てもあまり面白いものではないだろうがまぁ気にしないことにする。 公に晒すことで「全然目標達成できてないダメなやつと思われたくない」という気持ちが生まれ、モチベーションには繋がるのではないかと思う。

もう2021/1/3であるが、「今年」= 2020 「来年」= 2021とする。

明日から仕事が始まる。仕事が始まると「仕事が忙しいしこのくらいだろう」と小さい目標になってしまいそうなので急遽今日書くことにした。

今年やったこと

ソフトウェア設計、アーキテクチャ

今年はこの辺り割と勉強した。

実践ドメイン駆動設計を2周ほどして読み込んだ。

他に軽量なDDDの本を2冊読んだ。

DDDに対する理解はかなり深まったと思う。だが、実践しないと身に付かないと思うので仕事でも意識していきたい。

マイクロサービスアーキテクチャを読んだ。6月くらいからTechLeadになりチームで輪読会をするようにしているが、最初に選んだ本だ。訳以外は素晴らしかった。

データベース、分散システム

このあたりのプロフェッショナルになりたいと思いつつ、何も行動できずにいたら、以下の輪読会を発見し、8月から参加している。 この本は前半がPostgres/MySQLなどの伝統的なRDB実装に関わるもの、後半が分散システムという流れになっている。この輪読会に参加し、一気に火がついた。

データベース、分散システム共にあくまでユーザでしかなく、内部実装に全然詳しくないがなんとか一歩ずつ進んでいきたい。 今年はこの辺りに具体的に行動できただけでもよかったと思う。

databaseinternals.connpass.com

AWS、Terraform

前職がオンプレだったこともあり、経験が薄く苦手意識があったがだいぶ克服できた。

業務でインフラ管理はSREが基本的に行うが、自分が関連するプロジェクトのPRは基本的には目を通しているし、理解できるようになってきた。

自分のAWSアカウントでTerraformを書きながら勉強しつつある。

来年やること

データベース、分散システムの理論

  • 既出の輪読会で読んでいるDatabase Internalsをよむ
    • すでに7,8割読んでいるが前半の方はだいぶ流してしまったので読み直す
    • 輪読会に参加していれば必然的に達成できるはず
  • データ指向アプリケーションデザインをよむ
    • すでに2割ほど読んでいる
    • 会社で輪読会しているのでこれは達成できるはず
  • 分散処理システムを読む
    • 160ページの軽量な本。7割ほど読んでいるので読み切る
  • kumagi - Qiitaさんのデータベース、分散システム関連のブログを全部理解する
    • すでに7,8割読んでいるが基礎知識がないと理解が難しいところもある。読んでいるところも読み直す
  • Daniel Abadiさんのblogを2015年以降(14Post)を全部理解する
    • FaunaDBのアドバイザーらしく業界では有名人らしい。既に読んだのもあるが素人にもわかりやすくてとても良い。勉強になるので読んでおきたい
  • The Internals of PostgreSQLを全部読む
    • Database Internalsもそうだがわりとふわっとしていて、「でどういう実装なの?」となる時がある。Postgres実装についてざっくり説明してくれているので読んでおきたい

データベース、分散システムの実装

  • goleveldbを全部読む
    • 2万行なのでなんとかなるはず?
    • leveldbとかsstableとか本読んでなんとなくわかった気になっちゃうがちゃんと実装を理解したい
    • 本当はrocksdbを読んだ方がいいのだろうが、こちらは30万行以上あったので諦める
  • btreeを自分で実装してみる
    • 本で読んだことのみを参照して自分で実装してみる。メモリではなくちゃんとディスクに書き込むところまでやる
    • ディスクに書き込むと急に難易度が上がり、手が止まる気がする。そのあたりの知見はgoleveldbを読むことで解消すると思っている

Go

  • Go本体のhttp実装(http2関連、TLS関連処理を除く)を読んでその知見を7つ以上ブログとしてoutputする
    • すでに半分くらいは読んでいるはず
  • Go言語による並行処理を読む
    • どちらかというとgoルーチンのランタイムの動作原理が知りたい。256ページなのでサクッと読めるはず

Kubernates

  • イラストでわかるDockerとKubernetesを読む
    • 150ページなのでそんなに大変じゃないはず
    • 正直Kubernetesに興味があるかと言われるとそうでもない。業務ではECS使って特に問題ない。だけどバックエンドエンジニアの必修科目になりつつある気がするので基礎的な部分は理解しておきたい

ソフトウェア設計、アーキテクチャ

2022年の予定

だいぶ気が早いが、一応想定だけ

  • etcdをある程度読む
    • Database Internals読んで思うが分散システム周りは理論がわかっても実装には結びつきずらい。
    • 18万行なので辛いが、これでも分散システムのミドルウェアの中ではだいぶ小さい方
  • アルゴリズムを勉強する
    • つまみ読みしている蟻本とか良さそう
    • 来年勉強したいがちょっと時間なさそう

できそうか

goleveldbがなければイケる気がする。 正直、goleveldbを読み進めるうちに、色々な背景の知識が必要なことがわかり、遠回りしてだいぶ時間がかかるといったことがおきそうではある。

また、業務で必要になった知識を得るためにそちらが優先度が上がるといったことはありがちである。が、今の目標にはバッファは全くない。 その場合はしょうがない。

来年から息子が保育園に通うこともあり送り迎え等割と時間を取られ全然できなかったというオチもあり得る。

一旦はそういったことを考慮せず、いれてみた。来年末に振り返ってみて目標達成していたら自分を褒めたい。