십년쯤 전인가 디자인 패턴이 유행하면서 모든 면접 예상 질문에 디자인 패턴이 필수였던 적이 있어요.
분명 디자인 패턴이 더 좋은 설계를 위한 가이드이지만 언제 어디서든 사용 가능한 절대 철칙이 아니라는 것을 간과한 채 누가 더 많은 패턴 이름을 외우고 있는지가 면접의 당락을 결정하던 주객 전도의 상황도 있었죠.
지금 코딩테스트는 디자인 패턴의 전철을 밟고 있는 것 같아요.
최근 주니어/시니어를 불문하고 취업/이직시에 코딩테스트를 준비하는 것이 당연한 것이 되어 가는 분위기인데요.
코딩 테스트를 준비하는 과정 자체는 좋다고 생각해요. 논리적으로 생각하는 방법을 익히고, 프로그래밍을 (반강제로 여유 시간을 할애해 가면서) 조금이라도 더 할 수 있게 해 주죠.
게다가 코딩 테스트를 준비하면서 여러가지 문제에 대한 문제점을 고민해 보는 것은 굉장히 바람직해요.
의외로 문제는 다른 곳에서 발생해요.
첫번째로는 실무와 코딩 테스트간의 괴리인데요.
실무에서 일하시는 분들에게 코딩 테스트를 준비없이 풀어보라고 하면, 아마 많은 수의 개발자들이 탈락의 고배를 마시리라 생각해요.
실제로 돌아가고 있는 프로그램을 만드는 사람들이 탈락하는 테스트는 무슨 의미가 있는 것일까요?
마치 미국인에게 토익 점수가 낮다고 영어를 못한다고 하는 모양새같아요.
이런 괴리가 발생하는 건 실무에서 필요한 능력과 주어진 문제를 푸는 능력은 사실상 별 관계가 없기 때문인데요. 문제은행에서 연습한 문제를 외외서 치는 것이 코딩 테스트라면 더욱 그렇죠.
운전면허를 땄다고 바로 그다음날 혼자 운전을 하고 나간다면 어떻게 될까를 생각해보면 쉽죠.
우리 모두 운전면허 시험 필기 내용은 면허증을 받는 순간 잊어버리잖아요?
"문제 패턴과 답만 외우니까요."
실무에서 팩토리얼을 손으로 작성하고 있는 경우는 없어요. 오히려 팩토리얼이 어떤 라이브러리나 모듈에 있는지 어떻게 사용하는지 익히는 것이 뭔가를 만드는 데 훨씬 큰 도움이 되어요.
길찾기 알고리즘이나 이진 트리 탐색 같은 건 지적 유희로는 좋겠지만 네비게이션 회사 같은 데 입사하지 않는 한 아마 평생 그 코드를 짤 일은 없을 꺼에요.
두번째, 오히려 더 큰 문제라고 생각하는 건, 코딩테스트가 일반화되고 풀이가 많아질 수록, 자신이 똑똑하다고 착각하게 되는 점이에요.
원래 공부의 본질은 무언가 깨달음을 얻는 것이에요. 이 깨달음을 통해 "같은 문제"가 아닌 "비슷한 상황"에서의 해결책을 찾을 수 있는 통찰력을 얻는 거죠.
하지만 최근 코딩 테스트 문제와 그 답을 올리는 일부 사람들의 글을 보면 꼭 그렇지만도 않은 것 같아요. 그저 많은 문제를 풀었다고, 정답을 외웠다고 기뻐하고 있어요.
깨달음 없이 특정한 패턴의 문제에 대해 해답을 외우고 있다고 해서 "똑똑해지는 것"일까요? 아니면 그저 코딩기계를 만들어내고 있는 것일까요?
중고등학교때 시험을 위한 공부를 하듯이 많은 문제를 풀어서 높은 점수를 받은 사람이 개발을 잘 할 수 있다면 좋겠어요.
그렇지만 인생은 만만하지 않답니다. 이게 가능하다면 개발자의 역할은 기계를 대신해서 코드를 치는 직업밖에 안될 꺼에요.
저는 다양한 경험이 다채로운 생각을 만든다는 점에서 최대한 많은 것을 해보라고 장려하지만 문제를 풀고 점수를 높이 받는 것에 촛점을 맞추는 것. 즉 "코딩"이 아니라 "테스트"에 더 방점을 두는 것은 좋지 않다고 생각해요.
코딩 테스트는 어디까지나 "정"이 아니라 "부"가 되어야 해요. 서류 심사 및 면접만으로 개발자의 실력을 판가름할 수가 없으니 코딩 테스트를 통해 확인하자.. 정도면 괜찮을 것 같아요.
하지만 코딩 테스트의 결과로 취업/이직의 당락을 결정하는 것이라면, 여러분은 안전한 대신 더 큰 기회를 놓칠 수도 있지 않을까요?
동일한 생각입니다. 이직 준비를 할 때도 늘 몇 개월은 코딩테스트 준비에 할애하게 되는 것 같네요. 심지어 실무에 사용하는 언어가 테스트 시에 시험언어로 선정되지 않아서 실무에서는 사용하지도 않을 C++이나 파이썬 문법을 다시 들여다봐야하는 것도있구요. 그 시간에 차라리 포트폴리오나 코드 리팩토링을 하고싶은데 참 아까운 시간이라는 생각이 드는 건 어쩔 수 없는 것 같아요.
반대로 회사에서 1000개의 이력서가 들어왔을때 그걸 다 보는건 쉽지 않으니
필터링 과정을 추가하여 그 수를 줄이는 목적이 있겠죠!
코딩 테스트를 잘하는 사람은 대체로 실무를 잘한다는 믿음아래서 말이죠!
물론 제가 그 필터링을 통과 못하지만요 😨...
현재 회사에서 이직을 준비하면서 생각해보니 포폴을 제대로 준비한게 없어서 차라리 코테를 봤으면 하는 마음이 생기기도 하네요.. 회사에 시니어급이 없어서 포폴 준비 후 빨리 탈출하고 싶습니다..
코딩테스트가 꼭 필요한지 모르겠어요. 코딩테스트보단 프로덕트 개발 경험이나 도메인 분석후 객체 설계를 하는 게 더 중요하다고 생각하는 사람 중 한 사람입니다.
전적으로 동감합니다!
그런데 여기서 드는 한가지 의문점은, 실리콘밸리를 베이스로 하는 상당수의 기업들은 알고리즘 문제를 해결하는 류의 코딩 인터뷰가 채용의 결과를 좌우하는 경우가 많다는 점입니다. 혹시 이것에 대해서는 어떻게 생각하시나요? 이 기업들 중에는 기술력으로 굉장히 유명한 기업들도 많은데, 대체로 경력이 어느정도 있는 개발자들을 채용할 때는 시스템 디자인 인터뷰와 같이 기술력을 평가하기 위한 추가적인 인터뷰를 함께 보는 경우가 많지만, 거의 알고리즘 문제 풀이 능력만 보는 경우도 많이 보았습니다. 물론 코딩 '인터뷰' 이기 때문에 코딩 '테스트'와는 다르게 단순히 문제를 푸는 능력 외에도 커뮤니케이션 스킬을 볼 수 있기는 하지만 '얼마나 다양한 문제를 풀어봤는가'가 중요하게 작용한다는 점에서는 크게 다르지 않다고 생각합니다.
지나가다 우연히 글보게 되었고 공감되는 글들도 많아 댓글 남겨요 ~
제 개인적인 생각을 조금 많이 무례하게 적어보면 구글 때문이 아닐까 싶습니다.
구글에서 코테받고 있을 정도면 개발자로서 기본 스팩은 이미 통과된거고
추가로 일반 개발자 수준 이상의 문제해결 능력을 확인하기 위함인데
구글이 되고 싶은 스타트업 대표님이나 개발팀 가이드 잡는 엔지니어분들이 그냥 따라하는게 아닐까 싶습니다.
저는 그냥 한국에서 진행되고 있는 코테들은 예전에 취업할때 토익점수 요청하던 것과 비슷한 것으로 받아들이고 있습니다.
과도한 경쟁사회니 그것이 무엇이 되었든 남들 다 넘는 허들 정도는 가뿐히 넘어 험난한 세상 헤쳐나갈 정도는 되야 우리 회사 올 수 있다... 정도요.
그래서 코테를 병목걸리는 지점의 실시간 PASS/FAIL 필터 정도로 사용하는 곳은 그냥 안갈려구요.
취준하는 입장에서 보면 공감되네요!
포트폴리오와 이력서에는 실무능력을 얼마나 잘 해낼수 있는지 나타내야 하는데
코테를 공부하다보면 그거랑 동떨어져있다는 생각이 많이 들어요