우선 프로그래밍 자체를 처음 접해본 입문자는 아님을 밝힌다. 그렇다고 엄청 잘 하는 수준은 아니지만 기본 개념은 알고 있고 몇 개의 작은 프로젝트를 진행한 경험이 있다. 어느 정도 혼자서 웹이나 앱을 구축할 수 있는 사람들 중에서 코드스테이츠에 들어가볼까 생각 중인 사람들에게 도움이 될까 후기를 남겨본다.
코드스테이츠에 합격하게 되면 구글캘린더로 일정표를 공유받는다. 하루 일과는 주로 아침 9시에 저녁 6시까지 특정 시간마다 무슨 활동을 진행하면 되는지 적혀있다. 활동은 강의듣기, 페어프로그래밍하면서 과제 수행, 과제 혹은 페어에 대한 리뷰쓰기, Zoom을 이용해 전체 수강생들과 코치가 질의응답을 가지는 시간 등이 있다. 점심시간은 지정되어있는데 쉬는시간은 표시가 되어있지않다. 쉬는 시간은 자율적으로 가지면 된다. 출첵은 시프티라는 앱을 사용한다. 하지만 정규시간에 매 시간 감시를 하지 않기 때문에 꽉 조인 느낌은 없다. 나처럼 스케쥴에 따라 공부를 하는 게 편한 사람의 경우 이런 일정표대로 움직이는 방식이 잘 맞을 것 같다.
기본 개념이 있는 입장에선 강의 내용이 엄청 도움되지 않는다. 입문자를 위해 얕은 수준으로 가르치기 때문에 개념 복습을 스윽 해본다고 생각하면 된다. 팁을 주자면 배속으로 돌려 일찍 강의를 다 듣고 좀 더 심화된 내용을 구글링하면서 개념을 탄탄히 다지길 권한다. 다 안다고 생각해서 무심코 지나간 개념을 다시 정확히 알게 되는 계기로 삼을 때 좋다. 그리고 초급자 입장에선 좀 더 상세히 알려줄 필요가 있을 법한 개념을 알려주지 않거나 가볍게 언급할 때가 있다. 스스로, 능동적으로 학습하라는 명분에서다. 불친절한 면이 프로그래밍을 좀 해본 사람에게는 효과를 발휘할 수 있지만 입문자에겐 난감할 것 같다. 어떤 개념을 구글링하면 나올지 아는 사람과 아무 맥락도 없는 상태에서 구글링하는 사람의 차이랄까. 후반부에 함수를 작성하는 과정을 상세히 알려주는 강좌가 있다. 함수를 구현할 때 바로 코드를 작성하는 것이 아니라 어떤 사고과정을 거쳐서 함수를 이렇게 작성하게 되었음을 밝힌다. 이 부분은 크게 도움이 되었다. 함수 설계에 익숙해지면 나중에 프로젝트를 진행할 때 주먹구구식으로 작성하고 버그 고치고 지우는 일이 감소하게 될 것이다.
과제는 무척 마음에 들었다. 기본적으로 git을 이용하도록 강제적으로 유도를 한다. 과제를 fork 후 local에 pull하고 과제를 끝낼때 마다 push, pull request를 하면서 자동적으로 git 사용법을 익히게 된다. 테스트 빌더가 내장된 과제가 주를 이루기 때문에 유닛테스트를 자연스럽게 익힐 수 있다는 점도 좋았다. 거진 문제가 특정 기능을 하는 함수를 구현해야 한다. 문제 양이 꽤나 되기 때문에 푸는 데 급급해서 몰랐는데 지금 와서 보니 함수형프로그래밍 연습하는 거였다. 알게 모르게 원본을 손상시키지 않고 주어진 인자를 통해 결과를 도출해 반환하는 그 과정을 하고 있었다. 덕분에 여러 케이스를 나눠서 함수가 제대로 작동하는 지 확인하고 오류가 나면 함수를 수정, 개선(리팩토링)하는 과정을 연습할 수 있었다. 일단 함수를 구현하고 나중에 버그가 생기면 수정하는 것이 아닌 사전에 버그가 생길 법한 예시들을 테스트하면서 작성하는 방식, 테스트 주도 개발을 처음 들어봤거나 구체적으로 어떤 건지 잘 모르겠다면 코드스테이츠에서 확실히 얻을 수 있다.
코드스테이츠를 지원한 가장 큰 이유 중에 하나가 페어프로그래밍이었다. 이전까지 팀프로젝트를 할 때 프론트와 백엔드로 나누거나 같은 프론트면 페이지 별로 분담해서 서로 터치하지 않고 각자 기능을 구현하고 합치는 과정으로 진행했다. 협업은 협업인데 결국엔 혼자 하는 것과 별반 다를 게 없었다. 물론 합치는 과정에서 서로 다른 생각으로 짠 코드를 이어붙이느라 고생도 하고 의견충돌이 뒤늦게 발생하여 프로젝트 진행에 차질이 생기는 등 문제가 많았다. 그런데 여기서 알게 된 페어프로그래밍 방식은 색달랐다. 하나의 함수를 작성할 때 같이 머리를 굴리며 작성한다. 물론 네비게이터와 드라이버라는 역할을 나눠서 네비게이터의 논리과정(알고리즘)을 드라이버가 작성하지만 중간 중간 서로 더 나은 코드가 무엇인지, 상대방이 놓치고 있는 부분을 지적한다. 이거는 이상적인 페어프로그래밍이고 대체로 상대방이 불러준 코드를 그대로 따라치는 식으로 흘러간다. 페어는 과제별로 자주 바뀐다. 그중에 나와 실력이 비슷하거나 잘 하는 사람을 만나면 이상적인 페어프로그래밍을 체험할 수 있다. 또 다른 관점에서 문제를 푸는 방법을 알게 되거나 내 코드에서 불필요한 과정이 뭐가 있는지 등을 알 수 있다. 그렇다고 입문자와의 프로그래밍이 안 좋다는 건 아니다. 사람에 따라 다르지만 나 같은 경우 입문자분들 덕분에 당연하다고 여겼던 개념에 대해서 좀 더 깊게 알아보게 되는 계기를 얻었고 워낙 알고있는 지식을 전달하는 걸 좋아하는 성격이라 이것저것 알려주면서 '내 생각을 말로 설명하는 연습' 을 할 수 있었다. 페어로부터 제대로된 코드리뷰를 받고 싶은 사람에게는 실망스러울 수 있다. 그래도 혼자 했다면 쉽게 포기할 텐데 페어가 있으니 어떻게든 끝까지 풀어보려고 하게 된다. 뿐만아니라 나중에 면접관 앞에서 차근차근 코드에 대해 설명할 수 있는 능력을 기르고 싶다면 추천한다.
모든 일과가 온라인으로 진행하기 때문에 곁에서 강제적으로 쪼아주지 않는 이상 게으름 피우기 싶다고 생각되면 코드스테이츠를 권하지 않는다. 혼자서 공부를 하는 습관이 되어있고 코드를 짜면서 같이 의견을 주고 받길 좋아하며 고독감에 시달리다 든든한 동료들을 만나고 싶다면 코드스테이츠에 한 번 쯤 지원해보는 것도 좋다고 생각한다.
이머시브코스로 가기 위한 과제들을 제출하고 시험을 무사히 치른 상태다. 이머시브는 본격적으로 자료구조 같은 심화 내용을 접하고 여러 차례 소규모 팀 작업, 두 차례 큰 프로젝트를 완수해야 한다. 프리 때는 쉬엄쉬엄할 수 있었지만 이머시브는 긴장해야겠다.