첫 주에는 정말 처음 경험해보는 미션 난이도와 익숙하지 않은 부스트캠프 시스템에 적응한다고 시간이 빠른듯 느린듯 그렇게 흘러갔었던 것 같은데.. 벌써 수료했다니! 끝나고도 아직 믿기지 않는다.👏🏻👏🏻👏🏻
부족한 CS지식을 채우고 코드리뷰를 통해 나의 코드를 깔끔하게 만들자는 목표로 처음 부스트캠프를 지원했던 것 같은데 어느정도는 달성한 것 같아 알차게 한 달을 보냈구나 스스로 칭찬해주고싶다. 그리고 잘 버텨온 다른 캠퍼분들도 수고했다고 전해주고 싶다.
먼저 매 주마다 느끼고, 성장했던 부분이 다른 것 같은데 까먹기 전에 전체 회고로 남겨두고자 글을 써본다.
기본적으로 주 언어? 라고 하긴 부끄럽지만 코테를 파이썬으로 준비했기 때문에 JavaScript가 굉장히 어색했다.
2년전 React 프레임워크를 사용한 프론트엔드 개발을 한 이후로 JavaScript를 사용한 적이없어서 1주차는 JavaScript 적응 + CS공부가 주를 이뤘다.
이 때는 어떤 성장을 했다기 보단, 정말 아무도 시키지 않았는데 스스로 몰입해서 12시간넘게 책상에 앉아서 공부하는 나를 발견했었고, CS공부를 항상 후순위로 미뤘는데 공부하고 미션을 수행하면서 CS 중요성을 알게 되었다.
2주차에는 어느정도 JavaScript에도 익숙해졌고, 잘하는 캠퍼들을 보면서 욕심이 생기기 시작한다..
뭔가 먼저 깊은 학습을 해야 미션 요구사항을 제대로 정의할 수 있을것 같다는 생각에 2주차에는 구현보다 학습을 먼저하고 구현을 했었다.
설계를 할 줄도 몰랐던 것 같고.. 디자인패턴이라는 것이 있는 줄도 몰랐었다..
그렇다보니, 학습에 많은 시간을 할애해 구현할 시간은 없고.. 시간에 쫓기다보니 코드는 내가 해석하기도 힘들었던 것 같다.
하지만 2주차 첫 미션에서 마스터님이 TypeScript를 사용해보라는 권유에 원래도 관심이 있었고, 잠깐 공부도 했었기 때문에 바로 적용을 했더니 자연스럽게 이 후에도 모든 미션을 TypeScript로 구현을 했었다.
역시 첫 시작이 제일 어려운 것 같다.
2주차까지 진행을 하면서 살짝 번아웃이 왔던 것 같다. 왜냐면 2주차 주말까지 한번도 마음편히 쉬어본적이 없었고, 학습정리 할 시간이 부족해 주말에도 정리를 했었기 때문이다. 그리고 2주차에 잘하려고 마음을 먹고 했는데, 마음처럼 되지 않았었던 기억때문에 조금은 괴로웠다.
피어세션이 없었더라면.. 괴로운 마음에 그냥 그냥 하루를 버티면서 챌린지를 수료했을지도 모른다.
하지만 이 때 정말 잘하는 캠퍼 한 분을 만나게 됐다. 코드를 짤 때 어떤 생각을 하는지, 클래스를 나눌 때는 어떤 기준으로 나누는지 이해가 안갔던 부분이 있으면 물어보고 적극적으로 배우려고 했었다.
그래서 3주차 두 번째 미션부터는 적용해볼만한 디자인 패턴을 찾고, 적용해봤다. 파일도 의도적으로 역할별로 나누려고 했었고, 그럼에도 중복코드가 있으면 제거하려고 했었다.
그리고 완벽한 요구사항 정의는 한 번에 이루어지지 않는다. 하나하나의 기능을 구현하기전에 확실하게 정의하고 구현하는게 더 효율적이다는 것을 깨달았다.
4주차부터는 시간에 쫓기며 구현을 하게되면 구조를 설계하고 모든 요구사항을 구현하기 힘들다는 생각이 들었다.
그리고 피어세션전에 모든 요구사항을 구현하자는 목표를 세웠다. 그래야 리팩토링을 할 시간을 벌 수 있으니까.
필요한 배경 지식을 간단히 학습하고, 구현을 먼저 했다.
또 중요한 것은, 구현과 클린코드 두 마리 토끼를 잡는 것은 현재 나의 역량으로는 어려운 일이라고 생각하고 구현을 할 때 구현에만 몰두했다.
정말 놀라웠던 것은, 구현에만 몰두했는데도 코드가 이전만큼 더럽지 않았다는 것이다.
물론, 다른 캠퍼가 보기에는 중복된 코드가 많고, 파일 하나에 모든 기능이 들어가있어서 더럽다고 생각했을 수도 있다.
여기서 내가 생각했을 때 코드가 더럽지 않다
는 기준은 다음과 같다.
왜 이렇게 했더라?
의문이 들지 않고, 해석할 필요가 없는 코드자연스럽게 함수를 분리할 때 많은 역할을 하지않게 하고, 고차함수와 early return하는 코드를 작성함으로써 위의 조건을 만족할 수 있었다.
따라서, 리팩토링하는데에 어려움이 없었고, 두 번째 미션에서는 모든 기능 구현 + 리팩토링 까지 전부 완료할 수 있었다.
모든 것은 처음부터 완벽할 수 없다.
완성하고자 하는 프로그램을 작은 단위로 나누고 단위마다 요구사항을 더 명확하게 정의하고(물론 처음에 전체적인 요구사항 파악은 해야한다.) 완성했을때 리팩토링을 진행하고.. 이러한 과정을 반복 하다보면 좋은 코드가 완성될 수 있을것 같다고 생각했다.
아직 멤버십 발표가 나지 않았지만, 3주동안 마냥 놀 수 는 없기 때문에, 지금 생활 패턴을 유지하면서 스터디도 하고, 노션에 정리했던 학습정리를 조금 더 구체화해서 블로그에 업로드하려고 한다.
8월 18일 오후 1시 35분 드디어 메일이 왔다! 오늘이 발표 예정일이여서 저녁에 오겠거니하고 마음 조리며 기다리고있었는데 결과가 예상보다 일찍 나왔다! 멤버십 시작까지 일주일 남았는데 마저 열심히 준비해야겠다.
+진행중인 M.C.S(Morning Call Study) 스터디 상황)
챌린지 이후에 스터디를 했는데, 다들 챌린지에서 혹독한 학습과정을 거쳐서 그런지 하나의 주제로 공부를 해도 다들 계획이라도 한 것 처럼 각각 의미있는 주제를 가져와서 정리 내용을 같이 공유하고, 토론도 했다.
이 후에 멤버십 들어가기전에 공부하고 싶은 주제 리스트 중에서 각자 공부하고 싶은 주제를 골라서 공부하고 발표하는 식으로 진행했었는데, 챌린지 처럼 학습과 구현을 겸비한 공부를 해오셔서 너무 좋았다.
비슷한 결(?)의 학습태도를 지닌 사람들의 스터디 너무 추천한다!!
유익한 글이었습니다.