日本で10年以上、アメリカでもう6年ソフトウェアエンジニアをやっているけど、全部の会社に人の紹介とかで入って参加しているから、アメリカのスタートアップで標準のテクニカルインタビューをしたことがなかった。今週の木曜日に初めてそれを体験した。

アメリカのスタートアップの就職面接を受けるには、LinkedInとかのジョブリスティングの申し込みボタンを押して自分の履歴書をアップして色々と入力項目を埋めて申し込んだ会社からの返答を待つところから始まる。ていうか、そういうこともそれが必要になった今月に初めて知った。

そして、面接には何個か種類があって、行動面接とか、テクニカル面接という、システムデザインをする面接やアルゴリズムを書く面接があって、どんな会社でも大体5回、6回とパスしていってやっと会社に入れる。

ジュニアのソフトウェアエンジニアとかだと最初のインタビューさえ厳しいらしく書類審査でほぼ落とされるらしい。自分は長くやっているので、多分最初の面接を受けられるヒット率はまだ高そう。そして、最初の面接にたどり着くためにリフェラルという仕組みがあって、申し込みたい会社に友達が働いていればその人にリフェラルを頼んで最初の面接には辿り着けるようになっている。

2週間前に前の会社の同僚からのリフェラルのおかげで、ニューヨークのスタートアップがスタートした。結構シリアスなエンジニアリングが必要なSaasのバックエンド側のスタートアップでRustという言語を使っている。私はこの言語で比較的長い経験があるので、自分にはもってこいの会社で仕事も楽しそうなので、人生初のアメリカのスタートアップ面接がこの会社でモチベーションも上がっていた。

CEOとの面接は自分の長所はどこか?、とか、今ままでで達成した自分の最高の仕事は何か?、とか、色々聞かれたけど、とてもいい感じの人でその場で次のテクニカルインタビューに進もう、言ってくれた。でも最後でどれくらいの給料が出せるかと、正直に話してくれたのだけど、ちょっと今の給料より少なめで、少しうーんとなったけど、無理ではないギリギリなので、もし最後まで行けたら交渉しようと思う。

で1週間後の今週の木曜日にテクニカルのインタビューが行われた。それは、デバッギングインタビューと書かれていて、そこの会社のエンジニア二人と一緒にペアを組んで複雑なシステムのデバッグを一緒に行なって、コミュニケーション能力や、問題解決能力、どのようなロジックで何を行なっていくかを観察されるインタービューだった。

コード自体はそのインタビューのタイミングで渡されるけど、どう言ったシステムがどういうプロトコルで動いているかを説明する文書は3日前に渡されていた。なので、前日には外を散歩しながら、そのシステムを頭の中で反芻して考えられる質問やバグについて頭の中で想像して、その後家に書いてそれに関するコードを書いたりと、かなり真剣にできる限り準備した。でも、蓋を開けてみると全然違う内容のインタビューで、想定していたようなバグではなくて、かなり難しいバグの種類だった。

でも結果的にはずっと二人に対して頭の中で考えていることをシェアしながら時間内に3つのバグ全部を解決することができたし、かなり高度な質問にも的確に返事をすることもできた。 プログラムはRustで書いたのだけど、難しいプログラムではなかった。された質問は、例えば、あるメモリストレージをクリアするコードが抜けていたのがバグの一つで、それを見つけて関数をたしたのだけど、サーバ上の実装なのでそのストレージへのアクセスはMutexロックで守られていたのだけど、最初に足した関数はクリアするための専用の関数を書いたのだけど、ある手続きとともにクリアされるべきであることに気づいて、書き直したところ、エンジニアの一人からなんで書き直したのかと聞かれて、この一連の手続きがアトミックでなければならない理由を的確に答えることができた。

でも、英語的にはギリギリな感じで、ずっと緊張で汗びっしょりだった。今思い返すと、もうちょっとコミュニケーション取るべきだったし、もっと早く解決できるくらい簡単だったような気がする。一つはかなり厄介なバグでUDPで送られた文字列がNULL終端していないっていうもので最初の30分をそれをちゃんよ読み解くまで使ってしまったりと、よかったのか、悪かったのか、わからない。

明日には返事が来るだろうけど、まぁ、体験したことは糧になるし、上手くパスすればさらに自信にもなると思う。

October 14, 2024

List Comments