2023 First Quarter 振り返り

こんにちは、データエンジニアのJanosです。 これから4半期ごとに主に自分の勉強やアウトプットを振り返る場としてブログにまとめていこうと思います。 仕事のことは上場していることもあり守秘義務などありますのであまり書きません。

2023年1月~3月で何をしていたか

アルゴリズム演習

アルゴリズムの演習として現時点ではLeetCodeのmedium問題を解いていくということを行っています。

leetcode.com

もともと昨年春ごろから始めて昨年の終わりには400問ほど解いていました。

なぜ始めたかというと主な動機は次の2点です:

  • もともと競プロなどで出題されるようなオーソドックスな基礎的なアルゴリズムの知識と、それらを実際に実装できるという能力を確保しておきたかったため。
  • リモートワークなどで海外の会社への参画の敷居が低くなったこともあり、将来的にグローバルな就活でのコーディングテストに備えておきたかったため。

LeetCodeでは問題のジャンル分けがタグ付けでなされており、またUIなども使いやすくなかなかいいコーディング教育サービスだと思います。私は主にPythonで問題を解きたかったためTLE判定が言語別になされるところもgood pointでした。

このquarterでは主に動的計画法などの問題を中心に解いていました。動的計画法は去年の春頃に一度集中攻略をしたのですが、比べて格段に解けるようになっているとはいえ、まだまだ解けないケースがままあり熟練には距離があるように感じました。

LeetCode、2023年4月2日のstatus

Linuxカーネルの学習

この期間ではまたLinuxカーネルについて基礎的な知識を勉強しました。 具体的には昨年10月に購入した『Linuxのしくみ』という本をch.1 ~ ch.9まで読みました。

目次は次のとおりです:

第1章  Linuxの概要
第2章  プロセス管理(基礎編)
第3章  プロセススケジューラ
第4章  メモリ管理システム
第5章  プロセス管理(応用編)
第6章  デバイスアクセス
第7章  ファイルシステム
第8章  記憶階層
第9章  ブロック層
第10章 仮想化機能
第11章 コンテナ
第12章 cgroup

あとコンテナ、仮想化機能、cgroupといった内容を読み残しています。本書を読むことでプロセスやメモリ、デバイスアクセスといったソフトウェアエンジニアなら全く知らないわけはないものの、それらを雰囲気でやってきた自分のようなエンジニアにはとてもよい知見になったと思います。

もともとの動機は以前Dockerについて学習した際、Dockerfileの書き方はまあ理解できるのですが、実際に内部・システムの詳細についてさっぱりわかっていないという自覚があったためです。

重ねて調査するとUnionFSやcgroupsといった技術を応用していることはわかりましたが、詳しい文献には当時当たれませんでした…

いつかこのあたりを理解しないと”Dockerfile書けるマン”以上にならないなあと思っていました。この本を読むことで、だいぶどういった情報を狙っていけばいいのかわかるようになり、コンテナの技術文書でも見覚えがある用語・概念が増えました。

次の4半期でやることの展望

アルゴリズム演習

LeetCodeではmediumを500題は解きたいと思っています。そのためまた次のquarterでも4,50問ほど進めることを予定しています。 またそろそろ解けなかった問題の再演習を組み込んでいきたいと思っています。 今年の後半でhard問題への攻略も予定していますのでだんだん切り替えていく感じになるのかな。

またLeetCodeはもともとあくまで就活のためのサービスなので、どうしてもグラフ、ネットワークフロー、計算幾何といったジャンルの問題はかなり手薄になります。これを補うためにAtCoder Problemsの利用を検討しています。となると競プロに足りるだけのC++をできるようにする必要があり、こちらも対応しなくてはなりませんね…

OS / カーネル

Linuxのしくみ』の残りはもちろん、継続してさらに難易度の高い方向へ進みたいと考えています。まだ具体的には決まっていませんが次のテキストあたりを当たっています:

その他

あと直近で興味があるのは