2018年の振り返り
今年もそろそろ終わろうとしているので、2018年に学んだことをまとめておきます。 今年は、下半期での学びが濃かったです。
分岐点は、TCFMに出合ったことと、仕事のプロジェクトを変えたこと、ですね。 その中で、自分はやはり低レイヤの技術が好きなんだ、ということが自覚できたため、下半期はひたすら低レイヤ技術を楽しんでいました。
とにかく、15分でも30分でも毎日プログラミングする、という目標のもと、活動したのも良かったです。
サマリ
2018年
- テックリードっぽい役割で頑張った
- TCFMとの運命の出会い
- 低レイヤ技術に広く浅く色々手を出した
- アウトプットを増やした
- 毎日プログラミングした
- Rustとの運命の出会い
2019年やりたいこと
- アウトプットをさらに増やす
- 低レイヤ技術の深堀り
- 毎日プログラミングする
- Rustの仕事を取ってくる
2018年
テックリードっぽい役割で頑張った
おしごと上半期~統合コックピットシステム~
上半期は、統合コックピットシステムの開発を継続していました。6月で私自身の希望により離脱しました。他案件との掛け持ちを合わせると2年ほどやっていたことになります。 このプロジェクトでは、Linuxユーザーランドのミドルウェアとアプリケーションを担当していました。
途中からはテックリードの役割をやっていた、と思います。チーム全体の生産性を上げるためにあれこれと動いていました。
- GitLab / GitLab CIの立ち上げとレクチャー
- Merge Requestベースの開発プロセスを導入し、コードレビューを担当
- unittestの導入
- C++勉強会を開催
- ジュニアメンバーのメンタリング
- アーキテクチャレベルのリファクタリング
- 設計 / 実装の相談に対応
- 設計プロセスの整備(これはうまくいかなかった…)
PM兼アーキテクトとは、設計やチームメンバー育成の方針が異なり、しばしば対立しました。 目の前の成果を挙げることに注力しており、中長期的に見てチームが強くなれるような施策が考えられていないように見えました。なので、自分でやることにしました。
GitLabを中心とした開発プロセスを整備していったことで、かなり状況が改善しました。 コードレビューの導入も、GitLabを立ち上げていたので、やるだけ!でした。 C++勉強会は、GitLabプロジェクトのwikiベースで実施し、プロダクトコードの問題ある箇所に対して、wikiの内容を参照して、改善をお願いすることもありました。
色々うまくいったこと、学べたことがありました。 もうこのチームは自分が居なくても大丈夫だろうと判断したこと、技術的な興味が低レイヤに移ったこと、面白そうなRISC-V×FPGAというプロジェクトが立ち上がりそうだったこと、と様々な要因が重なった結果、統合コックピット開発からは離脱することにしました。
TCFMとの運命の出会い
おそらく5月くらいだったかと思うのですが、Turing Complete FMの存在を知りました。 なんだこれ、面白すぎる、と思って何回も聞きました。
大学ではプロセッサの研究をしていたこともあり、低レイヤへの熱が一気に再燃しました。 ここから、下半期、怒涛の低レイヤラッシュに繋がります。
低レイヤ技術に広く浅く色々手を出した
おしごと下半期~RISC-V / FPGA / Hypervisor / AGL~
下半期は小粒のプロジェクトをたくさんこなしました(半年で4案件)。低レイヤ以外のお仕事はやんわりお断りしました。
RISC-V × FPGA
かねてより一緒にお仕事したい、と思っていたFPGAのプロが、面白そうなことを始めるタイミングだったので、猛アピールして無理矢理ねじ込んでもらいました。 何したか、内容は書けません♪ でもおそらく世界で初めてのことをやったんじゃないかなぁ、と思います。
残念ながら、FPGAのプロは12月をもって退職されたので、一緒に仕事できたのは本件だけでした。
Hypervisor
組込み業界でもハイエンド寄りでは、Hypervisor技術が注目されています。 個人的には、組込みとHypervisorは相性が悪いので、果たして主流になるかな?という疑問はありますが、案件ベースでHypervisorを学ぶ機会だったので、手を挙げました。
Hypervisorとしては、Xenと組込み向けHypervisor ACRNに関わりました。
Hypervisorは学習するためのリソースが乏しいところが、少し辛かったです。 結局、最低限の知識を仕入れた後は、ソースコードを読むのが最短です。多分。
AGL (Automotive Grade Linux)
AGLと言いつつ、ほとんどAGLは関係ありません。主に新しく搭載したデバイスに対して、Linux device driverの組込みをやっていました。 順調に行けば、関わったものが、CES 2019で展示されるはずです。
アウトプットを増やした
Qiitaに投稿した記事は、24個でした。最近は少しずつ記事のクオリティを上げている、つもりです。
Qiitaに投稿した記事を辿ると、上半期は、テスト駆動開発とC++のトピックが多いです。下半期は、趣味のRustネタを主に投稿していました。
アウトプットすることで、インプットが増えたり、理解が曖昧だったところを調べなおしたりするので、技術力を上げるためにもアウトプットは大事だなぁ、と実感しています。 最近、やる気のある同僚には、アウトプットのメンタリングをしています。一人は実際に踏み出してくれて、もう一人、踏み出してくれそうです。単純に仲間ができてうれしいですね。
毎日プログラミングした
子育てで忙しい、というのはあるのですが、毎日プログラミングをするように心がけました。 高い目標を掲げるとしんどいので、1日15分はやる!ということが目標でした。
1つ1つのコミットは小さいですが、病気で死んでいた日を除いて、毎日githubに何らか成果をコミットしていました。 やはりうまく習慣を作ることが大事ですね。習慣は人生を変えます。 1年前から、また数段プログラマーとしてのレベルが上がっていると思います。
Rustとの運命の出会い
きっかけは忘れてしまいました。今年の6月か7月くらいだったかと思います。 今まで、特定の言語に肩入れすることはなかったのですが、一目惚れです。
ただ、Rustを好きになれたのも、C++と正面から向き合ったおかげです。今でもC++は大好きな言語です。
その他
興味を持ったものに片っ端から手を出してみました。
仕事でx86のSoCを扱っているので、x86を少しでも理解しよう、と思ってRustでx86エミュレータを書いています。x86命令セットはお世辞にも好きになれないですが、これをなんとか作ろうとすることは、色々考えることがあって面白いです。たまに嫌になります。
OS自作にも入門しました。 まだまだ先人たちには遠く及ばないですが、コツコツやっていきたいです。
言語処理系では、Go言語でつくるインタプリタをやってみました。 低レイヤを知りたい人のためのCコンパイラ作成入門や、LLVMのチュートリアルをやっています。
今の深層学習ブームから見るに、Domain specific architecture + Domain specific languageの組み合わせが増えるのでは?と思えるので、そこを握れるように動いていきたいです。
参加したイベント
これを見ても、やはり下半期の低レイヤ技術系が目立ちますね。
毎月1回、会社の同僚ともくもく会を開催しています。
人を理解するために、心理学のMBTIを継続して受講しています。今年は4回受講しました。
2019年やりたいこと
Rustは完全に趣味でやっているのですが、プログラミングは取り組んだ時間がものを言う部分もあるので、やはりお仕事の時間でもRustをやりたいです。 後、人から仕事を取ってきてもらっていると、色々と動きにくいので、自分で仕事を取ってこれるようになりたいです。
そのために、Rustで1本仕事を受注する、というのが2019年で最も大きな目標になります。
後、色々と低レイヤに手を出しているのですが、全部中途半端なので、少しずつ深堀していきたいです。