- MemSQL(現在の SingleStore)で2013年に出された、DB関連のプログラミング課題
→ 「キーバリューストアである Memcached に、incr / decr に似た形で mult コマンドを追加してください。1時間差し上げます。」
- この質問は候補者を3つのタイプにきれいに分けるので、優れた技術面接の問題になっている
- タイプ0:実際にコードを触らなければならないことに驚く人たち。実際にはここまで来られないだろうが、採用すべきではない
→ 当時の MemSQL は C++11 で開発されていたため、C で書かれた Memcached を触ることは目的に非常によく合っていた。
- タイプ1:問題を見て「掛け算は足し算の繰り返しだから、既存のものを繰り返せばよさそう! でもロックを処理しないと…」と言う人たち
→ かなり迷走したあげく、動くコードを作れずに失敗。やはり採用されない
- タイプ2:「掛け算は、足し算が
+ をしている箇所で * をすればいいだけで、それ以外は同じだ」と言って、Copy&Paste して + を * に変えるのを素早くやってしまう人たち
→ このグループにいる人は採用される可能性が非常に高い
- 最高の候補者たちは……時間がかなり余るので、成果物を整え、フォーマットに一貫性があるか確認し、ユニットテストも追加し、「設計上の判断」も見直したりできる
結論
- このプログラミング課題が好きな理由は、実際のプログラミングの縮図だから
- 大規模なコードベースを保守するときには、完全には理解できていないコードや不要なイディオムなどがどうしても存在する
- この問題は「
bool incr を int opcode に変える」という答えが1つだけあるため、面接にぴったり合っている
- 現在は2つの算術演算コマンド(
incr / decr)があり、これを3つのコマンドに拡張するもの
- この課題は、不適格な候補者をふるい落とし、適格な候補者を望ましい道へ導くようにうまく設計された問題だ
3件のコメント
該当するコードをいかに素早く見つけられるかが、重要な見どころになりそうですね。
プログラムをゼロから書き直すのではなく、既存のコード(しかも、すでによく知られ、広く使われているオープンソースプロジェクト)に機能を追加する形である点で、より良いと思います。
HNでもやっぱり……元のインタビュー質問を出した本人が登場してAMAをやっていますね。
https://news.ycombinator.com/item?id=31065143