본문 바로가기

후기/강의 후기

[1주 차 회고] 우테코 프리코스 5기 (feat. 우아한테크코스)

728x90

-  총 4주 과정 (22.10.26 ~ 22.11.22)

-  100% 온라인 진행

-  수강료 무료

우테코 프리코스를 신청한 이유


과거 내 질문에 대한 현업 개발자 지인의 대답이 아직도 귓가에 생생하다.

 

 

"좋은 프로그래밍 부트캠프를 소개해달라고? 혹시 우아한테크코스라고 알아?"

 

 

이미 신청 기간이 지나버린 아쉬움을 달래고자 스스로에게 "여긴 아무나 들어갈 수 없어. 지금 신청해도 안될 거야"라고 위로했다. 조금 더 알아보니 실제로 엄청난 경쟁률에 내가 덤빌 수 있는 수준이 아니라는 것이 확실했다. 당시엔 기본적인 프로그래밍 문법도 모르던 완전 초보였고, 단 하나의 알고리즘 문제도 풀어보지 않았던 시기였다.

 

그렇게 시간이 흘렀다. 혼자서 책으로, 동영상을 Java 문법을 익히고 자료구조에 대해 접하며, SQL도 공부를 했다. 하지만 알고리즘 문제를 푸는 건 도외시했다. 한 번도 시도해보지 못한 영역이라 괜히 겁이 났기 때문이다. 모르니깐 근거 없는 공포는 더 커졌다. 알고리즘 문제는 수학을 잘해야만 가능할 거야라는 등 치일피일 미루면서 피했다. 지금까지 공부한 익숙한 영역에만 있으려는 마음으로 가득했다. 이런 태도가 옳지 못하다는 것을 알면서도 껍질을 깨고 나올 뚜렷한 동기와 계기가 없었다.

 

하지만 현재에 안주하려는 스스로에게 불만의 목소리도 커졌다. 개발자로 성장한다면서 새로운 지식을 습득하는 것에 소극적인 건 옳지 못했다. 무엇이 나를 주춤하게 만드는 가를 진지하게 고민했다. 그리고 그 정체는 '타인과의 비교'였다. 내가 못하는 것을 아무렇지 않게 해내는 타인을 보면서 나 자신을 깎아내리는 모습이 있었던 것이다. 이것을 극복해야만 했다.

 

이번 기수부터 신청하는 모든 사람들에게 '우아한테크코스 프리코스'가 오픈됐다. 코딩 테스트에 자신이 없던 나에겐 아주 큰 기회로 다가왔다. 분명 4주간의 과정 속에서 좌절의 순간이 있을 것이다. POCU 아카데미의 '객체지향 프로그래밍' 강의를 들을 때 무력감을 느꼈던 것처럼 자신의 한계와 마주하는 순간이 오면 절망할 것이다. POCU 아카데미 수업 당시엔 기본적인 자료구조도 모르면서 설계를 시도했으니 너무 힘들었고, 그 결과 중도에 포기를 했다. 사실상 그 과정은 '실패의 경험'이 됐다. 물론 그때보다 지금은 지식의 폭이 넓어졌지만 여전히 부족한 부분이 산더미다.

 

그래서 이번 우테코 프리코스의 목표는 딱 하나이다. 바로 "완주하기"이다. 벽에 가로막히는 순간이 와도 쉽게 포기하지 않고 최선을 다할 것이다. 나보다 뛰어난 사람을 봐도 주눅 들지 않고 그들을 스승으로 여겨 내 치부를 부끄럽게 숨기지 않는 연습을 하고 싶다. 그렇게 4주가 지나면 개발자가 되기 위한 기본적인 자세가 갖춰지지 않을까 기대해본다.

 

 

모르는 것에 용감해지는 연습..!

 

 

우테코 프리코스 과정에서 나는 성장하고 싶다.

1주 차 학습일지 (22.10.26 ~ 11.02)


-  문제 1 (페이지 쪽수 점수 내기 게임)

-  문제 2 (암호문 중복 문자들 삭제)

-  문제 3 (369 게임)

-  문제 4 (청개구리 알파벳 변환)

-  문제 5 (화폐로 인출하기)

-  문제 6 (중복 닉네임 알려주기)

-  문제 7 (친구 추천 알고리즘)

 

 

GitHub - meena2003/java-onboarding: 온보딩 미션을 진행하는 저장소

온보딩 미션을 진행하는 저장소. Contribute to meena2003/java-onboarding development by creating an account on GitHub.

github.com

 

알고리즘 문제가 7개나 있었다. 두둥?! 생각보다 많은 양에 놀랬는데 1주 차는 '온보딩' 형식으로써 어렵지 않다는 공지를 보곤 안심을 했다(하지만 후반부에 그렇지 않다는 걸 깨닫고 만다..).

 

미션을 제출하는 방법부터 난관이었다. 깃허브 아이디만 만든 상태로 Git 이나 버전 관리 도구를 사용해보지 못한 나로선 add, pull 등 기본적인 용어와 Branch 란 개념까지 모든 것이 생소했다. 잘못 설정해서 나중에 문제가 발생하진 않을까 노심초사하며 하나씩 단계를 밟아 나갔다. 다행히 미션 제출방법 문서가 있어 따라 할 수 있었다. 하지만 인텔리제이와 연동(?) 할 때 가이드와 다른 형태가 나와 골머리를 앓았다.

 

문제들은 프로그래머스에서 풀어봤던 알고리즘 문제들과 비슷했다. 하나씩 푸는데 큰 무리는 없었다. 대신 슬랙을 보니 '클린코드' 작성법이라던가 컨벤션 유무에 대해 많은 질문이 올라왔지만 해당 지식이 없던 난 무작정 기능 구현에만 집중했다. 어떤 코드가 좋은 코드인지 기준 자체가 없었고, 또 그런 연습을 해본 적도 없다. 그런 건 훗날 실력이 더 늘었을 때 가능하다고 믿었기 때문에 일단 '제대로 동작'하게 코드를 짜는 것에만 열중했다. 이 부분이 참 아쉽다. 대체적으로 모든 미션의 기능이 적절히 동작했지만 아름답진 못했다.

 

문제 6과 7을 풀기 전, 슬랙에서 높은 난이도를 토로하는 원성을 봤다. 일단 기본적인 자료구조에 대한 지식이 필요해 보였다. 처음에는 List, Set, Map 중 어떤 자료구조를 사용할지 고민이 많았다. 대게 다른 사람들을 보면 미리 구현해야 할 기능들을 정리해 놓고 기능별로 하나씩 만들어가는 것 같은데 솔직히 기능을 정리하는 법조차 모르겠더라. 그냥 주석 처리를 하면 되는지, 아니면 따로 문서화해야 하는지 감조차 잡히지 않았다. 맨땅에 헤딩하는 느낌이 들었다. 동시에 기능별로 커밋 메시지를 작성해야 한다는 요구사항도 이해가 안 갔다. "기능이라 함은 메서드를 의미하는 것이고, 메서드를 만들 때마다 커밋 메시지를 써야 하는가?", "그럼 한번 커밋한 내용을 수정하고 싶으면 어떻게 하지?" 여러 가지 질문으로 머릿속이 복잡했다.

 

그래서 일단 기능을 구현하는 방향에 최우선 목표를 뒀다. 이것저것 다 신경 쓰면 정작 중요한 기능 구현까지 못할 것 같았기 때문이다. 이 과정을 배움이라 생각한다면 지금 느끼는 부족함을 기억해 놓았다가 다음 미션 때 보완하면 될 거라 믿었다. 처음부터 완벽해지려고 하면 제풀에 꺾여 금세 포기할 수 있다. 커뮤니티에 올라오는 실력자들의 모습에 주눅 들지 않고, 내 상황에서 최선을 다하자는 각오를 되새기고 되뇌었다.

 

하나씩 하나씩 구현하다 보니 새로운 아이디어가 떠올랐고 결국 미션 7까지 구현을 완료했다. 생각보다 시간이 많이 소요돼서 아쉬운 부분이 한가득이었지만 개선을 시키지 못했다. 특히 미션 2에서 '중복된 문자가 3개 이상'일 때 한 번에 처리하지 못했다. 처음에는 Stack 구조를 사용하면 가능할까 고민했지만 시간 관계상 부족한 상태에서 미션을 제출했다. 나중에 이 부분을 혼자서라도 고민해봐야겠다.

나는 무엇을 느꼈는가?


클린 코드, 가독성이 좋은 코드를 지향하자  >

앞에서 이야기했듯이, 지금까지는 기능이 동작하는 것에만 신경을 썼다. 그래서 1주 차 미션들 코드를 보면 내가 봐도 지저분하다. 이는 TDD와 리팩토링과 연관이 있다. 슬랙에서 많은 사람들이 해당 개념에 대해 논의하는 것을 봤는데 당시엔 그들만의 리그라고 생각했다. 그러나 TDD와 리팩토링 관련된 '우아한테크 세미나' 영상을 보곤 내 생각이 틀렸음을 깨달았다.

1주 차 미션을 진행하면서 for 문과 if 문을 남발할 때 본능적으로 "이건 아니지 않나?" 거부감이 들었다. 하지만 문제의식이 생겨도 마땅히 해결 방법도 떠오르지 않고, 무엇보다 정말 문제인지조차 뚜렷하지 않았다. 위 강의를 보곤 앞으로 내가 지향해야 하는 방향이 잡혔다. 당연히 지속적인 연습이 필요하겠지만 바로 2주 차 미션부터 리팩토링하는 노력을 기울여야겠다. 다시 말해 메서드로 분리하고 인덴트를 줄이는 의식적인 시도를 적용할 것이다.

 

 

< commit 메시지 작성 방법 익히기 >

Git을 처음 사용하다 보니 사용 방법에 대해 무지했다. 방법뿐만 아니라 작동 원리까지 모르니 기본 가이드에 나온 내용을 따라 하는 게 전부였다. 그래서 Git에 add 할 때마다 ' . ' 키워드를 사용해 모든 파일을 추가했다. 내가 원하는 파일 내용만 추가하는 방법을 몰라 벌어진 일이다. 누군가에겐 너무 기본적인 내용이겠지만 나에겐 낯선 행위였다. 이 사실을 부끄러워하면 발전이 없다. 모르는 것을 인정하고, 2주 차부턴 개선해 나갈 것이다.

 

 

< Git 과 GitHub 에 대한 추가 학습 필요 >

본격적으로 Git 을 다뤄본 것은 이번이 처음이다. 항상 나에겐 너무나 먼 당신이었는데 막상 사용해보니 그리 겁먹을 필요가 없다고 느꼈다. 더 중요한 건 사용할수록 흥미를 느꼈다. 그리고 '필요성'이 생겼다. 코드를 작성하다가 수정하고 싶을 때, 또 다른 사람과 싶게 공유하고 싶을 때, 변화의 내역을 정리하고 싶을 때 등 요구되는 상황이 생길 때마다 Git의 유용성에 눈을 떴다. 앞으로 추가적인 공부에 대한 필요성을 느꼈다.

1주 차를 마치면서 . . .


우려하던 일이 벌어졌다. 슬랙에 올라오는 수많은 질문과 답변 글에는 TDD, 리팩토링, commit, Git 등 내가 모르는 개념들이 우수수 등장했다. 그럴 때마다 의기소침 기운이 빠졌다. "이미 나보다 훌륭한 사람들이 많은데 내가 노력한다고 우테코에 들어갈 수 있을까?". 그래서 슬랙 메시지를 보는 게 편하지 않았다. 내 부족함을 확인하기 싫었던 것이다. 처음 우테코 프리코스에 지원했었을 당시 초심이 사라지고, 비교하는 습성이 다시 올라왔다.

 

그러나, 다시 생각해보면 공부라는 것이 그런 것 아닐까?

 

 

"내가 모르는 것을 발견하면 모름을 인정하고, 개념을 익히거나 반복 학습을 통해 익숙해지는 것"

 

 

다시 말해 우테코 과정 속에서 느끼는 '불편함'이야말로 학습의 본질인 것이다. 따라서 모르는 것을 확인하는 '불쾌함'이 아니라, 새로운 것을 발견하는 '설렘'으로 받아들이는 태도가 중요한 핵심이자 1주 차의 가르침이다. 비록 미션이란 결과물엔 아쉬움이 많지만, 그 과정에서 치열하게 고민한 내 깨달음은 소중한 자산으로 간직하도록 노력할 것이다.