오늘은 테스트 엔지니어 오디션에 대해 말씀드리겠습니다. 기획 인턴 오디션은 이미 설명을 드렸죠.
대학생 인턴이기 때문에 테스트 전문지식과 경험이 있을 것이라 기대하지 않았습니다. 그래서 초점도 그런 지식과 경험이 있느냐에 맞추지 않았죠. 그렇다면 결국 자질과 잠재성이 있는가를 봐야 합니다. 쉽지 않죠.
우선 전화면접이나, 면대면 면접을 통해 대화로 알 수 있는 것들은 다 했습니다. 행동 설명 질문을 많이 이용했죠. 하지만 여전히 대화로만은 알아내기 어려운 것들이 있습니다. 특히 그 사람의 잠재성을 알고 싶을 때는 말이죠.
테스트 엔지니어 오디션에서는 기획 인턴의 오디션과 비슷하게 후보의 학습 과정을 보기로 했습니다. 문제를 주고 그 문제를 해결해 나가는 과정, 그 사고의 과정을 보고 또 옆에서 면접관들이 도와주면서 그 도움을 통해 어떻게 스스로 길을 찾아 나가는지 보았습니다.
주어진 문제 상황은 다음과 같습니다.
리스트는 유한개의 원소가 정해진 순서로 들어가 있는 자료구조입니다. 리스트에 포함된 원소는 하나의 숫자일수도 있지만 또다른 리스트일수도 있습니다. 이렇게 리스트 속에 리스트가 들어 있는 것을 중첩 리스트(nested list)라고 합시다.이렇게 설명을 해주고, 필요하다면 종이와 펜을 쓰도록 했습니다. 또, 후보가 오디션을 진행하다가 기타 조건에 대해 질문을 하면 몇가지를 즉석에서 알려주기도 했습니다. 예를 들어, 숫자는 몇 개나 들어오나요라는 질문에는 최대 1만개라고 이야기를 해주었습니다. 또 어떤 후보에게는 하드웨어나 OS는 안심해도 된다고 말해주기도 했죠. 시간은 대략 20분 정도 드렸습니다.
리스트를 격자괄호로 둘러싸고, 각 원소는 쉼표로 구분해 표기하도록 하죠. 다음은 중첩 리스트의 예입니다.
[1, 2, [3, 4, [5]], 6, [[7,8]]]
예를 들어, 이런 리스트가 주어져 있을 때, 그걸 평평하게 만들어주는 프로그램 F를 작성해야 합니다.
즉, 결과가 [1, 2, 3, 4, 5, 6, 7, 8]로 나오면 됩니다.
그런데 몇 가지 조건이 더 주어집니다. 자신은 예컨대 2시간 후에 수술을 받아야 합니다. 그때 사용하는 수술 기계에 이 프로그램이 중요한 역할을 하게 됩니다. 자신이 직접 작성한 프로그램으로 수술을 받는 것입니다. 프로그램이 오작동하면 자신은 죽을 수도 있습니다.
이 프로그램이 정상작동한다는 것을 최대한 보장하기 위해 프로그래밍 전, 프로그래밍 중, 프로그래밍 후 각각의 시기에 어떤 일을 하시겠습니까? (프로그램 F를 작성하는 것이 이 오디션의 목표는 아닙니다 -- 따라서 오디션 중에 그 프로그램을 작성할 필요까지는 없습니다)
"여러가지 테스트를 해봐야 하겠죠"라고 간단하게 대답하는 경우, 저희가 물어봅니다. "어떤 테스트들을 해보시겠어요?" 몇가지 예를 들어 후보가 대답을 합니다. 그러면 저희는 다시 묻습니다. "이제 자신이 수술을 받아도 될 만큼 안심하시겠습니까? 충분한가요?" 십중팔구 스스로 "아니요"라는 대답을 합니다. 이런식으로 오디션이 계속됩니다.
자신이 작성한 프로그램에 자신의 목숨을 맡길 수 있겠습니까(이런식으로 자기가 만든 걸 직접 사용하는 것을 Eat one's own dog food라고 합니다)? 만약 그런 상황이 벌어진다면 최대한 당신의 목숨을 보장하기 위해 어떤 행동을 하시겠습니까? 상당히 도전적이고 흥미로운 문제입니다. 면접관들에게도 절대 쉬운 문제는 아닙니다. 정답이 있는 것도 아니고요. 하지만 저는 이 질문이 상당히 강력한 질문(앨런 케이가 powerful idea를 말하는데 제가 보기에는 powerful question들도 있습니다, 예를 들면 켄트 벡이 말한, 이게 네 돈이면 어쩔래?도 그런 종류이죠)이며, 분야를 막론하고 프로그래머라면 한 번 쯤은 이런 문제를 고민해 보아야 한다고 생각합니다. 절대 달성할 수는 없더라도 끊임없이 자문해야 하며, 그 과정 중에 얻는 것이 많습니다.
후보가 이 문제를 해결해 나가는 동안 역시 소리내어 생각하기(think-aloud)를 하도록 유도했고, 막다른 길목에 막혀서 진전이 없으면 저희가 힌트를 주기도 했습니다(주로 소크라테스적인 질문을 하려고 노력했죠).
이 오디션이 우리가 대화에서 발견하지 못했던 것을 찾아내는 데에 큰 도움이 되었습니다. 그리고 오디션 진행 중 저는 항상 '어떻게 해야 이 사람이 갖고 있는 내면의 잠재력과 재능을 끌어내서 이 문제 해결에 도움이 되게 할 수 있을까?'를 고민하고 또 노력했습니다. 처음에 방향을 잡지 못하던 분이 나중에 나름대로 진전을 보였을 때는 저도 무척 기뻤습니다.
여러분은 정말 2시간 후 자신이 작성한 프로그램으로 수술을 받아야 하는 상황에 빠진다면 어떻게 하시겠습니까? (무서운 영화4에서 쏘우2 패러디하던 게 떠오르네요)
--김창준