우테코 5기 AN(안드로이드) 최종코딩테스트 후기

반달·2022년 12월 22일
5

우테코 1차 합격!

사실 엄청 긴가 민가 했던 합격이었다. (물론 기분은 하늘을 날듯 했다.)
같이 코드리뷰 스터디를 하던 사람들중에 나 포함 두명만 됐었는데 순수 프로그래밍 실력으로만 따진다면 나는 내가 될 수 없다고 생각한다.

우테코측에서 어떤 부분을 보고 나를 합격 시킨지는 모르겠지만,
몇가지의 질문 사항의 답을 굉장히 고민하며 내 열정과 노력을 표현했고,
프리코스로 진입해서는 최대한 요구사항을 지키려고 하고 또 공통 피드백 받은 부분, 스터디원으로 부터 코드 리뷰를 받은 부분들을 지키려고 하였다.
정말 그게 전부다. 내가 코딩실력이 특출나다? 전혀 아니었다.
만약 나중에 내가 왜 합격됐는지 들어 볼 기회가 있다면 꼭 들어보고 싶다.


최종 코딩테스트를 보러가는길..

부천에서 몽촌토성역까지 최종테스트를 보기위하여 2시간정도 걸리며 우아한 형제들 큰집에 도착 하였다.
네카라쿠에 해당하는 우형의 빌딩을 보자마자... 꼭 미래에 입사하고싶다는 포부를 다졌다.

이건 최종테스트를 보러 오신 모든 분들에게 나눠주신 펜과 작은 노트이다.
엄청 긴장 되면서도 이런 굿즈(?)를 받으니 기분이 한결 차분해지긴 하였다.
우테코 감사합니다!


최종 코딩테스트의 미션

🍔 코치들에게 점심 메뉴 추천해주기
1. 코치들의 이름을 입력받고
2. 각 코치들의 못먹는 음식을 입력 받고
3. 카테고리(ex 일식, 한식)를 랜덤으로 설정한 다음
4. 차출된 카테고리에 맞추어 음식 추천

이렇게 보니 엄청 쉬워 보이지만, 그 중에서도 약간은 까다로운 예외사항이 있었다.

  • 카테고리는 두번까지만 중복 가능
  • 한번 골라진 메뉴는 더 이상 나오지 못함
  • 못 먹는 음식을 추천하지 못함

물론 또 다른 세부적인 프로그래밍 요구 사항들도 있었다.

최종 코딩테스트의 난이도

최종 코딩테스트의 난이도는 우려와 다르게 생각보단 괜찮은 정도였다.
4시간 정도엔 완성할 수 있게끔 난이도를 조절하여 미션을 정했다고 하였다.
(과거 3기 4기 최종 테스트에선 난이도가 기존 미션보다 약간 더 높은? 정도였다.)

체감상 이번 5기 프리코스 기준으로 3주차와 4주차 사이 정도의 난이도라고는 생각했다.


나의 최종 코딩테스트 준비

원래 프리코스를 진행하며 한 주마다 코드리뷰를 해왔던 스터디원들 중 희망자에 한하여 최종 코테 대비로 3기 4기에 있었던 미션들을 풀어보았다.
일단 연습했던건 TDD(테스트 주도 개발)였다.
프리코스가 끝나고 3주동안 연습해봤는데 생각보다 시간단축에 대한 퍼포먼스가 안나왔다.
아마 연습량의 부족과 테스트 코드 작성의 숙련도 부족이지 않을까 싶다.
5시간 타이머를 정해두고 미션을 해결하는 연습도 같이 하였는데 그나마 시간을 아슬하게 맞추는 정도였다.


최종 코딩테스트를 통해 알게된 나의 부족했던 점

1. 프로그램 설계를 짜는데 오래걸렸다.

아 정말 고민되는 딜레마다.😱

  • 설계를 최대한 깔끔하게 끝내놓고 한다? (실제 시험장에서 내가 한 방법)
    • 장점
      • 구현 후에 설계관련 리팩토링을 줄일 수 있다.
      • 하나를 끝냈다는 심리적 안정감을 얻는다(?)
    • 단점
      • 돌발적인 상황이 나오면 대처할 시간이 부족해진다.
  • 대강의 설계를 끝내놓고 구현을 최대한 빨리 한 후 문제가 있음 해결한다?
    • 장점
      • 구현을 최대한 빨리 끝내므로 돌발적인 문제에 대처할 시간이 생긴다.
    • 단점
      • 설계 리팩토링이 거진 필수적이다.

이번에 내가 선택한 방법은 전자였다. 때문에 기능 구현을 완성하였을 때 시간이 별로 남지 않았다.
물론 내가 어느 정도 숙련자였다면 대강의 설계만 해도 척척 리팩토링 해나갔겠지만, 시간이 촉박한 상황에서 내 수준으로 그러기는 쉽지 않았다.

그래서 리팩토링은 필수적으로 하게 되겠지만, 그래도 리팩토링 할 껀덕지를 최대한 안만들기 위해서 조금 더 신경써서 코드를 작성해나갔다.

2. 시간관리의 미흡 (부제 : 이상과 현실의 경계)

위의 1번과 일맥상통하는 말이지만, 나는 느리다. 정확히 말하자면 완벽하게 하기위해 느리다.
이번 4주간의 프리코스를 진행하면서 내가 1차 합격을 할 수 있었던 큰 이유 중 하나는 바로 일주일 단위의 미션 진행이었다.
시간이 솔직히 남아 돌았다. 그래서 놀았던게 아니라 다음과 같은 스케줄로 진행했다.

일차내가 한 일
1전에 진행한 미션 복기
2 ~ 3다음 미션을 진행하기 위해 필요한 내용 학습
4 ~ 5미션 구현
6미션 정리 및 제출

그렇기 때문에 최대한 완벽을 추구하고 실수하기를 싫어 했던 내가 활약하기에 좋은 환경이었다.
하지만 최종 코딩테스트는 그렇지 않다. 오직 5시간 동안 나의 능력을 최대한 보여줘야하는 자리이다.

아래 사진은 최종 코딩테스트 한시간 전에 우테코로부터 받은 메일의 내용이다.

안 돌아가는 프로그램보다 돌아가는 쓰레기를 만들어라.
그런 다음 클린 코드 , 리팩터링, 테스트를 챙기는 것이다. - 우테코

나와 스터디원들이 평소에 고민하던 논제 중 하나이다.

이쁘지만 작동은 안되는 것 vs 못생긴데 돌아가긴하는 것

위의 메일 내용을 통해 후자로 종결이 되었다고 생각한다.
왜일까 생각해보니 일단 프로그램을 만드는 이는 '사람'이다.
'사람'은 실수를 한다.
그 말은 즉 처음부터 완벽한 프로그래밍을 할 수가없다.
그렇기에 리팩토링과 테스트가 강조되는 것이라고 생각한다.

일단은 돌아가야 코드를 예쁘게 다듬고, 클래스와 함수(메소드)를 더 분리하고, 테스트를 통해 정상 작동을 보장하는 행위를 할 수 있는 것이었다.

아무튼 다시 돌아와서 우리가 프로그래밍을 할 때 정해진 시간안에 완수를 해야한다면?

이상적인 모습 : 프로그램 구현을 한번에 뚝딱 해낸뒤 남은시간을 리팩토링과 테스트로 보낸다. 😉

현실적인 모습 : "아 다했다. 어???" 그 후 버그 고치기 바빠 리팩터링 X 테스트 X 😥

역시 나는 후자의 모습이었다. ㅋㅋㅋ
최종 코딩 테스트를 계획 할 때, 작동이 모두 되진 않아도 최대한 클린코드와 리팩터링, 테스트를 신경쓰고자 하였다.
하지만 시험시작 한 시간 전에 그게 아니라고 답을 정해준 꼴이 되었다.
물론 여기서 약간 흔들렸다. 원랜 TDD를 통해 빠른 피드백을 받아 완성시키고자 하였는데,
어찌되던 테스트를 작성하는 시간이 있을거고 이 시간 때문에 행여나 작동이 안되는 프로그램으로 제출하게 될까 걱정하게 되었다.

그래서 나는 급히 전략을 바꿔 TDD로 시작하지 않고 일단 프로그램 부터 완성하기위해 총력을 기울였다.

여차저차 완성된 코드... 리팩터링과 테스트하기에 남은 시간은? 턱없이 부족했다.. 😕


최종 코딩테스트를 통해 내가 느낀 것들

긴장, 심란, 분노
내가 코테중에 가장 많이 느낀 3가지의 감정이다.
코테가 끝나고는 우테코에 대한 감사함을 느꼈다.

긴장

일단 처음 오프라인으로 보는 코딩테스트였기에 당연히 긴장되었다.
어릴 때 부터 생각해보면, 실전에 강해? 라고 물을 때 그건 또 아니었던것 같다.
다른 사람들이 보기에 아니라고 생각 할 수도 있었다. 발표같은 걸 하면 늘 잘해왔으니까, 하지만
그런건 다 노력과 많은 준비들이 바탕이 되어서 이뤄낼 수 있던 결과물이었다.
이번 최종 코딩테스트를 보기위해 마찬가지로 노력을 했다.
이전 기수 문제들도 풀어보고 시험장에서 어떻게 풀어나갈지 계획도 세웠다.
하지만 그거로는 부족했나보다. 나 역시 3주라는 빈 시간동안 조금 더 노력할수 있지 않았을까? 하는 반성을 하게되었다. 😣

심란

처음 최종 코딩테스트 미션을 받아보고,
'어 생각보다 할만한데?' 라고 느꼈다.
4시간동안 기능구현을 완료하겠다는 목표하에 풀어나갔고 실제로 4시간 만에 완성을 하였다.
'이제 테스트 코드 작성하고 후기 작성하면 되겠다.'라는 안일한 생각을 가지며 테스트를 돌리는데..
내가 직접 손으로 테스트 할 때는 잘 작동하는데, 이상하게 테스트 통과를 못하였다.
와.. 정신없이 어디가 틀린지 정신없이 찾는데 찾을 수 없었다.
시험장 내부가 약간 서늘한것도 있었지만 손이 너무 떨리면서 심란했다. 😩

분노

분명 쉬워 보이는데 제대로 해결하지 못한것에 대해 너무나도 나에대해 화가 치밀어 올랐다.
내가 쓴 코드를 탓한다거나 우테코에서 제시한 테스트코드를 탓하는 것이 아니다.
그저 왜 조금 더 요구사항에 신경쓰지 못하였는지 왜 조금 더 빨리해결하지 못했는지. 그게 너무 아쉬웠고 분노했다.😡

우테코에 대한 감사함

위엔 마치 엄청 부정적인 사람처럼 써두었지만 제일 크게 느끼는 감정은 감사함이다. 🤗
나는 전문대 전공자이긴 하나, 학교는 학생들의 웹쪽 취업에만 관심이 있어서 모바일 프로그래머가 된다고 하면 도와줄 수가 없다고 했다.

때문에 나는 혼자 알아봐야 했었고(물론 비전공자 분들 다 똑같은 상황이라 생각한다.) 엄청난 검색 끝에 내린 결론이

아 알고리즘 코테 준비하면서 프로젝트 몇개 만들어서 포트폴리오 꾸려야겠다.

라고 생각하였다. 그리고 그걸 목표에 두고 졸업과 동시에 지난 22년 10월까지 보내었다.
10개월이란 시간을 거의 보낸거 같은데 내가 무엇을 이루었냐? 라고 물어보면 선뜻 답하기가 힘들다. 다 좀 몰입한게 없던 것 같다.

아이폰 앱 제작을 위한 Swift 강의도 들어보고 크로스플랫폼을 지원하는 Flutter 강의도 들어보았지만, 흥미가 생겨 열정을 가지고 싶던건 없었다.

그렇게 어영부영 알고리즘 공부하고 시간 죽이고, 반복하다 우연히 알게된 우테코에 지원하게 되었다.

🔨 우테코의 목표
소프트웨어 생태계에 선한 영향력을이라는 비전으로 소프트웨어 장인 정신을 갖춘 인재 양성

📖 우테코의 교육철학

  • 많은 지식을 전달하기 보다 효과적으로 학습하는 습관을 만드는 데 집중한다.
  • 교육 기간만 학습하기보다 평생 학습할 수 있는 기반을 만드는 데 집중한다.
  • 혼자 학습하기보다 함께 학습하는 것의 즐거움을 느끼도록 만드는 데 집중한다.

기존에 우리가 보편화된 교육을 받는다라고 생각했을 때
1. 교육자가 학습자에게 방대한 지식을 전달한다.
2. 학습자는 그걸 수동적으로 습득한다.

이런 물고기를 몇마리 주는 교육이었다면,

우테코는 앞으로 먹고 살기위해 물고기를 잡는 법을 알려주고 살아남는 방법을 간접적으로 제시해주는 교육이었다.

나는 프리코스를 진행하면서 제일 많이 했던 혼잣말이

와 나 진짜 그동안 헛공부했구나...

이었다...

그저 알고리즘 문제를 어떻게 하면 빨리 풀지? 어떻게 하면 이 기능을 구현하지? 라는 고민만 했을 뿐 리팩토링과 테스트에 대한 생각이 전혀 없었다.

리팩토링과 테스트, 사람과 사람이 같이 일하는 프로그래머라는 직업의 특성상 가장 중요한 두가지가 아닐까 싶다.
우테코는 그래서 강조하였다고 생각한다.

정리하자면, 우테코는 나에게 길을 제시해주는 등대 같은 역할이었다. 깜깜해서 어디로 나가야할지 모르겠는 미래를 헤쳐나가는데 이 쪽이라고 제시해준 불빛 같은 고마운 존재였다.
내가 일주일 뒤에 합격 메일을 받을지 불합격 메일을 받을지는 모르지만, 단 두달 동안 프로그래머로서의 인생에 있어서 정말 중요한 것들을 배우고 좋은말을 많이 들었다고 생각한다.

나에게 이런 기회를 준 우테코측에게 감사하고 또 감사한 마음을 가지면서 이번 후기는 마무리 하겠습니다. 긴글 읽어주신 여러분들 감사합니다.! 🤗🤗

profile
깊이 있는 안드로이드 개발자가 되기 위해

1개의 댓글

comment-user-thumbnail
2023년 11월 2일

코테는 깃으로 제출하는 방식으로 진행하나요?

답글 달기