May 15, 2022
나는 부트캠프를 통해 개발을 시작했고, 현재 백엔드 소프트웨어 엔지니어로 근무하고 있다.
개인적인 경험으로, 비전공자로서 초기에는 부족할 수 밖에 없는 CS전공지식의 필요성을 강하게 느낀 순간은 크게 3가지로 나누어 볼 수 있다.
첫 번째는 면접을 준비할 때였다.
부트캠프에서는 전반적인 개발 생태계와 해당 언어에 대한 사용에 대해 익숙해지는 시간을 거친다.
학습 과정 중에 자연스럽게 접하게 되는 CS지식이 있지만, 부트캠프 수료 후 면접을 준비할 때 CS 지식을 집중적으로 학습하게 된다.
포지션마다, 회사마다, 다르지만 개인적인 경험으로는 백엔드 엔지니어가 프런트엔드 엔지니어에 비해 면접을 위해 더 많고 깊은 CS 지식에 대해 학습해야 했다.
면접을 준비하면서도 너무나 방대해 보이는 지식을 어떻게 준비해야 할지 막막한 상황이 많았고, 실제로 면접을 본 곳 중에서 CS 지식에 대한 질문을 잘 답변하지 못해 불합격한 것으로 예상되는 회사도 있었다.
두 번째는 입사 직후였다.
첫 회사는 부트캠프 수료 직후, 면접 시 CS에 대한 질문도 거의 없이 입사했다.
하지만 회사의 경영 사정이 좋지 않았고, 근무하면서 CS 지식에 대한 갈망을 느낀 적이 없으며, 회사도 나도 성장하기 어려운 환경이라는 판단이 들어 퇴사했다.
퇴사 이후 면접을 준비해서, 감사히 잡오퍼를 받고, 현재의 회사에서 첫 근무를 시작했다.
전공자 & 시니어의 조합으로만 이루어진 우리 팀의 구성에서 나는 한동안은 회의의 용어조차 알아듣지 못하는 경우가 많았다.
모르는게 무엇인지 알아야 공부를 할 텐데 모르는 용어가 회사에서 다루는 도메인에서 비롯된 것인지, 사용하고 있는 언어에서 비롯된 것인지, 운영체제의 용어인지, 네트워크의 용어인지 등등이 구분조차 안 되는 순간들이 자주 찾아와서 좌절하곤 했다.
세 번째는 항상이다.
근무를 하다 보면 메모리를 cache에 저장하고, 프로세스에서 memory leak이 발생하고, latency가 발생하는 등등의 여러 상황이 생긴다.
그래서 새로운 용어를 들을 때마다 찾아보고, 운영체제와 리눅스에 대해 학습을 시작했고 계속 하고 있다.
여전히 부족하지만, 이전보다는 자신감이 붙었고, 전반적인 업무 이해도가 전보다 높아졌기에 엔지니어는 CS 지식을 절대 소홀히 할 수 없다고 생각한다.
내가 졸업한 학과는 학과 과정을 수료한 사람에 한해 국가 자격증 응시 자격이 주어졌는데, 그렇다고 그 자격증의 시험 범위가 4년 동안 배운 ‘모든 것’은 절대 아니었다.
컴퓨터 과학 역시 마찬가지일 것으로 생각한다.
학과 공부 내용 중에서도 면접에 주로 나오는, 즉 실무에 주로 사용되는 CS 지식에 대해서는 범위를 한결 좁힐 수 있을 것이다.
그리고 그 지식에 대해 학습하고, 계속해서 내용을 추가해나가는 것이 우선이다.
이 책의 목차를 보면 내가 면접을 위해 준비했던 것, 실무를 하면서 접하게 됐던 것에 대해 아주 충실하게 다루고 있음을 알 수 있어서 흥미로웠다.
디자인패턴, 네트워크, 운영체제, 데이터 베이스, 자료구조에 대한 내용과 함께 이력서 작성 등의 포트폴리오 구성 요령과 면접 시의 태도에 대해서까지 다룬다.
따라서 이 책이 필요하다고 생각되는 사람은 다음과 같다.
비전공자로 개발을 시작해서 면접을 준비하고 있다. 그런데 CS 지식을 어디서부터 학습해야 할지 막막하다.
전공자지만 면접 대비를 위해 면접에 나오는 CS 지식은 어떤 것인지 알고 싶다.
엔지니어로 근무하고 있지만 CS 기초를 튼튼히 해서 앞으로 더 나아가고 싶다. 그래서 실무에 꼭 필요한 CS 지식에 대해 인덱스가 필요하다.
그렇다고 해서 이 책 하나만으로 모든 회사의 모든 CS 면접을 100점으로 통과할 수 있다는 의미는 절대 아니다.
그런 단 한 권의 책은 세상에 없거나, 아주 두꺼워서 읽기 전에 이미 버거운 책일 것이다.
300쪽이 되지 않는 두껍지 않은 책에서 다루는 주제가 다양한 만큼, 이 책을 좋은 인덱스로 삼아서 학습하고, 추가로 학습이 필요하다고 느껴지는 부분이 있다면 다른 자료들을 찾아보기를 추천한다.
특정 개념을 설명하기 위해 특정 용어가 필요한데, 책을 읽다가 그 용어들을 몰라서 찾다 보면 전체 흐름을 놓치게 되는 순간들이 있다.
예를 들어 이 책의 52쪽에서는 아래와 같은 문장이 있다.
a와 b는 다른 모듈에서 사용할 수 있는 변수나 함수인 private 범위를 가집니다.
다른 모듈에서 접근할 수 없고 c나 d는 다른 모에서 사용할 수 있는 변수가 함수인 public 범위를 가집니다.
참고로 이 원리를 기반으로 만든 자바스크립트 모듈 방식으로는 CommonJS 모듈 방식이 있습니다.
자바스크립트에서는 private, public을 흔하게 쓰는 편은 아니라고 생각되기에 이렇게 범위를 가리키는 용어에 대해 헷갈릴 수 있다.
이럴 경우를 대비해 위의 문장에 연달아 아래의 이미지처럼 용어를 정리하는 상자가 있어서 한결 빠르게 이해하고 다음 단계로 나아갈 수 있어 좋다.
아래 이미지는 ‘5장. 자료구조’에 있는 것으로, 모든 장에는 그 장의 내용을 바탕으로 키워드가 될만한 용어들에 대해 알려주는 예상 질문 페이지가 있다.
모든 장의 가장 끝에 있어서 학습한 전체 내용을 복습하고, 부족한 부분을 알려주는 지표로 삼기에 좋았다.
아래 이미지는 ‘3장.운영체제’에 있는 것으로 프로세스와 스레드의 차이, 프로세스와 스레드는 어떻게 각각 어떤 데이터를 공유하고 어떤 데이터는 각각 사용되는지에 알려준다.
이렇게 자세한 이미지가 책의 곳곳에 자주 나와서 빠른 이해에 큰 도움이 되었다.
위의 이미지 한 장의 이미지를 통해
스레드는 프로세스를 구성하고, 프로세스는 코드, 데이터, 스택, 힙을 각각 생성하는 반면 스레드는 코드, 데이터, 힙은 공유하고 스택은 각각 생성한다는 사실을 직관적으로 알 수 있다.

본 포스팅은 출판사로부터 도서를 지원 받아 작성한 포스팅입니다.
구매 링크
온라인 서점(yes24) http://gilbut.co/c/22049814rE
도서 소개(youtube) https://youtu.be/LLZHeoCXUH0