All Articles

2022 年前半で勉強したいこと

2022 年になったので、これから半年の勉強の目標を書いていきます。

まずはざっくり

自分は情報系の学校出身ではない (というか大学生のときちゃんと勉強してない) こともあり、IT エンジニアとしてまず目指したいのは、

  • 有名大学の情報系の学部でちゃんと勉強した人がやったことは一通りできる

くらいです。

そういう理由と単に好奇心もあって、いわゆる低レイヤ的な内容が多めです。

読書

読書については

  • 半年で 100 冊

を目指します。

年間 100 冊は恒常的に超えるようになってきているのですが、半年で 100 冊は自分には少しストレッチ目標です。 (2021 年後半は、半年で 70 冊でした)

半年で 100 冊ということは、単純計算で月に 16 冊、つまり週 4 冊程度です。

この 3 ヶ月ほど読書量がかなり減っているので、まずは読書の習慣を復活させる工夫を考えてみます。

資格

勉強のマイルストンとして、資格もいくつかとりたいです。

まず目をつけているのは

  • CKA (Certified Kubernetes Administrator)
  • GCP Professional Cloud Architect
  • ネットワークスペシャリスト
  • 統計検定準 1 級

の 4 つです。

CKA、GCP Professional Cloud Architect、ネットワークスペシャリストの 3 つは、持っている知識 +α でいける気がします。

一番問題なのは統計検定です。

統計検定は 2 級をとったのが 6 年以上前なうえ、最近は数式にあまりふれていないので、なかなかハードルが高そうです。

本当はスクラムマスターもとりたいのですが、また今度かなと感じています。

友人との勉強会

友人との勉強会は (きっと) 今年も継続していきます。

その中で 1 つ目標にしたいのは、

  • 誰かが発表したテーマについて、後日、関連分野の本を読む + コードを書く

ことです。

話を聞くだけでももちろん勉強になりますが、やはり手を動かしてこそ自分のスキルとして定着します。

そこをしっかりやっていく習慣を作ろうと思います。

また、connpass グループ (StudyCo) で今後も公開勉強会を継続すると、自分が発表する番が 3 回ほどまわってきます。

そこで

  • 2 回は機械学習関連 (データエンジニアリングや MLOps を含む) の発表をする

ことを目標にしようと思います。

ブログ

ブログについては昨年の年間 113 記事に引き続き、年間 100 記事以上を目指していきたいです。

ということは

  • 半年で 50 記事

が目標になります。

そのためには月に 8 記事程度、つまり週に 2 記事程度ということになります。

読書した本についてや勉強したことについて、どんどん記事にまとめていこうと思います。

プログラミング言語

この半年で勉強したいプログラミング言語として、

  • アセンブリ言語 (x86)
  • C++
  • TypeScript

の 3 つがあります。

アセンブリ言語と C++ は、低レイヤを勉強するときにどうしても登場するためです。

ゆくゆくは Rust も身につけたいですが、まずは C++ からやっていきます。

TypeScirpt は普段から書いていますが、改めてちゃんと勉強しようと思います。

個人的に普段使いする言語があまり定まっていないのですが、JVM 言語を避けると、静的型付けのメジャーな言語は Go と TypeScript しかありません。 (C# も JVM 言語と同じ理由で除外)

Go は実行環境まわりは大好きなのですが、書き味がどうしても好みではないので、TypeScript を普段使いするようにがっつりトレーニングしようと思います。

興味としては Scala や Haskell なども勉強したいですが、それはまた今度にしておきます。

Web フロントエンド

仕事ではサーバサイドの実装や AWS や Docker・k8s などを使ったインフラ構築を担当することが多く、フロントエンドの知見には不足を感じています。

とはいえフロントエンドはちょっとしたツールやアプリケーションを開発したいときなども避けて通れないものなので、なんとなく書いていた

  • React
  • CSS

について改めて勉強しようと思います。

そして

  • Web デザイン

も少し勉強してみようと思っています。

自作

2022 年の前半では、以下の 4 つを自作してみたいです。

  • コンパイラ
  • カーネル
  • シェル
  • デバイスドライバ

コンパイラについては後でも書きますが、まずは昨年末に着手し始めた Nand2Tetris (『コンピュータシステムの理論と実装 ―モダンなコンピュータの作り方』) をサクッと完走してしまおうと思っています。

他にも

  • TCP/IP プロトコルスタック
  • RDBMS
  • 組み込み OS
  • GC
  • CPU (物理)
  • Web サーバ
  • Web ブラウザ
  • ゲームエンジン
  • 正規表現エンジン

などなど自作してみたいものはたくさんありますが、まずこの半年ではコンパイラ・カーネル・シェル・デバイスドライバが目標です。

コンパイラ

コンパイラについては Nand2Tetris の簡単なものを作るだけでなく、もう少し “ふつう” のツールや関連するアルゴリズムなども知っておきたいです。

例えば現状気になっているのは

  • Lex
  • Yacc
  • LLVM

あたりです。

とりあえず

の 3 冊をとっかかりとして購入してあります。

組み込み

低レイヤについてさらにしっかり理解したいので、

  • デジタル回路
  • 組み込み

についても勉強時間をとりたいです。

Raspberry Pi や Arduino を使った電子工作はしたことがありますが、PIC などのいわゆる「マイコン」はさわったことがないので、

  • PIC などのいわゆる「マイコン」をさわってみる

ことを目標にします。

メディアデータや XR など

その他、メディアデータや XR といった分野については、引き続き少しずつ力を入れていきたいです。

具体的には

  • 画像や動画データの処理
  • 音声認識や自然言語処理
  • Unity
  • Blender

あたりに手を出していきたいです。

あと

  • NeosVR の LogiX で何かちょっとしたものを作る

というのも目標です。

まとめ

以上をまとめると、これから半年の目標は…

  • 全体

    • 技術書中心で本を 100 冊読む (週 4 冊のペース)
    • ブログ 50 記事書く (週 2 記事のペース)
  • アプリケーション

    • TypeScript をばっちり習得する
    • React、CSS を改めて勉強する
    • Web デザインを少しかじってみる
  • 低レイヤ

    • アセンブリ言語、C++ を最低限理解する
    • コンパイラ、カーネル、シェル、デバイスドライバを自作する
    • Lex、Yacc、LLVM について学んで “ふつう” のコンパイラを作る
    • デジタル回路と組み込みについて勉強し、PIC などのマイコンをさわる
    • ネットワークスペシャリストを取得する
  • クラウドコンピューティング

    • CKA を取得する
    • GCP Professional Cloud Architect を取得する
  • 統計・機械学習

    • 公開勉強会で 2 回は機械学習関連の発表をする
    • 友人との勉強会で誰かが発表したテーマについて、後日関連分野の本を読む + コードを書く
    • 統計検定準 1 級に合格する
  • メディアデータ・XR

    • 画像や動画データの処理をやってみる
    • 音声認識や自然言語処理をやってみる
    • Unity で何か作る
    • Blender で何か作る
    • NeosVR の LogiX で何か作る

という 20 個になります。

ということは、どうやら週 1 個くらいのペースで達成していく必要があるようですね。

これ以外に仕事もあるわけですし、正直多いと感じていますが、ぎりぎり不可能ではないと思います。(本当に不可能じゃない…?)

この目標を達成できるよう、濃い半年を過ごしていこうと思います。