25 ポイント 投稿者 xguru 2022-04-19 | 3件のコメント | WhatsAppで共有
  • MemSQL(現在の SingleStore)で2013年に出された、DB関連のプログラミング課題
    → 「キーバリューストアである Memcached に、incr / decr に似た形で mult コマンドを追加してください。1時間差し上げます。」
  • この質問は候補者を3つのタイプにきれいに分けるので、優れた技術面接の問題になっている
    • タイプ0:実際にコードを触らなければならないことに驚く人たち。実際にはここまで来られないだろうが、採用すべきではない
      → 当時の MemSQL は C++11 で開発されていたため、C で書かれた Memcached を触ることは目的に非常によく合っていた。
    • タイプ1:問題を見て「掛け算は足し算の繰り返しだから、既存のものを繰り返せばよさそう! でもロックを処理しないと…」と言う人たち
      → かなり迷走したあげく、動くコードを作れずに失敗。やはり採用されない
    • タイプ2:「掛け算は、足し算が + をしている箇所で * をすればいいだけで、それ以外は同じだ」と言って、Copy&Paste して +* に変えるのを素早くやってしまう人たち
      → このグループにいる人は採用される可能性が非常に高い
    • 最高の候補者たちは……時間がかなり余るので、成果物を整え、フォーマットに一貫性があるか確認し、ユニットテストも追加し、「設計上の判断」も見直したりできる

結論

  • このプログラミング課題が好きな理由は、実際のプログラミングの縮図だから
  • 大規模なコードベースを保守するときには、完全には理解できていないコードや不要なイディオムなどがどうしても存在する
  • この問題は「bool incrint opcode に変える」という答えが1つだけあるため、面接にぴったり合っている
  • 現在は2つの算術演算コマンド(incr / decr)があり、これを3つのコマンドに拡張するもの
  • この課題は、不適格な候補者をふるい落とし、適格な候補者を望ましい道へ導くようにうまく設計された問題だ

3件のコメント

 
minhoryang 2022-04-20

該当するコードをいかに素早く見つけられるかが、重要な見どころになりそうですね。

 
hongminhee 2022-04-19

プログラムをゼロから書き直すのではなく、既存のコード(しかも、すでによく知られ、広く使われているオープンソースプロジェクト)に機能を追加する形である点で、より良いと思います。

 
xguru 2022-04-19

HNでもやっぱり……元のインタビュー質問を出した本人が登場してAMAをやっていますね。
https://news.ycombinator.com/item?id=31065143