들어가며
이 글은 올해 처음으로 실시된 우아한 테크코스에 지원하여, 최초 코딩 테스트를 통과하고 프리코스를 듣고난 후기를 작성한 글입니다. 제 블로그의 2019년 상반기 라인 인턴 지원후기에서 볼 수 있듯이, 저는 프리코스까지만 듣고 하차하였으므로 이후의 전개에 대해서는 아는 바가 없습니다.
제가 이 글을 작성한 이유는 크게 세가지가 있습니다.
- 지원한 과정 자체를 글로 남기기 위함
- 혹시라도 내 정보가 도움이 될 다른 사람들에게 정보를 제공하기 위함
- 자바지기 박재성님이 프리코스의 수강후기를 궁금해하시기에, 이에 대한 리뷰를 남기기 위함
입니다. 참고하면서 읽어주시면 감사하겠습니다.
우아한 테크코스를 발견
우아한형제들은 이미 개발자들 사이에선 상당히 유명한 기업이다. 비개발자들 입장에선 '배달 서비스 앱 회사에 개발자들에 왜 열광하지?' 싶겠지만, 개발자 취준생들 사이에는 복지도 좋고, 일하는 보람도 낭낭한 회사로 잘 알려져있다. 2017년부터 우아한형제들은 "우아한 테크캠프"라고 불리는 교육형 인턴을 운영함으로써 신입 개발자들의 교육에도 많은 노력을 쏟고 있었다(고 알고 있다. 사실, 기업 동향에 대해서는 잘 아는 바가 없다.)
해커하우스 종료 후 취준생 모드에 들어가면서 여기저기를 다소 게으르게 뒤지고 있었는데, 페북에서 "우아한 테크코스"에 대한 공고가 올라왔고, 내 친구들로부터도 소식을 듣게 되었다. 지금까지 실시되어 왔던 "우아한 테크캠프"와는 별개로, 우아한형제들에서 무료로 신입 개발자들을 양성하는 교육 프로그램이었다.(인턴이 아니다!) 교육기간은 8개월로, 수료 완료시에 "1년차 경력을 가진 개발자"가 되어있도록 하는 것이 이 테크코스의 목표라고 하였다. 그 외에 이 테크코스의 특징으로는 "경험 위주의 교육" 등이 있는데, 자세히는 직접 링크를 확인하시라.
지원해도 되는 것일까?
"8개월의 교육기간만에 1년 경력의 웹 개발자가 될 수 있다"는 점은 상당한 매력포인트였다. 특히나 강사는 국내 자바계의 셀럽이신 자바지기 박재성님. (사실 자바 쪽의 유명인사는 토비님밖에 몰랐는데, 친구가 말해줘서 자바지기님을 새로 알게 되었다. NHN NEXT 쪽에도 있다가 우아한형제들의 기술 이사로 오셨다는데, 아마 NEXT에서의 경험도 우아한테크코스의 커리큘럼에 영향을 조금이나마 끼치지 않았을까 하고 조심스레 추측해본다.) 친구는 "박재성님께 직접 배우는 건데 마다할 이유가 있나?" 라고 하였고, 우아한형제들로부터 지원을 받는 교육 과정이니만큼 양질의 교육을 받을 수 있다는 점은 매우 명백했다.
그럼에도 불구하고 내가 망설였던 이유는 다음과 같다.
1. 취업 연계가 아니다.
공고에서는 "수료한 사람들 중 일부를 채용할 수도 있다"고는 말하고 있었으나, 이는 끝까지 수료하지 않으면 알 수 없는 일이다. 물론 내가 직접 과정을 밟아서, 열심히 해서 혹은 운이 좋아서 좋은 job offer를 찾거나, 우아한형제들에 입사할 수도 있을 것이다. 그러나 그것은 실제로 들어가보지 않으면 알 수 없는 일이다.
공고에서는 또한 "저희 회사에 들어오시지 않더라도, 이미 수료한 시점에서 여러분은 좋은 회사를 얼마든지 가실 수 있을 것입니다"라고 했다. 그리고 이 말은 분명 맞는 말일 것이다. 국비지원 교육을 받더라도 8개월을 받으면 어느 회사든 취직은 된다. 하물며 우아한형제들에서 실시했고, 엄선 끝에 선발된 교육생들로 구성되었고, 잘 짜여진 교육 과정을 마쳤다면, 좋은 회사에 취직하지 못하는 게 이상할 것이다. 그러나 나에게 이는 곧 올해의 취직 준비가 내년으로 미뤄짐을 의미했다.
물론 그 사이에 8개월의 꽉찬 교육과정으로 레벨업이 되어있을 테지만, 어떻게든 취직을 서두르고 싶었던 나에게는 조금 기나긴 여정이라고 느껴졌다.
2. 교육 과정을 다 따라갈 자신이 없었다.
우아한 테크코스 지원서에도 "여러분은 8개월이란 시간을 온전히 여기에 투자할 수 있다고 확신하시나요?"라는 문항이 나왔다. 일단 난 여기에 "그럴 수 있다"고 당당히 답하긴 했으나, 사실은 불안했다. 월화수목금, 오전 9시부터 저녁 6시까지 이어질 교육 과정. 이 타이트한 과정을 내가 끝까지 밀고갈 수 있을까 싶은 불안함이 있었다.
대학을 떠나오고 나서부터 나는 내 스케줄을 유동적으로 조절해왔다. 좋게 포장하면 유동적으로 조절한 것이고, 있는 그대로 말하면 내 살고 싶은 대로 산 것이다. 공부하고 싶으면 공부하고, 놀고 싶으면 놀고. 서울에 있고 싶으면 서울에 있었고, 놀러가고 싶으면 놀러 갔고, 본가에 가고 싶으면 본가에 내려가서 놀았다. 진정한 디지털 노마딩을 한 것이다. 자유로움을 느끼긴 했으나, 물론 정형화된 삶을 사는 사람들에 비해 효율성이 결코 좋았다고는 말을 못하겠다. 발전 없이 시간만 낭비한 적도 있었다는 생각이 드니 말이다.
어쩌면 이 교육과정의 끝에 "너는 어떤 기업에 100%의 확률로 채용이 된다"는 확신이 있는 상태였다면, 난 더 이상 고민하지 않았을 것 같다. 그러나 당시의 나는 '과정 완료 후 채용이 어떻게 흘러갈 지 전혀 모르는 상태에서, 8개월을 온전히 전부 교육과정에 전념할 수 있을까? 내가?' 싶은 불안감에 사로잡혀 있었다.
지원서 작성
위의 고민들은 사실 부질없는 고민들이다. 왜냐하면, "내가 실제로 교육 과정에 선발이 되리란 보장도 없는데 배부른 소리를 하는 것" 에 불과하기 때문이다. 하다못해 합격은 되어있는 상태에서야 할 고민이었기 때문에, 나는 바로 지원서 작성으로 넘어갔다.
지원서는 조금 특이했다. 일단, 인턴 과정이 아니다보니 경력, 학력 등의 작성은 일절 없었다. 본인이 어떤 사람인지를 위주로 서술하는 것이었고, 이를 토대로 교육생의 attitude를 판단하기 위해 그렇게 구성한 듯 하였다.
가장 기억에 남고, 가장 작성하기 난감했던 질문은 "무엇인가에 몰두해서 어떤 결과를 낸 적이 있냐. 프로그래밍과 관련되어 있지 않더라도 상관이 없다. 어떤 게임에 몰두해서 100등 안에 들었다. 이러한 것들도 가능하다. 1년간 매일 그림을 그려서 300장을 넘겼다. 이런 것들도 가능하다." 였다. 즉, 지원자의 몰입도, 덕력을 보는 문항이었다. 나도 주위로부터 오타쿠, nerd 소리를 늘 들어왔기에 작성할 이야기가 많을 것만 같았는데, 막상 생각해보면 또 아니었다. 나는 얕고 넓게 건드린 것이 많았지, 한 가지 분야에 몰두한 적은 거의 없기 때문이다. 난 항상 관심사가 한정되어 있고, 그 분야에 누구보다 열중할 수 있는 사람들을 늘 부러워했다.
고민 끝에 javaFX 이야기를 썼던 것 같다. 국내에서 javaFX는 참 좁은 입지를 가지고 있고, 관련 reference도 잘 안 나온다. 나는 javaFX로 지뢰찾기와 화면보호기를 만든 적이 있다. 화면보호기도 요즘에서는 거의 쓰지 않는 프로그램이므로 관련 reference를 찾는 노력이 조금 필요했다. 구글에서 javaFX 공식 API 문서를 뒤지고, 스택오버플로우와 구글을 뒤져가며 완성했다. 즉, 문항에서 "별 걸 다 궁금해하는 특성" 과 "굳이 바퀴를 재발명할 만큼 nerdy한 특성" 을 내비쳤다. 과연 이러한 점이 그들에게 얼마만큼 어필이 되었을까. 잘 모르겠다.
코딩 테스트
코딩 테스트는 프로그래머스에서 이루어졌다. 올해 코딩 테스트를 총 4번 봤는데, 그 중에 3번이 전부 프로그래머스였다. 요즘 한창 뜨고 있는 듯하다. 라인 인턴 코딩 테스트와 날짜가 겹쳤는데, 시간은 겹치지 않았다.
공고에서는 "알고리즘을 따로 공부하지 않아도 된다. 논리적인 사고력을 중점적으로 테스트할 것이다" 고 말했었는데, 실제 시험을 봐본 결과 나는 이 말에 동의를 잘 못하겠다. 물론 논리적인 사고력이 있으면 뭐든 잘 풀겠다만, "알고리즘을 공부했던 사람이라면 당연히 더 잘 풀 수 있는 문제" 들이었다. 실제 생활코딩 등을 보니 저 말의 달콤함에 속아(?) 예상보다 높은 난이도에 당황한 사람도 있었던 것 같다. 정리하자면 "그냥 평범한 코딩 테스트였다." PS를 평소에 준비한 사람들이었다면 손쉽게 풀었을 것이다. 내 경우엔 2시간만에 모든 문제를 다 풀 수 있었다.
한가지 불만인 점이 있다면, 문제 설명이 자세하지 못했다 는 점이 있다. 내 생각에, 테스트 코드가 알아서 채점하는 시험은 문제에서 그 어떠한 질문이 나올 수가 없을 정도로 매우 자세하고, 엄밀하게 설명되어 있어야 한다. 사람이 채점하는 경우라면 정상참작 의 여지가 있다. 출제자가 의도했던 바와 다르게 문제를 풀더라도, 출제자가 직접 보고 "해석에 논란이 여지가 있을 법했다"고 인정이 된다면 점수가 정상적으로 채점이 된다. (물론 이 또한 문제가 없는 건 아니다.)
조금 곁다리를 더 풀어보자면, 작년에 학교에서 실습 조교를 맡았을 때, 교수님이 과제나 시험 문제에서 서로 다른 해석이 나올 여지가 많은, 애매모호한 워딩의 문제들을 자주 내셔서 불만을 가졌던 적이 있다. 학생들이 혼란스러워 했기 때문이다. 그러나 이는 교수님이 의도한 바였다. 교수님은 학생들이 한 가지 기준에만 맞춰서 문제를 푸는 것이 아닌, 자기 나름대로 해석한 바에 맞춰서 풀면 전부 다 점수를 주는 방식으로 채점을 하고 계셨다. 당신이 힘들어질 게 뻔한데도, "이렇게 하면 모두가 다 불만없는 점수를 받아가지 않겠냐"는 것이 교수님의 생각이었다. 형평성의 관점에선 다소 논란이 있을 수도 있으나, 여하튼 이는 인간이 채점하는 시험에서 취할 수 있는 전략 중의 하나이다.
정답률 4%를 자랑하는 전설의 문제(2009년 사회문화화 3번 문제)다. 이 문제는 "응답자"와 "국민"이라는 용어를 교묘히 바꿔 낚시질을 했다. 대부분의 학생들은 바보였던 게 아니라 상식에 의거해 푼 것이고, 4%의 학생들도 절반 정도는 '엄밀히 말하면 2번이 답인데, 혹시 출제 미스 아닐까?' 하고 불안해하며 마킹하지 않았을까 싶다. 그리고 당연하게도 정답 정정은 없었다. 이런 케이스는 드물지 않게 있다. 출제자의 숨겨진 의도가 있는지, 그냥 출제자가 실수했는 지 혼란이 생기는 경우는 모두에게 짜증을 유발한다. 개인적으로 이런 문제가 발생한다면, 그 시험은 더 이상 실력 경쟁이 아니라 운 싸움으로 전락한다고 생각한다.
그러나 온라인 상에서 일괄적으로 채점되는 시험에서 위와 같은 방식은 허용되지 않는다. 출제자가 만일 본인의 의도를 완벽하게 다 밝히지 못한다면, 의도를 다르게 해석한 학생은 불이익을 받는다. 더 심각한 문제는 불이익이 발생했다는 그 사실을 출제자와 수험자 모두가 다 모를 수도 있다 는 사실이다. 출제자는 "상식적으로 이렇게 해석하는게 정상 아닌가?" 라고 생각하고 넘어가 버리겠지만, 사람의 상식은 저마다 다르다.
실제로 프로그래머스를 풀면서도 이러한 문제들을 몇 번 겪었었고, 그럴 때마다 분노의(?) 이의제기를 해 왔었다. 그래서 문제 설명이 수정된 경우도 있다. 그런데 이번 우아한 테크코스에서도 그런 문제가 나왔다. (국어에서의 "이내" 라는 표현을 잘못 사용한 경우였다. 이내는 과연 <= 일까, < 일까? 국립국어원에서는 '일상 생활의 개념이므로 수학적인 의미를 적용하기 어렵다'고 설명하고 있다. 나는 <= 으로 해석했으나 실제로 그렇게 놓고 문제를 풀었을 때, 논리적으로 도저히 성립하지 않는 예외 케이스가 발생해버리고 말았다.) 메시지 보내기 기능으로 이를 제기하자, 나중에 해당 문제의 보충 설명이 추가 되었다. 사실 내가 이의제기 하고 싶은 문제는 하나 더 있었는데, 그 부분은 그냥 패스했다. 시험 종료 후 같이 푼 친구와 이야기를 해보니, 그 친구도 "나도 헷갈려서 덕분에 '이내'를 국어사전에서 검색해봤다." 라고 말했다. 다음 코딩 테스트 출제 때에는 이러한 일이 없기를 바랄 뿐이다.
여하튼, 여유롭게 문제를 제출했고 며칠 뒤 통과 연락을 받았다.
우아한 테크코스, 프리코스 시작
이번 테크코스는 특이하게도 Pre-course라는 파트가 들어있었다. 정식 코스를 시작하기 전에, 3주간 사전에 준비되어 있는 코스를 밟도록 하는 것이었다. 이러한 코스를 통해 교육생들은 "우아한 테크코스는 실제로 이런 식으로 진행이 되겠구나" 하며 감을 파악할 수 있을 것이라는 설명이었다. 프리코스의 결과는 최종 오프라인 코딩 테스트를 통해 결정이 난다고 하였다.
정식 코스에 앞선 예행 코스라고 하길래, 난 당연히 실제 정식 코스처럼 평일에 나가서 교육을 들어야하는 줄 알았다. 그러나 내가 잘 못 알고 있었던 것이고, 프리코스는 3주간 미션이 주어지는 형태로 진행되었다. 미션은 메일로 전달 되었으며, github 상에서 프로젝트를 clone하고, 이를 pull request 넣어 제출하는 방식이었다.
받은 프로젝트들은 다음 3개였다.
- 숫자 야구 게임 (1주차)
- 자동차 경주 게임 (2주차)
- 로또 뽑기 (3주차)
프로젝트의 내용 자체는 굉장히 단순했다. 자바 관련 강의나 책에서 쉽게 찾아볼 수 있는 실습 문제들이기도 하다. 그러나, 자바지기님은 여기에 몇 가지 제약 조건들을 추가했다. 이러한 점이 프리코스의 프로젝트들을 다른 프로젝트들과 차별화되게 만들었다.
일단 잘 알려진 java convention을 지켜야만 했고(명명법, 괄호, 심지어 엔터치는 법까지!), 객체 지향의 특성을 극한으로 끌어올려야만 했다. 코드의 indent 깊이가 2를 넘으면 안된다는 조건(즉, if 안에 while, 또 그 안에 if를 작성하는 것은 불가능하다. 들여쓰기가 3단계가 되어버리므로)이나, 각 메소드의 최대 길이는 15줄 이내로 제한한다는 조건 등이 들어가므로, 간단한 프로젝트라 하더라도 조금 고민을 하고 만들어야만 했다.
각 주차마다 Pull request로 과제를 제출하면, 다음 날에 이에 대한 feedback과 다음 미션에 대한 설명이 전달되었다. feedback은 개별로 오는 것이 아니라, 교육생들의 프로젝트를 전체적으로 보고 공통적으로 알려야할 것들 위주로 선별한 것이 왔다. 또한, 다음 미션으로 넘어갈 수록 제약 조건이 점점 더 많아지고, 하드코어해졌다.
1인 개발을 쭉 해왔던 나에게는 다소 생소하고, 어려운 제약 조건들이었다. 어차피 나중에 코드를 보는 사람도 결국 나인데, convention을 지킬 필요가 얼마나 있었겠나. 이번 과정을 거치면서 "협업, 유지 보수를 위해 convention을 준수해야 한다는 것을 오랜 기간 간과하고 살아왔구나" 싶은 반성을 하게 되었다.
또한, 나는 나름대로 객체 지향 프로그래밍이 무엇인지 어느 정도 이해하고, 그것을 지켜서 코딩을 하고 있다 생각했었는데, 오산이었음을 깨달았다. 제약 조건을 만족하는 프로그램을 만들기 위해서는 클래스를 정말 작은 단위로 쪼개야 했다. 그러다보니 '아니, 이런 것까지 클래스를 만들어서 처리한다고?' 싶은 생각까지 들었다. 그러나 객체 지향 프로그래밍의 관점에서는 그렇게 하는 것이 좀 더 올바른 선택인 듯했다. 자바지기님의 내공(?)을 새삼 실감할 수 있었다.
풀 리퀘스트는 공개적으로 이루어졌기 때문에, 해당 repository에서 다른 교육생들의 코드 또한 볼 수 있었다. 다들 정말 열심히 하고 있었다. 자바지기님도 나중에 메일로 "다들 너무 열심히 따라와서, 최종 선발 때도 고민이 많을 것 같다" 는 식으로 말씀하셨다. 내가 제일 게으르게 했던 것 같다는 생각도 좀 들고..
프리코스 끝, 그리고 감사했습니다.
3주간의 프리코스는 전부 끝이 났고, 나는 마지막 오프라인 코딩 테스트를 보러가지 않았다. 그 날 라인 인턴 합격이 결정되어서 우아한 테크코스에 참가할 래야 참가할 수가 없기 때문이었다. 그래도 3주간 해온 게 있으니 테스트라도 보러 가는 것이 어떨까 싶었지만, 내 컨디션이 좋지 않아서 결국엔 포기했다. 약간 유종의 미를 거두지 못한 것 같아 아쉬움이 남는다.
위에서 우아한 테크코스를 지원하는 것 자체를 고민했다는 글을 많이 썼는데, 3주간 프리코스를 들으면서 그 불안감은 상당 부분 해소가 되었었다. 코스가 내 예상보다도 더 알차게 진행되었기 때문이다. 실제로 라인 인턴을 하지 않고 이 우아한 테크코스 과정으로 넘어갔더라도 보람찬 교육 과정을 들을 수 있었을 것 같다는 생각이 든다. 불과 3주밖에 안되는 과정 속에서도 여러 가지를 배울 수 있었는데, 8개월의 기간이라면 훨씬 더 많은 것을 배울 수 있었을 테니. 최종 선발된 교육생들은 앞으로도 잘 될 것만 같다.