긴 여정이었던 부스트 캠프 8기 준비가 드디어 끝이 났습니다.
그 동안 준비해왔던 과정들과 짧은 느낀점, 앞으로의 다짐 들에 대해 회고하고자 합니다.
지난 6개월간 웹 프론트엔드에 대해 흥미를 느끼고 기술 스택들에 대해 개인적인 공부를 하고 프로젝트를 거친 후 문득 이런 생각이 들었습니다.
"학습 방법에서 개선이 필요한 것 같다."
좋은 프로그래머가 되려면 한번쯤 "유지 보수가 쉬운 코드", "가독성이 좋은 코드"를 떠올리기 마련인데, 그 전에 하고 있는 공부 및 학습 방식이 올바른지에 대한 의문이 들었습니다.
공식 문서를 보고, 다른 분들의 기술문서를 읽고 개발을 진행하며 "구현" 이라는 문제를 해결 해도 내 코드가 깔끔해 보인다거나 "좋은 코드"를 짜고 있는 거 같진 않았습니다.
그래서 다음과 같은 다짐을 하게 되며 계획을 세우게 됩니다.
"자바스크립트를 활용한 프로그래밍과 웹 프론트엔드에 대한 이해가 더 필요할 것 같으니까 이 부분에 대해서 좀 더 신경을 써야겠다."
이에 따라 기본기 학습을 위한 부트 캠프를 찾아보게 되었고 동료 들과의 피어 세션, 짧은 기간 내 CS 지식을 학습 하는 챌린지, 전반적인 학습 방향에 대해 인상적이었던 부스트 캠프를 준비하며 제 성장을 도모하고자 하였습니다.
부스트 캠프는 "지속 가능한 개발자, 전반적인 부스트 캠프 커뮤니티에서 건강한 학습문화"를 지향하는 곳 이었고, 실제 4개의 문항도 이런 방향성에 근거한 자소서 문항 이었습니다.
저는 자소서를 쓸 때 아래와 같은 사항을 참고해서 작성 하였습니다.
좋은 자소서에 대한 레퍼런스를 찾아보기
자소서를 쓸 때 자신의 글 쓰기 능력을 믿고 적을 수도 있겠지만 기본적으로 작성되는 글이 좋은 글인지 아닌지는 주관적인 면이 많다고 생각해서 좋은 자소서에 대해 어느 정도 찾아보고 방향성을 잡아가는 것이 중요하다고 생각했습니다.
STAR 원칙에 근거해서 작성하기
전반적으로 자소서를 쓸 때 STAR 기법으로 작성하게 되면 하나의 스토리 로써 보는 사람이 좀 더 읽기 쉬운 자소서가 된다고 느꼈습니다.
자소서 피드백 받기
위 3가지 원칙을 고려해서 작성하더라도 그건 결국 제 기준으로 작성한 것이기 때 문에 자소서를 한번 피드백 받는 것이 중요하다고 생각이 들었고, 교내 컨설턴트 분에게 피드백을 받아 전반적으로 한번 갈아엎고 3번에 걸쳐서 글을 작성하였습니다.
준비 전의 저의 상황은 다음과 같았습니다.
- 알고리즘 - 실버 5 (정말 기초적인 구현 정도만 구현)
- 개발 동아리(DND) 에서 Front-End 개발 1번 그 외 개인 프로젝트 2회
- 기술 스택들(Typescript, Javascript, React, Next.js 등)에 대해 한번씩 어느 정도 학습해 놓은 상태
- 자료 구조에 대해 이론은 알지만 실제로 구현은 해보지 않은 상태
알고리즘이나 자료구조에 대해서는 학교에서 수업을 들었었기 때문에 이론을 들어보거나 아는 상태였고 프로그래밍 개발 경험이 어느 정도는 있는 컴퓨터 전공 학부생 이지만 그래도 부족한 지식 수준 이었습니다.
그래서 다음과 같은 준비를 하였습니다.
- 인프런 - JS 알고리즘 강의 듣고 문제 풀이
- 프로그래머스 - lv1, lv2 문제 풀이 스터디 (100 문제)
- 백준 - 삼성 SW 코테 구현 문제 풀이 (15 문제) + 전반적인 문제 풀이 (100 문제)
- github과 notion에 알고리즘 풀이 및 과정 기록
부스트 캠프에선 구현 위주로 나온다는 이야기가 많았기 때문에 코테 1달 전까진 dfs, bfs, 투 포인터, 재귀, 해시 등의 알고리즘 이론 및 문제 풀이를 하였고 그 이후론 삼성 기출 문제를 통해 전반적인 까다로운 조건 처리 및 긴 문제 설명에 대해 대응하려고 노력했습니다.
알고리즘 스터디 도중엔 시간 복잡도 및 좀 더 읽기 쉬운 코드를 통한 쉬운 디버깅을 하고자 하였고 이를 위해 더 나은 메서드 및 알고리즘에 대해 고민하였습니다.
CS는 다른 분들 후기를 봤을 때 보통 CS 50으로 준비하시는 분들이 많았고 부스트 캠프에서 제공했던 공유 문항들도 CS 50에서 대부분 출제되었기 때문에 CS 50을 2회독 하였습니다.
그리고, DND에서 네트워크 공부의 필요성을 어느정도 느껴 별도로 HTTP 공부를 추가로 진행하였습니다.
cs 10문제 및 알고리즘 2문제 (1시간 40분)
CS는 객관식 이었지만 모든 문제가 "모두 고르시오." 문제 였으며 운영체제, 네트워크, 컴퓨터 구조, C 언어, 자료 구조 등 다양한 영역에서 문제가 출제됬습니다.
알고리즘은 예외 처리 및 문제 설명이 긴 구현 문제들 였습니다.
솔직히 처음 CS 문제 볼 때 검색 허용이었기 때문에 어려울 거라는건 어느정도 인지했지만 문항 마다 보기 1~2개가 지엽적인 내용이라 검색 자체가 되지 않았습니다. 그래서 모든 문제에 대해서 1, 2개 정도 보기가 헷갈렸고 CS 문제를 50분 동안 풀게 되었습니다.
50분 남은 상태에서 알고리즘을 보게 되었고 1번은 보자 마자 시간 내에 못 풀거라는 생각에 다음 문제를 맞이 했고, 2번은 그래도 문제가 풀만한거 같았고 실제로도 모든 테스트 케이스를 맞추고 시험 종료를 하였습니다.
1솔이라고 생각을 했지만, 역시 문제 에서 확인하지 못한 예외 처리가 있었고 결국 0.5솔로 1차 코딩 테스트를 마치게 되었습니다.
1차 코딩 테스트를 마치고 예상했던 문제들이 나왔기 때문에 프로그래머스, 백준에서 비교적 긴 문항들, 복잡하고 예외처리가 까다로운 실 3 ~ 골 4 정도 되는 문제들을 풀면서 2차 코딩 테스트를 맞이 했습니다.
알고리즘 3문항, 서술형 3문항 (2시간 30분)
대부분 빡구현 문제였습니다. (feat: 지문이 엄청 길고 예외처리가 엄청 복잡한)
서술형은 1, 3번 문항에 대해 간략하게 적고 종료했습니다.
결과는 0.5솔 인거 같습니다.
그렇게 3번이 두고두고 아쉬울 거 같은 2차 코딩 테스트가 마무리 되었습니다.
2번의 코딩 테스트를 마치고 부스트 캠프가 저에게 주었던 교훈이 있었습니다.
1차 때도 2차 때도 발목을 잡는건 CS 문제 였던거 같았습니다. 아주 얕은 CS 지식은 거의 0에 가깝다는 것을 알게 되었고 만약 다음 부스트 캠프에도 지원을 한다면 저는 운영체제,자료 구조, 네트워크, 컴퓨터 구조에 대해서 더 공부하고 시험에 대비할 것 같습니다.
대부분의 코딩 테스트 문항들이 제 기준 이해만 15분 넘게 필요할 정도로 긴 문항이었습니다. 1차 2번과 2차 3번 문항들도 주석을 남기고, 종이로 풀이과정을 정리하는 등의 노력을 했지만 문제 풀이 도중 기억이 안나서 다시 문제를 읽고, 또 다시 읽었던 탓에 시간을 많이 지체 하게 되었던 거 같습니다.
기본적인 문제 이해 및 정리 능력이 부족하다는 것을 부스트 캠프 코딩 테스트에서 확인할 수 있었고, 해당 유형의 문제들에 대한 반복 학습을 통해 긴 문항과 까다로운 조건 처리를 처리하는 방법 들을 더 익혀야겠다는 생각을 하게 되었습니다.
1차 1번, 2차 1번과 같이 특정 알고리즘을 활용해서 문제 풀이가 가능한 문제들에 대해 전혀 대응하지 못했던거 같습니다. 구현 문제라고 구현 및 시뮬레이션 문제만 나오는 것이 아닌 다른 문제들이 나오는 것을 인지하고 다른 알고리즘도 부지런하게 학습해야 겠다는 것을 느끼게 되었습니다.
이런 느낀점 들을 통한 앞으로의 계획은 다음과 같습니다.
- 면접 문항에 나와있는 CS(운영체제, 네트워크, 자료 구조, 알고리즘, 데이터 베이스) 문항 들에 대해 깊이 있게 탐구 하고 학습한 내용 정리하기
- 아직 알지 못하는 알고리즘 학습하기 (비트 마스킹, 하노이의 탑, 우선순위 큐 등)
- 알고리즘 문제를 풀 때 문제 해결을 위한 필요한 요소 및 풀이 과정을 먼저 정리 한 후 문제를 푸는 습관 기르기
- 문제를 풀 때 단일 책임에 맞게 함수로 분리하는 습관 기르기
이번 시험을 통해 어떤 점이 부족했는지 알 수 있었으며 그에 따른 해결 방법에 대해 자기 주도적으로 생각할 수 있게 된 계기가 되었던거 같습니다.
챌린지에 갈 수 있을지 없을지는 아직 결정 나지 않았고 못 가게 되면 정말 아쉬울 거 같지만 이에 굴하지 않고 "기본기가 탄탄한 개발자"가 되기 위해 앞으로도 꾸준히 노력해야 겠습니다.
글 읽어주셔서 감사합니다 :)
고생많으셨어요 진영님!
그동안 진영님을 봤을 때, 정말 열심히 하셨으니까 다른 일에서 더욱 잘 될거에요!