내가 받았던 최고의 기술 인터뷰 질문
(quuxplusone.github.io)- MemSQL(지금은 SingleStore)에서 2013년에 받은 DB관련 프로그래밍 과제
→ "키밸류 저장소인 Memcached 에 incr / decr 와 비슷한 형태로 mult 명령을 추가하세요. 1시간 드리겠습니다." - 이 질문은 후보자를 3가지 유형으로 깔끔하게 나누기 때문에 훌륭한 기술 면접 문제임
- 타입 0 : 실제 코드를 건드려야 하는 것에 놀라는 사람들. 실제로 여기까지 못올테지만, 뽑지 말아야 함
→ 그 당시 MemSQL은 C++11로 개발되어 있었기 때문에, C로 된 Memcached를 건드리는 것은 목적에 잘 부합했음. - 타입 1 : 문제를 보고 "곱셈은 덧셈의 반복이니까, 기존꺼를 반복하면 될 것 같아! 근데 락을 처리해야하니까.." 라는 사람들
→ 한참 헤매다가 작동하는 코드를 못 만들고 실패. 역시 고용되지 않음 - 타입 2 : "곱셈은 덧셈이 +를 하는 곳에서 *를 해야한다는 거 말고는 같아" 라고 얘기하고 Copy&Paste 해서 + 를 *로 바꾸는걸 빠르게 해버리는 사람들
→ 이 그룹에 있는 사람은 고용될 가능성이 매우 높음 - 최고의 후보자들은.. 시간이 많이 남았으므로, 산출물을 다듬고, 포매팅이 일관적인지 확인하고, 유닛테스트도 넣고, "디자인 결정"들도 재검토 하거나 할 수 있음
- 타입 0 : 실제 코드를 건드려야 하는 것에 놀라는 사람들. 실제로 여기까지 못올테지만, 뽑지 말아야 함
결론
- 이 프로그래밍 과제를 좋아하는 이유는 실제 프로그래밍의 축소판이기 때문
- 대규모 코드베이스를 유지 관리할 때 완전히 이해못하는 코드나, 불필요한 관용구들 등이 있기 마련
- 이 문제는 "bool incr 을 int opcode"로 바꾸는 정답이 하나만 있기 때문에 인터뷰에 딱 어울림
- 현재 두개의 산술연산 명령(incr/decr)이 있고, 이걸 세개의 명령으로 확장하는 것
- 이 과제는 미자격 후보자를 걸러내고, 자격을 갖춘 후보자를 행복한 길로 이끌도록 잘 만들어진 문제
바닥부터 프로그램 하나를 다시 짜는 게 아니라, 이미 있는 코드(그리고 그것도 이미 잘 알려져 있고 널리 쓰이는 오픈 소스 프로젝트)에 기능을 추가하는 방식이라는 점에서 더 좋은 것 같습니다.
HN엔 역시나.. 원래의 인터뷰 질문을 냈던 사람이 등판해서 AMA를 하고 있네요.
https://news.ycombinator.com/item?id=31065143