2020年12月9日水曜日

2020年のお仕事

 2020年も残すところわずかになりました。今年はブログを投稿していませんでしたが、一番おおきな出来事はやはりコロナウィルスですね。現在の職場では今年の3月からリモートワークになりました。これはヒューストンでコロナが本格的に猛威を振るい始める前の頃であり、リモート導入は他者より先駆けて、オフィスに戻るのは他者より遅れて、という CEO の意向によるものでした。幸い仕事の生産性に影響はなく、この一年で大きなプロジェクトもひとつ仕上げることができました。

この一年はクラウド関連の技術に触れそれらを活用した年で、大変刺激的でありました。Terraform で AWS にリソースをプロビジョンし、Kubernetes クラスタ上に並列実行可能なテストフレームワークを構築しました。これまで on-prem で40分強かかっていた350以上のテストが、クラウド上の並列実行で15分弱ほどで完了するようになりました。将来的にテストの数は増え続けるのですが、クラウド上のテストフレームワークではテストの数に合わせて自動的にマシンを増やしてくれるので、実行時間は15分のままだろうと期待しています。

プログラミング言語は可能な限り Rust を使い、ちょっとした部分で Haskell、Go、Python を使い、複数の言語に触れられるのは楽しかったです。しかし Rust は本当に素晴らしい言語だと思いました。safe なコードであるかぎり、C++ のようなメモリバグはないですし、使い誤ると足枷になる例外投げ/継承は存在しませんし、Cargo ひとつでビルドツールはほぼ事足りてしまいますし、コンパイラのエラーメッセージが理解できるということが C++ から来ると感動ものです。なのでチームメンバーには C++ ではなく Rust を勧めました。どこかで読みましたが、両言語とも難しいのですが Rust は正当な理由で難しく、C++ は不当な理由で難しい、とあり個人的に納得しています。C++ はとにかく落とし穴がありすぎて、それらの避け方を知っているイコール言語に習熟しているという図式が好きではありませんでした。落とし穴があるならコンパイラが分かりやすいメッセージを吐くか、コンパイルを拒否するかどちらかをすべきだと考えており、それらをどちらも実現してくれているのが Rust という印象です。ただ Rust においても、unsafe でポインタをいじくり始めると限定的に C++ と同じ土俵になるため、C++ に習熟しておく重要性はこれからも変わらないと思います。定期的にキャッチアップするリソースのひとつとして Cᐩᐩ Weekly With Jason Turner にお世話になっています。CPPCon で登壇常連者でワンポイントアドバイスが分かりやすいのでよく見ています。かたや Rust で一番のオススメのチャンネルは Jon Gjengset さんだと思います。実世界の Rust プログラムをこれでもかという長い動画で解説してくれるのですが、中級者になる上でつまづくポイントの説明がとても丁寧で分かりやすい。彼の Crust of Rust シリーズから入るのが適していると思います。僕も彼の evmap を最初のコミットからさかのぼって、lock-free なデータ構造を Rust で書くとこうなるというのを勉強しています。

来年の4月まではリモートワークが確定しており、パンデミックは自分のコントロール外なので、自分のコントロールできる部分で日々頑張っていくしかないかな、という毎日です。

それにしてもアメリカの一日の感染者数の多さは、外にあまり出ずにひっそりと暮らしている自分からしてみるとただ驚くばかりです。。。

コロナ禍でしたが、人混みをさけてニューオーリンズに行くことができました