こんにちは、データエンジニアのJanosです。 これから4半期ごとに主に自分の勉強やアウトプットを振り返る場としてブログにまとめていこうと思います。 仕事のことは上場していることもあり守秘義務などありますのであまり書きません。
2023年1月~3月で何をしていたか
アルゴリズム演習
アルゴリズムの演習として現時点ではLeetCodeのmedium問題を解いていくということを行っています。
もともと昨年春ごろから始めて昨年の終わりには400問ほど解いていました。
なぜ始めたかというと主な動機は次の2点です:
- もともと競プロなどで出題されるようなオーソドックスな基礎的なアルゴリズムの知識と、それらを実際に実装できるという能力を確保しておきたかったため。
- リモートワークなどで海外の会社への参画の敷居が低くなったこともあり、将来的にグローバルな就活でのコーディングテストに備えておきたかったため。
LeetCodeでは問題のジャンル分けがタグ付けでなされており、またUIなども使いやすくなかなかいいコーディング教育サービスだと思います。私は主にPythonで問題を解きたかったためTLE判定が言語別になされるところもgood pointでした。
このquarterでは主に動的計画法などの問題を中心に解いていました。動的計画法は去年の春頃に一度集中攻略をしたのですが、比べて格段に解けるようになっているとはいえ、まだまだ解けないケースがままあり熟練には距離があるように感じました。
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のしくみ』の残りはもちろん、継続してさらに難易度の高い方向へ進みたいと考えています。まだ具体的には決まっていませんが次のテキストあたりを当たっています:
その他
あと直近で興味があるのは
並行プログラミング: 技術として面白そうであることはもちろん、並行プログラミングまわりはまるで無知である上、最近カーネルを勉強しているとだんだんその応用が出てくるので自然な延長で始めたい:
コンパイラ: 実は昨年はじめにHaskellでTiger Bookを読み始めたのだが、いろいろ同時には無理だったので頓挫してそのままになっている:
暗号理論: 数学・CS両面から興味があり、また楕円曲線などは自身が代数幾何学専攻だったためなじみもあるのでアドバンテージを活かせる:
統計: やはり本業はデータエンジニアですからね。学部 (数学科) のときに統計の授業もそこそこ取ったのですが、いまいち基礎が粗いと言わざるをえない…あとRCTなどの一般書を読んでいて社会問題への応用などに強く興味を惹かれた: