[코드트리 한달후기] 또 너냐, 코딩테스트
코딩 테스트 연습에 새 바람 불어넣기
여는 말: 알고리즘의 압박
기업이 구직자의 역량을 판단하는 데에는 여러 가지 수단이 있다. 개발자로 한정짓더라도 코딩 테스트와 과제가 있고, 심지어는 인적성 시험을 보거나, 아예 그런 것 없이 서류만 보고 면접으로 직진! 하는 경우도 있다. 이 중에서 특히 코딩 테스트 — 알고리즘 테스트 내지는 인터뷰 — 에 대해서는 의견이 갈리곤 한다. 실무에서 필요한지 잘 모르겠다는 의견도 있고, 기본적인 문제 해결 능력을 본다는 점에서 여전히 유용하다고 판단하는 의견도 있다.
필자는 어떻게 생각하느냐고 물으신다면, 학창 시절 했던 수학 공부와 사뭇 비슷한 느낌을 갖고 있다고 말할 수 있다. 왜 이렇게 사서 고생하는지 이해하기 어렵지만, 그럼에도 불구하고 개념이 이해가 안 되거나 문제를 못 풀면 상당히 자존심이 상한다는 것도 느끼고, 그렇다.
원래 필자가 개발을 처음 시작할 때도 코딩테스트를 당연히 준비했었다. 당시 아주 핫했던 나동빈님의 “이것이 취업을 위한 코딩 테스트다 with 파이썬” 교재를 활용했다. 큰 도움을 받았다. 하지만 솔직히 지금도 이 책에 있는 모든 것을 이해하진 못했다. 게다가 학습을 하다 말다 하다 보니 책 하나만 닳도록 보고, 재미가 점점 없어지고, 하는 악순환이 있었다.
한편 마인드셋에 있어서는, 처음만 하더라도 시험에 임하는 전투적인 자세가 있었어서, 시험에 나오는 것과 유사한 플랫폼, 유사한 스타일의 문제만 추구했다. 백준에 비해 프로그래머스를 좋아했던 이유. 자칭 실전적인 마인드셋을 추구했지만 정작 실전에서 원하는 만큼 성과를 거두지 못하니 이를 바꿔야겠다고 느꼈다. 근본적인 개념을 이해하고 문제를 이해하여 풀고자 하는 생각을 갖게 되었다.
그러던 중 필자가 몸담고 있는 글또에서 코드트리가 주관하는 챌린지를 개최하여, 한 달간 코드트리의 모든 커리큘럼을 체험할 수 있는 기회를 얻었다. 지금부터 써내려갈 이야기는 필자의 방법론을 바꾼 과정, 그리고 마인드셋이 바뀐 과정을 담아 볼 것이다.
In a nutshell
코드트리에서 한 달 살기
시작하고 보니
필자가 선택한 커리큘럼은 6단계 중 Novice High였다.
코드트리를 처음 이용하는 사람은 실력 테스트를 본다. 일정한 유형을 기본적으로 응용하는 문제가 짧은 제한시간과 함께 주어진다. 실수를 해서 좀 낮은 단계가 나왔다. 이를 기반으로 추천받은 커리큘럼은 원래 Novice Mid였지만.. 너무 쉬웠다. 그래서 테스트를 다시 보고, Intermediate Low를 추천받았다. 다만 필자가 채우고자 했던 개념이 Novice High에 있었기 때문에, 이를 선택했다. 향상을 위한 욕구만 있다면, 측정을 위한 툴은 철저하게 제공한다는 것이 코드트리의 장점이라고 느껴졌다.
학습하다 보니
코드트리에서 학습하면서 가장 마음에 들었던 부분은, 코딩 테스트 연습의 왕도인 “꾸준한 연습”을 달성할 수 있는 많은 도구를 제공한다는 것이었다.
코드트리에서는 매일 학습한 내용을 GitHub 계정에 자동으로 커밋으로 남겨 주는 기능을 제공한다. 때로는 객관식 문제를 풀었을 때도 커밋이 찍히는 것을 보면서 조금 눈치가 보이기도 하지만, 커밋의 의미는 결국 나날이 조금씩 발전한 것을 표시하는 데 있지 않나, 해서 아무래도 좋다고 생각했다.
한편 매일매일의 학습에 있어 EXP를 채우고 표시해 준다. 이로써 계획했던 것 만큼 시간을 투자해서 학습하는 것을 가시적으로 보여 준다. 문제마다 가중치도 있어서, 당초 목표한 바가 있던 필자로써는 매일 합리적으로 학습한다는 기분이 들었다.
시각적으로 의욕을 끌어올려주는 기능이 많은 한편, 시각적으로 필자를 불편하게 한 것도 있었다. 상술했듯 필자는 문제를 틀리면 자존심상해 하는 편인데, 객관식에서 헷갈릴 때 특히 그랬다. 그런데 코드트리에서는 세 번 문제를 틀리면 “도움이 필요한가요?” 팝업이 뜬다. 자신이 몰라하는 것도 화가 나는데, 개인적으로는 부채질을 당하는 느낌이 들었달까.. 게다가 해설을 본 문제는 EXP로 인정이 되지도 않으니까 더 그랬다. 하루 동안 안 보기 옵션이 있으면 정말 좋겠다고 생각한 부분 중 하나이다.
지나고 보니
의도했던 대로, 필자가 취약했던 개념에 있어 향상된 것을 느꼈다. 이미 알겠다고 생각하는 유형은 빠른 완료 테스트를 통해 빠르게 넘기고, 집중적으로 학습하고자 했던 동적 계획법이나 정렬은 하나하나 공부했다. 역시 직접 구현해보는 것이 가장 직관적으로 이해할 수 있는 방법이구나 싶었다. 문제에 눈이 멀어 깊이 학습하지 못했던 때보다 학습이 훨씬 용이했고, 무엇보다 재미있었다.
백준식 문제풀이, 즉 입력값을 직접 받아야 하는 문제 풀이 방식에도 익숙해졌다. 필자가 그간 LeetCode나 프로그래머스를 추구했던 이유는, 글로벌 변수와 입력값 받기가 익숙치 않아서 그런 것도 있었다. 하지만 친절한 개념 설명과 함께하다 보니 의외로 이런 부분에서도 이득을 봤다. 기꺼이 연습할 마음이 들게 하다 보니 입력 형식은 큰 장벽이 되지는 못한 것이다. 길게 보면 더 여러 가지 유형의 코딩 테스트에 대응할 수 있게 되었으니 좋은 일이다.
해설이 자바로만 되어 있는 점은 아쉬운 부분이었다. 필자는 Python3나 Swift로만 코드를 짜 왔기 때문에, 자바로만 되어 있는 해설은 버거웠다. 특히 취약한 개념에 대해 학습하고자 할 때, 개념을 이해하는 것도 녹록치 않은데 언어까지도 버거운 언어라는 것이 학습의 난이도를 높이기도 했다. 간신히 읽을 수는 있었지만. 표준 중국어를 배운 사람한테 광둥어로 된 해설을 주는 느낌이었달까.
번외로, 글또 멤버들을 위해 코드트리 측에서 학습 로드맵도 제공을 해 주셨었다. 일반적이지 않게 필자가 받은 혜택이라 먼저 언급하지는 않았다. 그런데 그 혜택이 무색하게, 필자는 그 존재를 눈치채지 못했다. 일반적인 사용자와 그냥 같은 조건에서 학습했던 셈. 그래서 필자가 느낀 점이 일반적으로 코드트리를 이용하고자 하는 독자분께 도움이 될 수 있을 것이라 생각한다.
닫는 말: 보조 무기
요즘 알고리즘 역량은 비단 신입뿐만 아니라 주니어 개발자라면 항상 필요하다고 느낀다. 실제로 글또 X 코드트리 챌린지 인원을 모집할 때 필자처럼 구직을 위해 하는 분들도 계셨다만, 이직을 위해 준비하는 분도 계셨다. 이전의 필자에게 알고리즘 공부란 짧고 굵게 해서 시험을 통과하고 버릴 것이었다. 실제로 처음에 챌린지에 지원한 이유도, “더 이상 코딩 테스트 준비를 하고 싶지 않기 때문” 이었다. 지금 확 역량을 끌어올려 두고 꾸준히 조금씩만 문제풀이를 하면서 실력을 유지하고자 했던 것. 하지만 한 달의 시간을 보내며 — 비록 마지막 일 주일 정도는 스케줄이 많아 제대로 하지 못 했지만 — 알고리즘과 함께하는 나날도 꽤 괜찮다는 생각이 들었다. 알아가는 재미를 좋아하는 필자에게, 코드트리 챌린지에 참여한 경험은 알고리즘 연습에 대한 필자의 마인드를 바꿔 주는 신선한 경험이었다.
FPS 게임으로 치환하면, “모바일 앱 개발자” 라는 필자의 포지션에 있어 알고리즘은 서브 웨펀, 권총과도 같다고 느낀다. 보통 전투는 주 무기로 한다. 하지만 주 무기의 탄약이 떨어진 상황 — 개발로 치환하면 알고 있는 범위 내에서 모든 것을 해 봤을 경우 — 에서 자신의 목숨을 살릴 무기는 바로 보조 무기이다. 알고리즘 연습을 통해 함양된 본질적인 문제 해결 능력, 그리고 효율적인 코드를 짜는 능력은 일종의 새로운 시각에서 문제를 해결할 수 있게 해 준다. 아직은 깊이 빠졌다기엔 조금 민망하지만, 알고리즘 연습, 코딩 테스트 연습을 좀 더 의욕적으로 할 수 있을 것 같고, 더 많은 것을 남길 수 있을 것 같다.