프로그래머들이 프로그래밍을 못하는 이유

작가님의 허락을 받고 번역한 글입니다.(원문)

Reginald Braithwaite의 글을 읽었을 때 믿을 수 없었습니다.

이 작가는 저와 같이, 200명 중 199명의 개발자 지원자들이 코딩을 전혀 못한다는 사실에 문제를 겪고 있었습니다. 다시 한번 말합니다.: 그들은 어떤 코드든지 작성할 수 없습니다.

이 작가가 언급하고 있는 사람은 간단한 프로그램 조차 작성할 수 없는 수 많은 프로그래머들을 돌려보낸 Imran입니다.:

몇 번의 시행 착오 이후에, 코드를 작성하려고 노력하는 사람들은 큰 문제에는 시도하지 않는 것을 발견했습니다. 심지어 링크드리스트의 구현하라는 작은 문제에서도 노력조차 하지 않았습니다. 그들은 아주 작은 문제인 경우에만 노력합니다.

그래서 저는 이런 종류의 개발자를 확인할 수 있는 개발 질문을 준비하고, FizzBuzz 질문이라고 불리는 질문들을 생각해봤습니다. Fizz-Buzz 질문은 다음과 같습니다.:

1부터 100까지 출력하는 프로그램을 작성합니다. 하지만 3의 배수의 경우 숫자 대신 "Fizz" 문자열을 출력하고, 5의 배수의 경우 Buzz를 출력합니다. 3과 5의 공배수의 경우 FizzBuzz를 출력합니다.

대부분의 좋은 프로그래머들은 몇분이면 해당 프로그램을 종이에 작성할 수 있습니다. 무서운 사실을 알려드리자면, 대부분의 comp sci 졸업생들은 할 수 없습니다. 자칭 시니어 프로그램조차도 10-15분 정도 걸리기도 했습니다.

Dan Kegel도 엔트리 레벨 프로그래머들을 고용하는데 비슷한 경험을 했다고 합니다.:

지원자들의 대다수는 컴퓨터공학에서 석사 혹은 박사 학위를 소유하고 있었습니다. 하지만 놀랍게도 기본적인 프로그래밍 작업을 요청하는 인터뷰에서 실패했습니다. 예를 들면, 1부터 10까지 출력하는 루프를 작성하라고 했는데 작성을 못한다거나, 16진수에서 f 다음에 오는 숫자는 무엇이냐고 물었을 때 답하지 못한 지원자도 있었습니다. 또 회귀를 활용하여 실제 문제를 풀지 못하는 지원자들도 적지 않았습니다. 이것들은 기본적인 능력입니다. 이런 것들에 부족하다면 프로그래밍 능력이 충분히 준비되지 않은 것입니다.

예비 신입사원 면접을 봐야 하는 소프트웨어 엔지니어들을 대표해서 말하는자면, 배운 것 이외의 것들은 프로그래밍할 수 없는 지원자들과 대화하는 데 지쳤다고 해도 과언이 아닙니다. 1에서 10까지 출력하는 루프를 모든 언어로 작성할 수 있고, 계산기 없이 간단한 산수를 할 수 있고, 문제를 푸는데 회귀를 사용할 수 있다면, 이미 그들보다 앞서고 있는 것입니다.

Reginald, Dan, and Imran 사이에서 걱정이 되기 시작했습니다. 저는 소프트웨어 개발자들이 일을 처음 시작할 때 쉽게 풀어주지 않을 것 입니다. 누구든지 시작은 합니다. 그러나 소위 프로그래머라 불리는 사람이 가장 간단한 프로그램도 작성하지 못한 채 입사 지원을 한다는 것은 불안하고 섬뜩합니다.

프로그래밍할 수 있는 사람과 그렇지 않은 사람 사이의 큰 차이는 잘 알려져있습니다. 저의 경우, 누구나 프로그래머로 지원하는 사람들은 이미 이 기준을 넘었다고 가정합니다. 명백히 이것은 해서는 안되는 비 합리적인 가정이 아닙니다. 명백히, FizzBuzz 스타일의 스크리닝은 면접관들이 프로그램을 할 수 없는 지원자들을 평가하는데 사용하는 불필요한 시간 낭비를 방지하는데 필요합니다

FizzBuzz 테스트가 의도적으로 너무나 맹목적으로 쉽다고 생각하지 않도록, Imran의 글에 댓글을 작성한 사람이 있었습니다.:

저는 면접관들이 "FizzBuzz" 시험을 너무 쉽다고 무시하는 것을 싫어합니다. 제 경험상 굉장히 많은 지원자들이 가장 간단한 프로그래밍 작업을 할 능력이 없었는데 이는 정말 놀라울 정도 입니다.

아마도 프로그래머 인터뷰를 시작할 때 그들의 코드를 먼저 보지 않는다면 가장 멍청한 것일 겁니다. Vertigo에서는 폰 인터뷰 단계를 시행하기 전에 코드 샘플을 요구합니다. 그리고 대면 면접때는 작은 코딩 문제를 포함합니다. 어려운 건 아니고, 한 시간 정도 안에 동작하는 작은 애플리케이션을 만드는 기본적인 연습입니다. 비록 한 두번의 실패는 있었지만, 대부분의 경우 이 전략은 성공적이었습니다. 이것은 지루한 퍼즐 문제에 의지하지 않고실제 소프트웨어 엔지니어링에 집중하게 해줍니다.

실제로 _프로그램_할 수 있는 프로그래머들을 인터뷰하는 호화로운 시간을 가지려면 그렇게 많은 사전 심사를 해야 한다는 것은 부끄러운 일입니다. 저는 자격증의 팬은 아닙니다, 그러나 Steve McConnell이 진정한 소프트웨어 엔지니어링 전문직 창출에 대해 이야기한 것과 오해하지는 않으셨으면 합니다.

Comments