본문 바로가기
우아한테크코스

[우아한테크코스 3기] 오프라인 코딩테스트 후기 및 반성

by binghe819 2020. 12. 22.

3주간의 프리코스가 끝나고 12월 19일 오프라인 코딩테스트가 진행되었다.

5시간동안 주어진 미션을 진행하는 것이었고, 주제는 지하철 노선도 경로 조회 미션이었다.

주요 기능이 최단 경로 (최단 거리, 최소 시간)를 찾는 것이었고, 최단 경로 라이브러리 (jgrapht)를 활용할 수 있었다.

이번 오프라인 코딩테스트를 보며 단시간에 반성하고 느낀 점이 많아서 이렇게 글로 쓰게 되었다.

 


나에 대해 무엇을 알 수 있었는가

5시간이 어떻게 지나간지 모를정도로 빠르게 흘러갔다. 그리고 모든게 끝이나고 나의 코드를 보면서 괴로웠다.

지금까지도..

프리코스는 일주일이라는 시간동안 하나의 미션을 수행하는 것이여서 생각할 시간이 많았다.

또한 코드를 작성하다가, 리팩토링과 오류를 수정할 시간이 충분했다.

하지만 오프라인 코딩테스트는 5시간안에 모든 것을 해결해야했기에 프리코스에서는 느끼지 못한 나의 단점을 찾을 수 있었다.

욕심

이번 우테코 프리코스 1주차부터 미션을 진행하고 다른 참여자들의 코드를 보면서 성장하고싶다는 욕심이 강하게 생겼다.

평소에도 주변에서 욕심이 많다는 얘기를 많이들었지만, 개발에 있어서는 더더욱 욕심이 생겼던 것 같다.

그래서 매주 다른 참여자들의 코드를 혼자 리뷰하였고, 미션이 끝나고 주어진 피드백을 여러번 곱씹었다.

그 결과 클린 코드와 객체지향 설계에 대한 지식을 넓힐 수 있었고, 평소에 잘 사용하지 않던 Enum과 Stream을 공부하여 활용할 수 있었다. 이렇게 해피엔딩이면 좋겠지만, 이번 오프라인 코딩테스트에서 나의 욕심이 큰 단점으로 다가왔다.

이번 코딩테스트가 진행되기전에 캡틴이신 포비님이 "모든 요구사항을 구현하는 것이 아닌, 하나를 구현하더라도 제대로 구현하라"라는 말을 남기셨다.

모든 요구사항을 구현하는 것이 아닌 하나를 구현하더라도 '제대로'구현하는 것이 목적이었지만, 막상 테스트가 시작되니 모든게 하얘지고 나는 모든 요구사항을 구현하기위해 욕심을 부렸다.

 

처음 객체 설계와 API를 최대한 활용하고자 커스텀하다 시간을 많이 허비하게됐다.

그 결과 요구하는 기능 구현은 다 했지만, 처리하지 못한 예외가 있었고, 프리코스에서는 하지 않았던 출력부분에서 큰 실수를 하게되었다. 심지어는 상수처리와 함수의 길이가 15라인이 넘는 실수도 하게되었다.

이런 부분들이 테스트가 끝나고 나를 너무나도 힘들게 하였다.

그리고 단기간에 무엇인가에 몰입하면 욕심을 부려 중요한 것을 놓치는 나를 발견할 수 있었다.

가장 먼저 고쳐야 될 단점이란 생각이 든다. 고치자.


나는 무엇을 배웠는가

살아있는 문서의 중요성

프리코스에서 피드백 중 하나가 바로 "죽은 문서가 아니라 살아있는 문서를 만들기 위해 노력하라"였다. 그리고 나는 당시에 이를 이해했다고 생각했지만 착각이었다.

구현하기 전 모든 기능을 작성하고, 구현을 하면서 기능을 추가하거나 수정하는 것을 "살아있는"문서라고 생각했다. 물론 이것도 "살아있는" 문서는 맞다고 생각한다.

하지만 이번 코딩테스트를 보며 느낀 점은 현재 어디까지 구현을 하였고, 어딘 구현을 못했는지 등을 다른 사람이 한눈에 알아 볼 수 있도록 지속적으로 최신화하는 것이 중요하다는 것을 깨닫게 되었다.

실제로 5시간동안 구현을 하며 긴장을 하니 기능 구현의 순서가 뒤죽박죽이었다.. 만약 체크리스트처럼 현재 어디까지 구현하였는지 지속적인 업데이트를 했으면 조금 더 완성도있는 결과를 만들었을리라 생각이 들었다.

이미 후회해봤자 지나간 일이다.. 앞으론 살아있는 문서 작성을 의식적으로 연습해야겠다.

단위 테스트의 중요성

단위 테스트는 모듈이나 프로그램 안에 있는 개별적인 코드 단위가 예상대로 작동하는지 테스트하는 방법이다.

즉, "내 코드가 제대로 동작하는 확인하는 방법"인것이다.

프리코스때는 시간이 많아 단위 테스트를 작성할 시간이 여유로웠다. 하지만 오프라인 코딩테스트때는 시간이 촉박하여 구현에 치중했다. 그 결과 내가 구현한 기능들이 정상적으로 작동하는지 확신할 수 없었고, 마지막에 리팩토링할 시간도 없이 기능들의 오류를 잡아내려 디버깅하는데 오히려 많은 시간을 허비하게 되었다..

기존엔 중요성을 느끼지 못하고 형식적으로 단위 테스트를 작성하였지만, 코딩테스트가 끝나고 단위 테스트의 진가를 알게되었다.

앞으론 단위 테스트를 형식적으로 작성하지 않고 의식적인 연습을 통해 꾸준히 연습해야겠다고 생각했다.


끝으로

오프라인 코등테스트가 끝나고 든 생각은 "아쉽다"였다.

꼭 지키리라 다짐했던 피드백들과 나만의 Convention을 지키지 못한 아쉬움, 그리고 잡지 못한 예외들과 여러 실수들이 아쉬웠다.

무엇보다 더 잘할 수 있었다는 아쉬움이 가장 컸다.

그래도 3주간의 프리코스와 마지막 오프라인 코딩테스트를 통해 많은 것을 배울 수 있었다.

객체지향 설계와 좋은 코드에 대한 이해가 많이 넓어졌고, 중요성을 인지하게 되었다. 그리고 나 자신과 내 코드에 대해서 되돌아 볼 수 있는 시간이었다. (고쳐야할 부분이 너무 많다..)

무엇보다 미션을 수행하며 재밌어하고 성장하는 나를 볼 수 있어서 행복했다.

아직 결과는 안나왔지만, 12월 30일 좋은 결과를 받아 합격 포스팅을 했으면 좋겠다. (제발!)

마지막으로 우테코를 지원할까 말까 고민하시는 분들이 있다고 "꼭!" 지원하라고 추천하고 싶다.

댓글