📚 한 권으로 읽는 컴퓨터 구조와 프로그래밍
저자: 조너선 스타인하트
출판사: 책만 (2021.04.08)
부트캠프 수료 후 구직 활동 과정에서 CS 지식에 대해 부족함을 느끼고 이를 보완하기 위해 북 스터디를 시작했다. 비록 당시 곧바로 취업은 했지만, CS 지식은 반드시 짚고 넘어가야 할 산 중 하나였기 때문에 시간 내서 참여했다.
부트캠프 파이널 프로젝트와 알고리즘 스터디를 함께 했던 동기들에게 각각 물어봤더니 반가워했던 기억이 있다. 대부분 나와 같은 생각으로 CS 지식 대비에 대한 필요성을 느끼고 있었다. 그렇게 4월 말부터 5명으로 시작한 북 스터디가 9월 자율 요약 커밋을 약속하며 끝이 났고, 주관적인 책 리뷰를 남긴다.
북 스터디 책으로 『한 권으로 읽는 컴퓨터 구조와 프로그래밍』
을 선택한 이유로는 3가지가 있다.
- 2021 교보문고 인기 IT 도서 리스트에서 종합 TOP3 책 중 한 권이었다.
- 배민 우아한 스터디에서 이 책으로 현직자 스터디를 모집하는 것을 보았다.
- 책 리뷰 중에 전공 수업으로 배운 내용들을 복습하기에 좋았다는 댓글이 있었다.
일명 공룡책이나 조금 더 얇게 쓰인 CS 책들도 고려했지만, 언젠가는 읽을 책이지 않을까 생각해서 이 책으로 그룹 북 스터디를 시작했다.
👉 북 스터디 Repository
TheSecretLifeOfPrograms_GroupStudy
총 15개의 챕터로 이루어져 있다.
1장. 컴퓨터 내부의 언어 체계
2장. 전자 회로의 조합 논리
3장. 메모리와 디스크의 핵심: 순차 논리
4장. 컴퓨터 내부 구조
5장. 컴퓨터 아키텍처와 운영체제
6장. 입출력과 네트워킹
7장. 데이터 구조와 처리
8장. 프로그래밍 언어 처리
9장. 웹 브라우저
10장. 애플리케이션 프로그래밍과 시스템 프로그래밍
11장. 성능 향상을 위한 알고리즘 기법
12장. 병령성과 비동기성
13장. 컴퓨터 보안
14장. 세상을 바구는 기계 지능
15장. 훌륭한 프로그래머가 되기 위한 팁과 경험담
가장 어려워서 기억에 남는 것을 고르라면 초반 챕터와 입출력으로 나오는 전자 공학 파트이다. 컴퓨터 비트를 다루는 방법을 위해 플립플롭, 래치, 트렌지스터 등의 개념이 등장하면서 스터디원 전체가 멘붕에 빠졌다. 전자전기 공학을 전공한 지인에게 전화를 걸어 여러 가지를 질문했던 기억이 난다.
이 외에도 컴퓨터 내부 구조, 컴퓨터 아키텍처와 운영체제 챕터를 통해 평소 단어는 많이 들어보았지만, 정확히 알지 못했던 CS 기초 내용들을 보완할 수 있었다. 아직 1회 독의 얕은 관점에서 얘기하자면, 후반부 7장부터 나오는 데이터 구조와 처리, 8장 프로그래밍 언어 처리, 12장 병렬성과 비동기성은 각 내용 소재마다 깊은 수준까지는 다루지 않은 것 같았다.(그럼에도 나에게는 어려웠지만) 왜냐하면 부트캠프 학습 자료나 평소에 필요할 때마다 검색하면서 찾는 내용들이 더 구체적인 경우도 있었기 때문이다.
이 책은 컴퓨터 공학에 대한 전반을 담고 있다. 절대 얇지 않은 두께의 책이지만 컴퓨터 공학에 대해 거시적으로 다루는 느낌을 받았다. 역사를 잘 알고 있으려면 흐름을 봐야 한다는 말을 어릴 때 들은 적이 있는데, 이 책이 마치 그런 느낌을 주었다. 컴퓨터가 어떻게 구성되어 있는지부터 시작해 실제 개발하면서 보았던 내용들까지 다루면서 접근하고, 기술을 설명할 때에도 해당 기술의 과거부터 최근까지를 언급한다. CS 노베이스인 나에게 여러 가지 내용과 친숙하게 만들어 주기에 충분했다. 부트캠프에서 당장 코드를 쳐서 웹을 만들 수 있는 지식만을 급하게 배운 입장에서는 정말 필요한 소재들이었다.
매주 한 챕터씩 읽어가면서 우연히 회사에서 적시에 도움이 된 적이 있었다. 컴퓨터 내부 구조와 아키텍처, 운영체제
그리고 I/O
와 관련된 부분이었다.
당시 입사한 지 얼마 지나지 않아 새로 입사한 신입 직원들에게 필요한 사양의 컴퓨터를 찾아 골라야 했던 적이 있었다. 컴퓨터 스펙으로 Core, CPU, GPU, RAM, SDD 등 여러 정보가 나와 있지만 대부분 그 차이를 모르거나 체감하지 못했다. 마침 그때 스터디 진도가 맞춰져 있었고, 어쩌다 신입 직원들 사이에서 대략 어떤 역할을 하는 요소인지 간략하게 설명해주게 되었다.
두 번째는 입출력에서 래스터와 벡터 이미지에 관한 내용이다. 내가 과연 래스터와 벡터에 대해 당장에 알아야 할까 하는 생각을 했던 찰나, 다음 날 팀장님께서 프론트엔드 팀원들에게 둘 차이를 물어보는 순간이 있었고 오히려 내가 대답해 팀장님을 놀라게 하기도 했다.
책의 소재들이 나에겐 어려워 내가 공부하는 것이 맞나 하는 회의감이 들었지만, 이처럼 때때로 내가 올바른 공부를 하고 있다는 것을 일깨워 주었다.
또 다른 점은, 저자가 사례와 비유를 잘 사용해 이해를 돕는다는 것이다. 대표적으로는 하드웨어의 크기가 중요한 이유를 학교 등하교 시 거리와 속도로, 보안 챕터에서 보안 용어와 전략들을 학교 사물함과 숙제를 전달하는 상황으로 비유했고, 메모리 고속도로를 주소와 빌딩, 도심, 차선 등의(메모리 고속도로는 이렇게 설명한 글들이 흔한 것 같다.) 단어로 설명했다. 이외에도 책에서는 저자가 각종 비유를 통해 설명하기 때문에 이해에 도움이 되었다.
우선 해외 서적이다 보니 번역이 가장 아쉬웠다. 후반부로 갈수록 더 심한 느낌을 받았다. 심지어 원래 영문 문장이 어땠을지가 예상이 갈 정도로 한국어로는 어색한 문장들이 자주 보였다. 그렇지 않아도 쉽지 않은 내용들인데 이해하는 데에 있어 더 어렵게 느껴졌던 것 같다.
두 번째는, 가끔은 조금 더 깊게 다뤄줬으면 하는 아쉬움을 주는 부분도 있었다. 예를 들어, 가장 어려워했던 전기 공학과 관련된 챕터와 면접 또는 실무에서 필수로 알고 있어야 하는 네트워크 관련 파트 및 프로그래밍 언어와 실질적으로 더 직결되는 내용에서는 기대만큼 깊게 나와 있지 않았다. 이 부분에서 스터디를 진행할 때, 오히려 내가 회사에서 알게 된 내용을 공유해 다들 흥미롭게 들어주었던 기억이 있다.
마지막으로는 책 표지에 적힌 대로 "비전공자도 재미있게 읽는 컴퓨터공학 핵심 강의"라는 수식어가 어울린다고 생각하지는 않는다. 딱딱한 전공 서적보다는 잘 읽히고 가벼울 수 있지만 결코 쉬운 내용들이 아니었다. 최대한 쉽게 설명하려고 하는 책인 것은 느껴졌으나, 다루는 내용들이 비전공자들에게 쉽지 않은 것은 어쩔 수 없다고 본다. 비전공자도 재미있게 읽는다고 표현되어 있다고 해서 가벼운 마음으로 볼 생각은 접고 어느정도 각오하고 읽는 것이 좋은 것 같다.
Study Rules
- 담당 파트 요약 또는 관련 내용 리서치, 참고 링크를 활용해 챕터별 요약 자료를 markdown 형식으로 작성한다.
- 담당 파트가 정해지면 Issues 탭에 Contribution_Task를 추가한다.
- 온라인 스터디 일정 전까지 commit과 push를 완료한다.
- 매주 일요일 오전 10시부터 온라인 화상 스터디를 진행한다.
- 온라인 스터디 진행 시, 담당 파트 간단 설명과 함께 팀원들의 질문을 받고 내용과 관련하여 각자 실무에서 알게 된 지식들을 공유한다.
- 스터디 참여가 어려운 개인 일정이 생길 경우, 스터디원들과 공유해 스터디 일정을 조정하거나 참여를 건너뛴다.
- 요약 자료를 작성하면서 또는 스터디 진행 중 스터디원들에게 공유하면 좋은 링크는 Discussions 탭을 활용해 공유한다.(길게 활용하지 못했다.)
1시간에서 1시간 반 정도를 예상하고 스터디를 시작했지만 2회차 때까지 약 3시간 정도가 걸려 피로도가 심했다. 각자 담당한 부분에 대한 발표를 준비했고, 인당 발표 20분에 서로 모르는 내용을 질문하고 같이 검색하면서 보완하다 보니 계획보다 오래 걸렸다.
3주차부터는 챕터에 속한 모든 내용보다는 반드시 알고 가면 좋을 내용들 위주로만 골라서 각자 설명하기로 했다. 대신 모든 스터디원이 그 주의 챕터 전체를 모두 읽고 파악해야 하는 것이 전제 조건이었다. 컴퓨터 공학 전공자들이 아니었기에 1회 독으로 챕터 내용을 모두 파악하기에는 무리가 있어 고민이 많았지만, 이때부터 키워드 위주로 정리하면서 조금씩 이해의 폭을 넓혀갔다.
스터디 진행 측면에서 바라본 책에 대한 장점도 단점도 있었다. 대부분 취업했기 때문에 평일에는 출근하고 그 외 시간을 투자해서 북 스터디에 참여했다. 이처럼 개인 시간을 활용해 몇 개월 동안 15개의 챕터를 매주 꾸준히 공부한다는 것은 이점이었지만, 스터디라는 것은 너무 오래 진행할수록 그 효과는 영속적이지 않다는 말에 동의하게 되었다. 초반의 열정도 조금은 식은 느낌이었고, 가끔 개인 사정으로 과제를 지키지 않는 날들이 생기면서 느슨해진 감도 있었다. 언젠가 또다시 북 스터디를 하게 된다면 최대 3개월 안에 끝날 수 있는 분량의 책을 선정하는 것도 좋은 것 같다.
내가 애초에 스터디를 시작했던 목적 중 하나는, 이 책을 포기하지 않고 1회 독을 할 수 있도록 스스로 장치를 마련하는 것이었다. 그 점에 있어서는 1차 목표를 달성했기 때문에 만족한다. 하지만 이렇게 책을 덮고 끝낸다면 결국 내 것이 되지 못한다. 개발 2년 차가 되기 전에 반드시 2회 독 완료하는 것이 목표다.