brunch

You can make anything
by writing

C.S.Lewis

by 이기곤 Jun 24. 2019

알고리즘 테스트의 중요성

[6월 미션:A조] 릴레이 글쓰기

알고리즘 테스트는 개발자 채용 과정에 대해 이야기할 때 항상 등장하는 주제다. 누군가는 반드시 평가해야 할 항목 중 하나라 생각하고, 누군가는 역량을 파악할 수 있는 다른 방법이 많으니 불필요하다고 생각한다.


알고리즘만으로 지원자가 가진 모든 역량을 평가할 수는 없다. 하지만 반대로 생각해보면 개발자의 역량을 파악하는 데 알고리즘만한 것도 없기 때문에 어느 쪽이 맞다고 확신할 수는 없다.


알고리즘이 중요한 이유


위키피디아의 말을 인용하면, 알고리즘은 문제 해결을 일련의 절차나 공식을 이용해 표현한 것이다. 단순한 수학 공식이 될 수도 있지만, 회사나 팀이 해결해야 하는 문제 또한 알고리즘이 될 수 있다. 알고리즘은 매우 단순할 때도 있지만, 매우 복잡할 수도 있다.


알고리즘을 잘 아는 사람과 모르는 사람의 차이는 새로운 기능을 개발할 때 극명하게 드러난다. 알고리즘을 잘 아는 사람은 키보드 대신 펜과 종이를 먼저 붙잡기 때문이다.


이러한 사람들은 문제를 어떻게 해결할 것인지 절차나 공식을 정리한 다음, 코드로 풀어낸다. 이 시점에서 자신이 선택했던 설계나 풀이 방법의 결함을 발견하면, 다른 방법을 선택한다.


알고리즘을 잘 모르는 사람은 키보드부터 잡는다. 그리고 돌아갈 것처럼 보이는 기능을 만든다. 별다른 결함이 없다면 다행이지만, 그렇지 않은 경우 필연적으로 코드를 수정하게 된다. 최초 설계와 다른 방향으로 가게 되면서 버그를 만들거나 불필요한 코드가 남기도 한다. 최악의 경우 처음부터 다시 만들기도 한다.


두 사람이 기능을 개발하는 데 걸리는 시간을 비교해보면, 전자가 훨씬 더 생산성이 높다. 주관적인 경험으로 비춰봤을 때는 버그를 만들 확률도 낮았던 것 같다. 처음부터 잘 짜여진 논리를 코드로 구현하는 것과, 코드를 만들어 놓고 될 때까지 논리를 바꾸는 것은 엄연히 다르기 때문이 아닐까 싶다.


그렇다면 알고리즘 테스트도 중요할까?


이 글의 첫 부분에서 말했듯이, 회사가 파악해야 할 지원자의 역량은 알고리즘만이 전부가 아니다. 또한 알고리즘만으로 개발자의 모든 역량을 파악하는 것도 불가능하다.


알고리즘 테스트를 하지 말라는 이야기는 아니다. 단지 너무 무게를 두지는 말라는 이야기다. 알고리즘 테스트는 반드시 필요하다. 종이와 펜으로 풀 수 있는 간단한 알고리즘정도라면 말이다. 예를 들면 리스트를 뒤집는 방법이나 문자열 치환,  문자열 비교 구현 등이 있다. 충분한 시간만 주어진다면 LRU 알고리즘 구현도 좋을 것 같다.


하지만 알고리즘 대회 같은 곳에서 나올법한 문제를 주진 말자. 문제를 푸는 방법을 외웠다면 쉽게 답할 수 있지만, 그렇지 않다면 푸는 데 오랜 시간이 필요하기 때문이다. 이런 문제는 소중한 면접 시간을 낭비할 뿐더러 지원자에게도 엄청난 압박을 줄 것이다.


마무리


문제 해결 능력이 뛰어난 사람이더라도 팀에 적응할 수 없다면 팀 전체가 위험해질 수 있다. 개발자를 채용할 때는 팀이 추구하는 비전과 잘  맞는지, 약속은 잘 지키는 지(면접 시간에 늦는 건 상관 없지만 연락 없이 늦는 사람은 문제라고 생각한다), 경력자라면 기술  지식을 잘 활용했는지 검증하는 일이 가장 중요하다. 충분한 시간을 주고 간단한 과제를 주는 것도 좋은 방법 중 하나다. 포트폴리오 여부와 관계 없이 개발자의 실력을 그대로 볼 수 있는 방법이기 때문이다(하지만 지원자가 쓴 시간에 대한 보상 또한 고민해봐야  한다).

브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari