[우아한 테크코스 3기] 프리코스 회고

Livenow·2020년 12월 14일
10
post-thumbnail

우아한 테크코스 3기 프리코스를 경험하다

하다. 지원을

작년 10월, 우아한 테크코스 2기를 모집한다는 소식을 들었습니다. 이때 전 3학년 2학기 과정에 있었고, 1년 단위 졸업작품의 초기단계 진행 중에 있었습니다.

두마리의 토끼를 다 잡을 수 없다고 생각해, 눈물을 머금고, 지원을 포기했었습니다...

https://user-images.githubusercontent.com/48986787/102002050-28fe0400-3d3c-11eb-947b-47ca1f8fa1ea.png

온라인 설명회

평소 우아한 Tech의 영상들을 보며 새로운 기술, 부족했던 지식들을 쌓았습니다.

또, 우아한 테크코스 2기 분들의 발표 영상을 보며 멋있다는 생각을 정말 많이 했습니다.

나도 누군가에게 발표를 할 실력을 가질 수 있을까... 나는 현재 어떤 개발자일까..

고민이 깊어지던 중!

우아한 테크코스 3기 설명회를 한다는 소식을 듣고, 버선발로 달려갔습니다.

https://user-images.githubusercontent.com/48986787/102002208-965e6480-3d3d-11eb-93ca-41014d97e98b.png

https://user-images.githubusercontent.com/48986787/102002222-a5ddad80-3d3d-11eb-8f0c-4539bcf9362e.png

이날 제일 기억에 남는 것은 포비님의 말씀입니다.

"도전하길 고민하지 말고, 일단 도전하고 현재 할 수 있는 것을 고민해라."

작년에 도전하길 고민했었던 시간들이 생각이 났고, 그 시간들이 부끄러워졌습니다.

모집 공고 확인

https://user-images.githubusercontent.com/48986787/102002358-1d600c80-3d3f-11eb-9984-14ec54ffcbe5.png

우아한테크코스 지원 전, 캡틴의 메시지입니다.

나를 찾아가는 과정이 생각만이 아닌 실제의 즐거움이 되길 바라며 자기소개서를 썼습니다.

자기소개서

우아한테크코스에서 원하는 인재상은 힘든 과정을 지속할 수 있는 동기, 성실성, 간절함이 있는 사람이라 생각합니다.

자기소개서 항목은

  • 프로그래밍 학습 과정과 현재 자신이 생각하는 역량은?
  • 프로그래머가 되려는 이유는 무엇인가요?
  • 마음이 끌리는 무엇인가에 긴시간 동안 몰입해 본 경험이 있나요?
  • 우아한테크코스에 참여하려는 이유는 무엇인가요?

입니다.

캡틴의 메시지에서 느낄 수 있었던, 나를 찾아가는 과정의 시작이 자기소개서라는 것을 알 수 있는 질문들이었습니다.

저는 솔직하고, 꾸밈없이 제 이야기를 썼습니다. 진짜 자신의 이야기를 할 수 있도록 질문을 해주는 것을 보고 우아한테크코스가 정말 나를 찾아가는 길을 도와줄 수 있을 것이라는 확신이 들었습니다.

지금까지의 나를 돌아볼 수 있었고, 나는 어떤 사람인지, 어떤 개발자인지 다시 한번 생각해보는 경험이었습니다.

코딩테스트

https://user-images.githubusercontent.com/48986787/102002677-14246f00-3d42-11eb-9ecb-9b84d8ef3305.png

자기소개서를 제출하면 위와 같이 안내메일이 메일로 오게됩니다.

7문제를 4시간동안 풀어야 했고, 저는 고등학교 강의가 겹쳐 1시간 정도 늦게 시작을 했습니다.

정말 정신없었습니다..

https://user-images.githubusercontent.com/48986787/102002734-e7248c00-3d42-11eb-8d8e-4df46dbe32b4.png

난이도는 1~2문제가 정말 어려웠고 나머지는 학교 과제정도의 난이도 였던 것 같습니다.

1문제 가량을 풀지못했고, 테스트 코드가 통과한다고 코너케이스까지 맞았다는 보장이 없기에 떨리는 마음으로 결과를 기다렸습니다...

그 결과는!!

https://user-images.githubusercontent.com/48986787/102002851-f9eb9080-3d43-11eb-8cda-fa953bd5a17f.png

지금봐도 가슴이 떨리는 메일입니다 ㅎㅎ

시작하다. 우아한 프리코스

메일이 오고 1주일 뒤 우아한 테크코스 프리코스가 시작됩니다.

프리코스는 총 3단계로 요구사항에 맞는 Java 프로그램을 작성하는 과제가 주어집니다.


1단계, 숫자 야구 게임

1주일 동안 어떤 과제가 나올지 기대로 지내던 중!

미션이 시작됐다는 말과 함께 미션을 확인할 수 있는 Repository를 메일로 받았습니다.

첫번째 미션은 숫자 야구 게임 입니다.

https://user-images.githubusercontent.com/48986787/102007859-ca527d80-3d6f-11eb-991f-a8b3e74820dd.png

기능요구사항은 위와 같았습니다. 하지만 요구사항이 하나만 있으면 조금 부족하겠죠?

입출력 요구사항

  • 3자리의 수 입력
  • 게임이 끝난 경우 재시작/종료를 구분하는 1과 2 중 하나의 수

프로그래밍 요구사항

  • 자바 코드 컨벤션 지키기
  • indent 2 넘지않기
  • 3항 연산자 쓰지않기
  • 함수(또는 메소드)가 한가지 일만 하게 작게 만들기
  • System.exit메소드 사용하지않기

정도였습니다.

저는 우선, 자바 코드 컨벤션과, 커밋 컨벤션을 지키는 것이 우선이라 생각해서 공부를 했습니다. (이는, 블로그에 정리했습니다.)

무작정 구현을 시작하려다, 진행 요구사항의 기능을 구현하기전 README.md에 구현할 기능 목록 정리 부분을 보고 잠깐 멈췄습니다.

아니, 기능 구현이 먼저가 아닌가?

기능 구현이 되야 그다음이 되는지 알고 있던 저는 진행 요구사항을 무시할까 생각 하다가 이러면 변화할 수 없다 생각해서 구현 기능 목록을 먼저 정리합니다.

앞의 선택이 이후 기능을 구현하는데 정말 도움이 됐었습니다.

https://user-images.githubusercontent.com/48986787/102008049-0fc37a80-3d71-11eb-8877-4b0470341fa5.png

  • 지금보니 되게 적네요...

그다음 역할을 담당할 객체를 생성했는데, 이때는 따로 정리하지 않고 머리속으로만 구조를 생했습니다. (그래서 인지 이후에 수정사항이 너무 많았어요..)

https://user-images.githubusercontent.com/48986787/102008140-ba3b9d80-3d71-11eb-972b-ccc9ab010d8d.png

  • 제가 봐도 이것만 보고 이 서비스의 역할과 책임을 유추할 수 없을 것 같아요..ㅎㅎ

https://user-images.githubusercontent.com/48986787/102008246-8d3bba80-3d72-11eb-9b3d-37bed151acd1.png

  • 이 메소드가 어떤 책임을 수행하는지 알 수 있겠나요??? 네이밍과 인스턴스 선언이 확실히 아쉽습니다...

3주차를 마친 지금이라면, BaseballGaem.start()에서 모든 것을 다하게 하는 것이 아닌, 다른 객체에 메시지를 보내 책임을 좀더 나눴을 거 같습니다.

1주차 느낀점: 기능 구현을 처음부터 끝까지 혼자 힘으로 해본 것이 언제였는지 기억나지 않습니다.

그래서인지 개발을 하는 중간중간에 막히고, 구글에 검색해보고 싶은 마음이 굴뚝 같았습니다.

하지만 검색을 통해 발전하고 싶지 않았습니다. 최대한 책에서 찾으려 했고, 개발이 끝난 후 막혔던 부분을 찾아봤습니다. 이 과정에서 저를 돌아보며, 제 개발 습관을 더 자세히 들여다볼 수 있었습니다.


2단계, 자동차 경주 게임

1주차를 무사히 제출하면, 2주차 안내 메일을 받을 수 있는데요,

2번 째 미션인 자동차 경주 게임입니다.

https://user-images.githubusercontent.com/48986787/102008486-46e75b00-3d74-11eb-8fa5-5332e7ace41b.png

TDD를 사용해보자!

2주차를 시작하면서 세웠던 목표는 TDD를 적용해보기 입니다.

TDD를 적용하기 앞서 1주차와 다르게 객체들의 역할과 책임을 나누고, 구현할 기능 목록을 정리햇습니다.

https://user-images.githubusercontent.com/48986787/102008526-a34a7a80-3d74-11eb-808f-7a3ac14ae0ff.png

구현할 기능만 정리하니 어떤 객체에게 어떤 책임을 줘야할지 애매했고, 이후 수정할 부분이 너무 많았기 때문입니다.

https://user-images.githubusercontent.com/48986787/102008684-a2feaf00-3d75-11eb-86cd-1707bb8e4572.png

  • 역할과 책임을 먼저 정리했지만, 실제 코드에서 제대로 나누지 못한 거 같습니다.

어렵다 TDD..

TDD를 적용해보자 호언장담했지만 Test 먼저 진행하는 것은 확실히 어려웠습니다..

그래서 전 먼저 어떤 것을 테스트할지 생각을 하고, 구현을 진행한 다음, 테스트코드를 작성했습니다. (이건 TDD가 아니지 않나..?)

TDD를 해보자로 시작해서 일단 테스트는 해보자로 목표가 바뀌었습니다 😅

https://user-images.githubusercontent.com/48986787/102008620-4e5b3400-3d75-11eb-84ab-20d40189f9fa.png

2주 차 느낀점: 피드백을 보며 1주차 때 신경을 쓰지 않았던 부분이 많다는 것을 알게됐습니다.

의미 없는 공백, 선언 순서 등 사소하게 생각했던 것들이 애플리케이션에선 큰 의미로 다가오는 것을 깨달았습니다.

또한, 메소드와 인스턴스의 네이밍을 신경 쓰니 보이지 않았던 선언의 의미, 필요성, 접근 지정자 등이 보였습니다.

validate나 check로 시작하는 메소드일 경우 주로 private을 주었고, 생성자 혹은 객체 내 다른 public 메서드에서 실행되게 했습니다. 이를 통해 한 가지 일만 할 수 있게 되었습니다.


3단계, 지하철 노선도 미션

2주간의 미션이 끝나고 드디어! 마지막 미션! 3주차 미션을 시작했습니다.

https://user-images.githubusercontent.com/48986787/102009966-579cce80-3d7e-11eb-9b9c-fd87d2c5d1b6.png

https://user-images.githubusercontent.com/48986787/102009975-64212700-3d7e-11eb-980a-c3f04763b800.png

이걸 어떻게 구현하지?

처음 미션을 봤을 때, 뭐지? 했습니다.

기능 요구사항이 있어 구현할 기능을 정리하는 것은 큰 어려움이 없었는데, 이걸 어떻게 구현하지? 라는 생각이 자꾸 들었습니다. 구현할 기능이 많아 생각만으로 해결할 수 없었기 때문입니다.

일단. 역할, 책임을 나누고 기능 목록을 정리하자

객체의 책임은 아는 것과 하는 것으로 나뉜다고 합니다. 그냥 책임이라는 것을 두는 것이 아닌, 좀 더 세분화해서 아는 것과 하는 것으로 나누어 보기로 했습니다.

https://user-images.githubusercontent.com/48986787/102010374-0510e180-3d81-11eb-9949-c6e40750d068.png

  • 이건 이미 완료된 것입니다.. 처음엔 빈약했어요...

역할과 책임을 나눴고, 구현할 기능을 정리했습니다.

피드백에서 초기 기능 목록, 모델링에서 너무 많은 시간을 쏟는 것이 아닌, 구현하면서 수정되는 부분들을 유동적으로 만들기를 배웠습니다. 살아있는 문서를 만들기를 위해 처음엔 적당히 정리했습니다.

많다~! 구현 할 기능

https://user-images.githubusercontent.com/48986787/102010525-f2e37300-3d81-11eb-9877-6269abe1d69c.png

  • 기능을 구현하며 새로 떠오르는 것들을 바로바로 README에 정리했습니다.

기초가 탄탄하면, 높은 성도 쉽게 쌓고, 쉽게 변경할 수 있다!

이 부분에저 저는 애자일 소프트웨어 개발 선언계획에 따르기보다 변화에 대응하기를 부분이 떠올랐습니다.

처음부터 어떻게 할지 고민하는 시간을 아껴 일단 시작을 해야 한다는 것, 시작은 역할 책임 나누기, 구현 기능 목록 정리(너무 자세히는 지양, 개발하며 추가) 순서로 진행해야 한다는 점을 배웠습니다.

앞의 과정이 훌륭하다면 변화에 쉽게 대응하는 좋은 서비스를 만들 수 있다는 것 또한 배웠습니다.


피드백

https://user-images.githubusercontent.com/48986787/102009692-8619aa00-3d7c-11eb-8044-46a25ed27b5c.png

미션이 끝나면 새로운 미션이 올라올 때 메일과 함께 공통 피드백이 옵니다.

공통 피드백은 지원자들이 자주 하는 질문과 대체로 코드상에 지키지 못한 것들을 알려주는 피드백입니다.

저 같은 경우는 제 코드만 보셨나.. 할 정도로 이전 미션에서 챙기지 못한 부분들이 피드백에 많이 나왔습니다.

단순히 내면 끝나는 미션이 아닌, 미션이 진행됨과 동시에 피드백을 통해 발전을 할 수 있다는 점이 좋았습니다. 또, 이렇게 하는 것이 맞나..? 라는 부분들의 모호함을 피드백을 통해 해결 할 수 있었습니다. 함께 성장한다는 느낌을 받을 수 있었습니다.


잠깐, 아직 오프라인 테스트가 남았다

3주가 어떻게 흘렀는지 모르겠습니다. 저를 끝까지 밀어붙여 보고, 더 개선할 부분이 없는지 끊임없이 고민하는 시간이 재밌었고, 뜻깊었습니다.


만약 프리코스를 하기 전, 최종 테스트를 진행했으면, 처참한 결과를 받았을 것이라 생각합니다.

하지만 3주간 우아한 테크코스와 함께 하며, 잘 모르는 부분에 관해 공부하고, 지식을 정리한 과정을 통해 몇 단계는 성장했다고 믿습니다. 남은 시간 동안 피드백과 진행했던 미션들을 다시 한번 살펴보며 준비해야겠습니다.


이번 년도엔 코로나가 심해 최종 테스트가 오프라인이 아닌 온라인으로 진행될 수 있다고 합니다.

건물 들어가 보고 싶었는데.. ㅠㅠ 이후에 좋은 결과로, 떨리는 마음이 아닌 기쁜 마음으로 우아한 형제들 건물에 들어갈 수 있길 바랍니다 😄


다들 코로나 조심하시길 바라며.. 생에 첫 회고를 마치겠습니다.
긴 글 읽어주셔서 감사합니다!

profile
경험의 연장선

9개의 댓글

comment-user-thumbnail
2020년 12월 15일

잘봤습니다! 좋은결과 응원합니다!

1개의 답글
comment-user-thumbnail
2020년 12월 15일

잘봤습니다! 흥미진진하네요!

1개의 답글
comment-user-thumbnail
2020년 12월 16일

우아하군요

1개의 답글
comment-user-thumbnail
2020년 12월 22일

좋은 결과 있기를 바라겠습니다.

1개의 답글