코딩 시험

짧은 시간 안에 진행되는 코딩 시험으로는 코딩 잘하는 사람을 찾을 수 없다.

아니 그런 것 같다. 내 생각이다. 논란의 여지가 있는 떡밥이지만 과감하게 투척한다. 😎 하지만 걱정은 크진 않다. 블로그에 들어오는 사람이 극소수여서 떡밥을 물 사람은 더 극소수다.

여담: 처음 꼬멘트 댓글을 만들 때엔 스팸이 달릴 걸 걱정했지만, 사실 현실은 너무 적은 꼬멘트 댓글 사용자 수를 걱정해야 하는 것과 비슷하다. 언젠가 요청이 있어 깃허브에 꼬멘트만 따로 떼어 공개를 했는데, 아무도 안 쓰고 있어 다시 비공개로 돌려 내부 저장소로 편입 시키는 걸 심히 고민 중이다. 나의, 끈닷넷의 목표는 지구의 패킷을 낭비하는 것이지, 내 개인 에너지를 낭비하는 것은 아니다. 😜 별도 저장소를 관리하는 건 어쨌든 공짜가 아니다.


이유1: 짧은 코딩 시험으로는 장기적인 코드에 대한 평가가 어렵다.

한 번 코드를 쓰면, 열 번 고치고, 백 번 읽는다.

라는 풍문이 있다. 내가 한 말은 아닌데 어디서 들었는지는 솔직히 기억에 없다. 하지만 나는 큰 요지에 동의한다. 저 1:10:100 비율보다 중요한 건 빈도수의 크기 비교다. 분명 쓰는 것보다 많이 고치고, 고치는 것보다 많이 읽는다. 가독성이 그만큼 중요하다. 깃 같은 버전관리 시스템에 커밋 메시지를 풍부하게 남겨야 한다. 변수 이름도 잘 지어야 한다. 개인적으로 나는 적당한 변수나 함수 이름을 고르는 데에 시간을 아끼지 않는다. 필요할 때엔 한영사전도 찾고, 유의어 사전*도 이용한다. 국어사전을 찾기도 한다. 하지만 그 모든 것이 짧은 코딩 시험에선 시간 낭비일 뿐이다.
*www.thesaurus.com/

짧은 코딩 시험에서는 가독성이 중요한 요소가 되기 어렵다. 애초에 절대적으로 요구하는 코드 양이 적으니 작정하고 안 읽히게 코드를 작성하지 않는 이상, 웬만하면 코드는 다 잘 읽힌다. 변수 이름이 의미있는 단어이든 아니든 다 잘 읽히니 크게 거슬릴 것이 없다.


이유2: 짧은 코딩 시험에 적합한 알고리즘들이 따로 있다.

짧은 코딩 시험에 적합한 또는 면접 보기에 편리한 알고리즘들이 따로 있다. 예를 들면,

퀵선택은 퀵소트에 사용된 알고리즘을 이용해서 k 개의 상위 원소들을 고르는 데에 사용한다. "평균적"으로 O(n)의 복잡도를 보이고 최악의 경우 O(n^2)의 복잡도를 가진다. "평균적"이라는 건 재수없으면 망한다는 이야기다. 마음 편하게 퀵소트를 했으면 최악의 경우에도 O(nlogn)인데 혹시나 하는 마음에 퀵선택 알고리즘을 사용했다가 재수없으면 O(n^2)이 될 수 있다. 그러니까,

어떤 것이 이득인지는 구체적인 상황에 따라 다를 것이다. 그치만 그런 구체적인 상황은 시험 문제에 등장하지 않는다. 값의 분포와 알고리즘 복잡도 사이의 수학적 관계에 대해 미리 고민하고 답하는 능력자가 있다면 뽑아야 한다고 생각한다. 하지만 그 정도 수준에 이르지 못했다고 해서 부족한 프로그래머라고 생각하지는 않는다.

한편, 짧은 코딩 시험에서는 해시테이블이 마치 만능인 것처럼 묘사되는데 그렇지 않다. 해시테이블을 쓰려면 해시값을 계산해야 한다. 해시값 계산은 공짜가 아니다. 설사 해시테이블의 키가 정수처럼 대단한 해시값 계산이 필요없는 경우라 하더라도, 해시테이블이 더 효율적일 수 있는 이유는 메모리를 더더더더 많이 쓰기 때문이지 해시테이블이 다른 것들 보다 알고리즘 적으로 항상 더 우월하기 때문은 아니다.

코딩 시험에 주로 언급되는 최선의 알고리즘이 실제 제품 개발에서 항상 쓰이는 것도 아니다. 다양한 알고리즘을 알고 있음은 "내가 이만큼 코딩 시험 준비를 많이 했다"이지 "내가 이렇게 코딩을 잘한다"가 아니다. 실제 사용되는 알고리즘은 대상 프로그램에 따라 또는 대상 언어에 따라 적절한 것이 결정된다. 현재 상황에 적절한 알고리즘이 어떤 것인지 고민할 수 있는 능력 또는 이를 검색하고 스스로 이해할 수 있는 능력이 필요하다.

수능을 잘 봤다고 대학 공부에서 더 우수한 것이 아니고, 대학원 입시를 잘 봤다고 대학원에서 우수한 연구 논문을 쏟아내는 것도 아니다. 회사도 비슷한 것 같다. 코딩 시험은 코딩 시험이고 코딩은 코딩이다.


결론이 쉽지는 않다.

최근에 코딩 시험관 교육을 받으며 스트레스도 받고 뭔가 아닌 것 같고 답답한 마음에 글을 남겨 본다.

2022-03-11 씀.