ヒューストンに引っ越してきてもうすぐ一年が経とうとしています。FlightAware での仕事も慣れてきた部分が増え、徐々に大きなタスクをこなすようになってきました。前職 MathWorks に比べて一番何が大きく変わったかといえば、C++ オブジェクト指向によるスタンドアローンソフトウェア開発から Haskell, Scala の関数型による分散システム開発が主になった事です。Haskell は学習カーブが険しく色々な書籍やオンラインのリソースを使って上達を目指しています。すごいH本、Haskell Programming From First Principles、FP Complete を参考にしています(すごいH本はモナド変換子の記述が無い?ので別の書籍やオンラインの解説などで補う必要がありました)。Scala に関しては、ざっくりですが much nicer Java という感じがします。Haskell と連動して学習していけるのでかなり魅力的です。
前職を離れる前に関わった C++ プロジェクトで、MATLAB の indexing (ex. a(4) = 3など) の実装や検索パスの書き直しがありましたが、思えばどちらも最終的に選ばれた設計の根幹は関数型の考え方から来るものでした。オブジェクト指向開発のときはデザインパターン、SOLID 原則を毎日意識しながら開発をしていたので当時は気がつきませんでしたが、関数型で開発している現在から振り返ると、点と点が線で繋がったと強く感じました。
仕事の外ではいま Rust を勉強しています。C++ ではスマートポインタがあるとはいえメモリ関連のバグにイヤというほど対応を追われたので、コンパイル時に lifetime のエラーではじいてくれる Rust はもはや神様と呼ぶほかありません。C++ もまだまだ知らないことだらけなのですが、これからはもっと Rust に時間を割いていこうと思います。コンパイルに通りさえすれば、という安心感は Haskell に近しいものを感じます。