티스토리 뷰

 

서론

우아한테크코스 7기, 8기, 그리고 이후의 기수에 지원하는 분들께 도움이 되고자 글을 작성한다. 이번 6기를 준비하면서 이전 기수 지원자분들의 글들을 많이 참고했다. 내가 도움을 받았던 만큼 나도 다른 분들께 도움을 드리고 싶었다. 사실 나는 합격한 특정 지원자의 케이스를 그대로 따라 간다고 합격 가능성이 올라간다고 생각하진 않는다. 각 케이스가 성공했던 본질적인 이유를 학습하는 것만이 도움이 될 수 있다 생각한다. 그렇기에 이 글을 읽는 지원자분이 계신다면, 여러가지 후기 글들을 그대로 믿고 따라하기보다는 취사선택하여 설득력 있는 부분만 잘 챙겨가셨으면 좋겠다.

 

우테코 6기 선발과정은 지원서 작성 - 4주 간의 프리코스 - 최종 코딩테스트 순으로 진행됐다. 지원서를 제출한 뒤 모든 인원이 프리코스에 참여했다. 그 후 지원서와 프리코스 과제 및 소감문을 바탕으로 최종 2배수가 선정됐다. 이후 오프라인으로 최종 코딩테스트를 치르고 모든 과정의 점수를 합산하여 최종 선발이 이뤄졌다. 선발과정의 순서에 따라 내가 어떤 주안점을 두고 각 과정을 진행했는지 작성하려 한다.

 

 

1. 지원서 작성

 

많은 지원 후기글과 설명회에서 가장 중요하다고 언급되는 지원서 작성 단계이다. 내가 썼던 지원서 내용을 적을까 했지만 오히려 생각의 폭이 좁아지게 만들 수 있을 것 같아, 내가 어떤 주안점을 두고 작성했는지에 대해서만 서술하려 한다.

 

- 하나의 이미지로 모으기

지원서의 모든 내용을 읽었을 때 결국 하나의 이미지로 모이는 게 가장 중요하다고 생각했다. 이번 우테코 프론트엔드 과정은 대략 1000명 정도 지원했다. 이처럼 우테코의 인기는 나날이 높아지고 있다. 수많은 지원자 중 최종 40인으로 선택되기 위해서는 내 색깔을 명확히 드러낼 수 있어야 했다. 따라서 지원서만으로 나라는 사람을 생생히 그려볼 수 있도록 작성하려 애썼다.

 

이를 위해서 한 가지 방향으로 얼라인될 수 있는 소재들을 선택하는 것이 중요하다고 생각했다. 독립적인 네가지 문항을 각각 작성한다기보다는 네 가지 문항으로 구성된 하나의 작품을 완성한다고 생각했다. 나는 나의 정체성을 "창업인의 피가 흐르는 개발 꿈나무" 정도로 정의하고 그에 맞는 글감들을 정했다. 네 가지 문항에서 서로 다른 이야기를 할지라도 결국은 이 한 가지 정체성으로 모이게끔 작성했다. 자랑하고 싶은 게 있어도 내가 계획한 큰 그림에 맞아떨어지는 내용이 아니라면 배제했다.

 

또한 사용하는 단어, 어투와 같은 표현적인 부분도 중요하다고 생각했다. 그래서 나는 열정과 주체성을 잘 드러낼 수 있는 표현을 만들기 노력했다. 같은 내용이어도 표현에 따라 아예 다른 느낌을 줄 수 있다. 내가 아무리 열정과 주체성이 넘치는 경험에 대해 작성했더라도 그 글을 읽고 직관적으로 그런 느낌이 들지 않으면, 그 글의 의도는 달성되지 못한 것이다. 그래서 나는 지인이 내가 의도한 느낌을 잘 전달받았는지 확인한 뒤 표현을 수정하는 과정을 거쳤다.

 

나를 가장 잘 대표할 수 있는 이미지가 무엇인지 생각해보고, 내 글을 모두 읽었을 때 나에 대해 아무것도 모르는 사람도 그런 이미지를 그릴 수 있을 법한지 확인해보자. 그 이미지는 한 문장으로 딱 떨어지게 정의될 필요도 없고 단순할 필요도 없다. 다만 무엇이 됐든 이미지 하나를 염두에 두고 완성한 글은 그렇지 않은 글에 비해 설득력이 높을 수밖에 없다고 생각한다.

 

- 하고 싶은 말과 해야 하는 말 사이의 균형 잡기

하고 싶은 말은 내가 드러내고 싶은 정보이다. 내가 자부심을 가지고 있고 그래서 꼭 이야기하고 싶은, ego가 담긴 정보들이다. 그리고 해야 하는 말은 이성적으로 생각했을 때 평가에 중요하게 작용할 것 같은 정보들이다. 예를 들면 "자신만의 학습 전략이 있는가", "동기부여가 되어 있는가"등과 같은 평가 요소에 대한 답이 될 수 있는 정보들이다. 하고 싶은 말만 해서도 안 되고 해야 하는 말만 해서도 안 된다. 하고 싶은 말을 배제하면 개성이나 글 맛이 안 살고, 해야 하는 말을 배제하면 좋은 평가를 받지 못할 수도 있기 때문이다. 평가자분들도 사람이기에 개성이 담긴 반짝이는 글을 읽고 싶어하실 것이다. 동시에 평가의 객관성을 위해 정량화된 평가 기준도 존재할 것이다. 나는 이러한 사항들을 모두 고려하려 했다. 내가 하고 싶은 말에는 무엇이 있는지, 그리고 내가 해야 하는 말에는 무엇이 있는지 각각 리스팅했다. 그 후 하고 싶은 말과 해야 하는 말이 골고루 충분히 담겨 있는지 확인해가며 글을 보완해나갔다. 최대한 내가 하고 싶으면서 동시에 해야 하는 말들로 채우려 노력했다.

 

- 가독성을 높이기 위한 전략

당연한 부분이지만, 글쓰기에 익숙하지 않으면 쉽게 챙기지 못할 수도 있을 것 같아 추가했다. 수십, 수백개의 지원서를 연달아 정독하는 게 얼마나 어려운 일일까? 물론 열심히 읽어주시겠지만 인간으로서의 한계가 분명 있을 것이다. 따라서 최대한 읽기 쉬운 글을 작성하기 위해 노력했다.

 

이를 위해 크게 다섯 가지를 신경썼다.

첫째, 문항 별로 제목을 달아주었다. 각 문항 별 답변에 대해 흥미를 불러 일으키는 짧은 제목을 붙였다. 제목을 통해 내 글을 읽고 싶은 마음을 자극하고 어떤 내용을 담았는지 두괄식으로 드러냈다.

둘째, 짧은 호흡의 문장으로만 작성했다. 자소서와 같이 설득의 목적이 분명한 글에서는 읽는 피로감을 낮추는 게 특히나 중요하다. 긴 문장이 있으면 두 문장으로 나누었다. 아무리 길어도 두 번의 호흡에는 읽히는 문장으로만 구성했다.

셋째, 구체적이고 명확한 표현만 사용했다. 경험으로부터 느낀 점이나 나의 특성에 대해 작성할 땐 나도 모르게 추상적인 형용사들을 쓰게 된다. 그런데 그런 표현으로 채워진 글은 매력적이지 않고 상투적으로 느껴진다. 그렇기에 나는 최대한 구체적이고 만져지는 표현들로 채우려고 노력했다. 구체적인 형태가 없다면 비유를 활용했다. 내 머릿속의 내용을 있는 그대로 평가자의 머릿속으로 옮길 수 있도록 노력했다.

넷째, 문단을 나누었다. 보통 하나의 답변에는 여러가지의 근거와 사례들이 담긴다. 이것들을 하나의 문단에 몰아넣으면 구조 파악이 어렵다. 따라서 나는 글의 전체 구조가 파악될 수 있는 형태로 문단을 나누었다.

다섯째, 흥미를 유발할 수 있는 키워드와 표현을 중간 중간 넣었다. 사실 지원자들이 주로 사용하는 소재나 단어들이 크게 다르지 않을 것이라 생각한다. 그런데 이전에 본 듯한 단어와 표현으로만 채워진 글을 읽다보면 그 메시지도 와닿지 않을 것이다. 그래서 글을 한 번 작성한 후에, 읽는 이의 머리를 깨울 수 있는 신선한 단어와 표현들로 치환하는 과정을 거쳤다. 물론 글쓰기 대회가 아니기에 표현보다는 진정성 있는 내용이 먼저라 생각한다.

 

2. 프리코스

 

    우테코 선발과정의 가장 독특한 부분이자 교육과정을 체험해볼 수 있는 소중한 기회이기도 하다. 프리코스에서는 주차별로 주어지는 과제를 완성하고 소감문을 작성하게 된다. 프리코스 동안 평가와 관련하여 주안점을 두었던 부분은 다음과 같다.

 

- 기본 실력 증명하기

우테코는 비전공자도 환영하는, 프로그래밍 실력에 대해 열린 교육기관이다. 하지만 기본적인 프로그래밍 능력은 갖춘 사람을 뽑는다. 그래서 나는 프리코스 과제에서 내가 비전공자일지라도 기본적인 실력은 갖추었음을 증명하기 위해 애썼다.

 

프리코스 과제는 크게 기능 요구사항과 프로그래밍 요구 사항으로 나뉜다. 기능 요구사항은 특정 기능들이 구현되었는지 확인하고, 프로그래밍 요구 사항은 주로 깨끗한 코드 작성을 위한 원칙을 지켰는지 확인한다. 둘 모두 중요하겠지만 기능 요구사항이 더 중요하다고 생각했다. 그래서 리팩토링에 앞서 정말 주어진 기능 요구 사항들을 잘 구현했는지 여러 차례 확인하고 보완했다. 또, 사람의 눈으로는 놓칠 수 있는 부분이 있을 것이기에 테스트 코드를 작성해서 다시 한 번 확인했다. 그 후 요구사항에 명시되지는 않았지만 필요하다고 생각되는 유효성 검증 로직을 추가했고, 그 후에 깨끗한 코드를 위한 리팩토링을 했다.

 

프리코스 기간 동안 커뮤니티에 좋은 코드 작성법과 관련한 수많은 정보가 올라왔다. 그리고 깨끗한 코드의 중요성이 크다는 분위기가 알게 모르게 점점 강해졌다. 커뮤니티에서 좋은 정보들을 많이 접할 수 있어서 좋았지만, 한편으로는 깨끗한 코드에 대한 과한 집착이 생기고 평가에 대한 걱정이 커지기도 했다. 만약 그때로 돌아간다면 그런 걱정을 떨치고 주어진 요구사항에만 더 집중했을 것 같다.

 

- 성실함/핏이 맞음을 행동으로 증명하기

프리코스에서는 일정 기준의 점수만 넘으면 동일하게 평가된다고 한다. 그렇다면 프리코스 결과물은 지원자가 본 과정을 성실하게 따라올 사람인지, 본 과정과 잘 맞는 사람인지를 파악하기 위해 활용되지 않을까 생각한다. 지원서에서 아무리 휘황찬란하게 써놔도 프리코스에서 보여준 행동들이 불성실하거나 적극적이지 않다면 설득력이 떨어질 것이다.

 

나는 평가와는 별개로 개발 공부에 대한 욕심이 컸고, 프리코스 방식도 잘 맞아서 자연스레 열심히 하게 되었던 것 같다. 시험기간이지만 자꾸만 프리코스 과제가 눈에 밟혀 매일 매일 커밋을 남겼다. 그리고 매주 소감문도 성실히 작성했다. 크게 "시간을 많이 투자한 부분"과 "배우고 느낀 점"을 나누어 작성했다. 또한 각 항목에 대해 여러 개의 글을 소제목으로 나누어 작성했다. 개발적인 면뿐만 아니라 인간적인 성장에 대해서도 작성했다. 최대 글자수는 5000자이니 쓸 수 있는 지면이 꽤 많다. 글자수 제한 때문에 지원서에서 보여주지 못했던 면들을 소감문을 통해 드러내면 좋을 것 같다.

 

3. 최종 코딩 테스트

잠실 루터회관 최종 테스트 현장

 

    최종 코딩 테스트는 프리코스를 스스로 구현했음을 증명하기 위한 시험이다. 오프라인으로 치뤄지며 5시간의 제한 시간이 존재한다. 최종 코딩 테스트와 관련하여 전하고 싶은 레슨런은 다음과 같다.

 

- 5시간은 짧지 않다

최종 코딩 테스트는 5시간이 주어진다. 일단 프리코스와 다르게 제한 시간이 있다는 사실만으로 부담이 크고 조급함이 생긴다. 하지만 5시간은 생각보다 긴 시간이다. 해가 중천에 떠있는 낮부터 해가 완전히 지는 저녁까지의 시간이다. 조급함이 들더라도 최초 설계만 제대로 하고 구현에 들어간다면 무사히 구현에 성공할 것이다. 아마 체감되는 문제의 난이도는 기존 프리코스에 비해 높다고 느껴질 수밖에 없을 것이다. 실제 난이도가 높지 않더라도 부담감이 크기 때문에 높게 느껴질 것이다. (나는 이번 최종 테스트 시험 당시 문제가 이전 기수에 비해 훨씬 어렵다고 생각했지만, 끝나고 보니 그 정도의 난이도는 아니었다.) 나는 조급했지만 그럴수록 요구 사항 분석과 설계에 시간을 더 많이 들이려 애썼다. 내 머릿속으로 구현에 대한 큰 그림을 어느 정도 그린 뒤, 80% 정도의 확신이 들었을 때 구현을 시작했다. 1시간 정도를 분석과 설계에 활용했다. 두번 정도 최초 계획대로 동작하지 않고 테스트에 실패해 당황했지만, 5시간 안에 잘못된 점을 바로잡고 설계를 수정할 수 있었다. 5시간은 생각만큼 짧지 않으므로 설계에 시간을 충분히 투자하고, 실수하더라도 멘탈을 잡고 끝까지 해나가면 완성할 수 있을 것이다.

 

- 5시간은 길지도 않다.

5시간은 결코 짧지 않다. 하지만 여유를 부릴 정도로 길지 않다는 사실은 기억해야 한다. 구현을 어느정도 성공한 느낌이 들면 방심을 하고 여유를 부리게 될 수 있다. 혹은 코치분들께서 시간 제한이 짧은 점까지 고려해서 쉽게 출제한다는 말씀을 하시기에, 준비하고 대비할 필요가 없다 생각할 수도 있다. 하지만 내 기준에서는 여유를 부리거나 요구사항을 띄엄띄엄 봐도 될 정도로 쉽게 느껴지지는 않았다. 따라서 이전 기수의 최종 시험들이 모두 쉽게 느껴지는 정도의 실력이 아니라면, 전략이나 대비책을 미리 마련해두는 것이 좋을 것 같다. 미리 코드 템플릿을 준비하거나, 매뉴얼 같은 것을 만들어 두면 큰 도움이 될 것이다.

 

- "돌아가는 쓰레기를 만들어라"의 의미

최종 시험 당일 12시에 메일이 한 통 온다. 그리고 그 메일에는 무엇보다 돌아가는 쓰레기를 만드는 것이 중요하다는 글이 적혀있다. 나는 이 글의 의미를 단순히 예제 테스트를 통과할 수 있을 정도의 구현을 하라는 의미로 받아 들였다. 그래서 최종 시험 동안 테스트 통과에만 온 신경을 기울였다. 그래서 테스트를 통과했을 때 마음을 놓고 방심했다. 하지만 시험이 끝난 후 집에 돌아와 최종 결과물을 확인해보니 충족하지 못한 요구 사항들이 있었다. 비즈니스 로직은 제대로 완성했지만 출력에서 실수를 한 부분도 있었고, 구현조차 빼먹은 부분도 있었다. 알고 보니 테스트가 느슨하게 작성되어 있어 아주 아주 기본적인 구현만 완성되면 통과될 수 있었던 것이다. 이 사실을 깨닫고 최종 결과 발표까지 실수에 대해 자책하며 괴로워했다. 이 글을 본 지원자분이 있다면 테스트를 통과하더라도 꼭 끝까지 방심하지 말고 기능 요구사항 충족이 됐는지 확인하셨으면 좋겠다. 자신의 눈도 믿으면 안 된다. 직접 테스트를 작성해서 꼼꼼히 확인하기 전까지는 믿으면 안 된다. "돌아가는 쓰레기"는 예제 테스트만 통과하는 결과물이 아니다. 기능 구현 사항들이 실제로 잘 충족된 결과물이다. 예제 테스트를 너무 믿지 말자. 물론 기능 구현에서 실수가 있었지만 최종 합격을 했기에 이것이 절대적인 영향을 준다고는 할 수 없다. 하지만 최종 시험에서의 실수 하나하나가 최종 결과 발표까지 생각보다 큰 고통이 될 것이니, 기능 요구사항 충족을 부디 잘 확인하셨으면 좋겠다. 

 

맺음말

 

우테코 선발과정에서 가장 어려운 건 불확실성을 이겨내는 일이다. 프리코스 과정이 즐거운 것과는 별개로 결과의 불확실함으로 인해 불안을 느끼게 된다. 지원서, 프리코스, 최종 테스트를 종합하여 평가된다고 하니 평가 기준을 가늠하기 어렵다. 그리고 커뮤니티에서 다른 지원자들의 이야기를 듣거나 지원 후기 글에서 앞선 지원자들의 이야기를 듣다보면 스스로 잘 준비하고 있는 게 맞는지 걱정이 생긴다. 자신의 백그라운드에 대해서도 걱정이 된다. CS 전공자, 타 교육 수료자, 재직 경험자라면 우선순위에 밀릴까 걱정되고, 비전공자라면 자신의 실력이 걱정된다.

 

이런 불확실성을 어떻게 극복하면 좋을까? 직접 선택을 내리고 그 결과에 책임 지는 방법을 연습하는 중이라 생각해보면 어떨까. 선발과정에서의 모든 것은 선택의 문제이다. 또한 당연한 말이지만 어떤 선택을 내리든 그 선택에 따라 다른 결과가 나타나게 된다. 선택에 부족한 점이 있다면 실패라는 결과로 드러날 것이고, 선택이 옳다면 성공이라는 결과로 드러날 것이다. 어떤 전략을 택할지, 얼만큼의 노력을 들일지 자신이 직접 선택하고 그 결과도 자신이 책임져야 한다. 남들보다 노력을 덜 들이더라도 전략을 영리하게 선택한다면 좋은 결과를 얻을 수도 있을 것이다. 반대로 남들보다 전략은 좋지 않더라도 더 많은 노력을 들이면 좋은 결과를 얻을 수도 있을 것이다. 정답은 없다. 이런 불확실한 상황에서 스스로 선택하고 그 선택에 책임지는 법을 연습하는 중이라 생각하고 자신의 선택에 믿음을 가져봐도 좋을 것 같다. 이것이 자신의 멘탈을 지킬 뿐만 아니라 좋은 결과에도 도움이 될 것이라 생각한다.

 

끝으로, 한때 선발 과정에 최선을 다했던 지원자로서 이후 기수의 간절한 지원자분들께 응원의 메시지를 전달드리고 싶다. 나는 개인적으로 간절함과 진심이 재능과 실력만큼이나 보상받아야 마땅하다고 생각한다. 하지만 이상과는 다르게 세상은 냉정한 결과중심주의다. 아쉽긴 하지만 선발이 이루어져야 하는 한 결과물이 중요하다는 사실은 변하기 어려운 듯하다. 그래도 한 가지 위안이 될만한 사실은, 우테코의 교육자분들은 지원자의 진정성과 과정에서 흘린 땀에 큰 가치를 두시는 것 같다는 사실이다. 최선을 다한다면 그 진심이 반드시 평가자분께도 가 닿을 것이라 생각한다.

 

모두 자신의 방식대로 나아가 원하는 결과를 얻게 되었으면 좋겠다 💪🏻