경력을 시작한지 얼마 안되는 주니어 개발자로서 이 책의 소개는 굉장히 매력적이었다.
“초보 프로그래머가 꼭 알아야 할 컴퓨터 사이언스 기초를 쉽고 빠르게 배운다”라는 소개는 비전공자로 개발을 하고 있는 나같은 사람에게는 필독 도서처럼 느껴졌고 한편으로는 ‘한권으로 그게 가능할까?’라는 의문이 들어 책을 읽어야겠다는 마음을 먹었다.
결론부터 말하자면 책의 타켓에 맞게 이제 막 개발을 배우기 시작한 사람에게는 추천하고 싶은 책이지만 이미 현업에 있는 개발자라면 굳이 읽어볼 필요는 없을 것 같다.
내용이 궁금하다면 목차를 보는 걸로도 충분하다.
이 책은
- 프로그래밍을 막 시작했는데 기초가 부족한 사람
- 개발을 하고 있지만 자신의 코드가 대체 어떻게 도는지 조금이라도 알고 싶은 사람
- 기초적인 내용을 리마인드하고 싶은 사람
- Python을 혼자 공부한 사람
들에게 추천한다.
책 내용은 컴퓨터공학 전공자라면 3학년때까지 배울 내용 중 기본적이고 중요한 것들로 대부분 구성되어 있다.
실수, 정수, 문자열부터 함수, OOP, 프로세스, 스레드, 자료구조, 알고리즘 등을 설명하고 있으며, 코드가 실제로 컴퓨터에서 어떤 방식으로 동작하는지에 대해 자세하게 설명하고 있다.
대부분의 내용이 필요한 내용이고 자세하게 설명하고 있어 기초가 필요한 사람에게는 큰 도움이 될 것 같다.
하지만 ‘꼭’ 알아야하는 내용만 포함되었다고는 생각되지 않는다. 특히 8장 CPU와 관련된 내용에서 반가산기나 전가산기, 플립플롭 등은 알면 도움이 되는 것은 맞지만 책의 타켓인 초보 프로그래머가 필수로 알아야하는 내용은 아니라고 생각하기 때문이다.
책의 세부 내용을 보자면
1장은 변수에 대한 내용으로 변수가 실제로 컴퓨터에서 어떻게 처리되고 32비트와 64비트 컴퓨터의 차이가 무엇인지 등에 대한 내용을 다룬다.
2장은 정수를 다루는데 16진법이나 2진법 등 컴퓨터에서 정수를 다루는 방법과 음수를 다루는 방법인 2의 보수에 대해 설명한다.
3장은 실수가 컴퓨터에서 다뤄지는 방법, 부동소수점과 실수 계산의 오차가 발생하는 이유를 알 수 있다.
4장은 문자와 문자열, 아스키 코드, 유니코드 등의 내용이 나온다.
5장은 함수에 대한 내용으로 값에 의한 전달, 참조에 의한 전달 등 매우 중요한 내용을 다루고 있다.
6장, 7장은 객체 지향 프로그래밍과 실제로 프로그래밍에 적용된 클래스에 대한 내용으로 캡슐화, 다형성 등의 내용이 등장한다.
8장은 CPU에 대한 기초적인 설명이 나오는데 논리 게이트, 순차 논리 회로 등의 내용으로 구성된다.
9장은 메모리인데 매우 중요한 내용을 다루고 있어서 만약 처음 보는 내용이라면 주의 깊게 읽어 보는 것이 좋다.
10장 프로세스와 스레드를 설명하는데 멀티 프로세싱, 멀티 스레딩 등을 다루고자 한다면 알아야하는 필수 지식들을 알려준다.
11장은 프로그래밍 언어라는 제목인데 컴파일 언어, 인터프리터 언어의 차이 등에 대해 설명하고 파이썬은 어떻게 실행되는지에 대한 설명을 해준다.
12장, 13장은 기본적인 자료구조인 연결 리스트, 스택, 큐, 트리 등에 대한 내용이다.
14장은 이진 탐색 트리라는 중요한 자료구조와 거기에 쓰이는 로직에 대해 설명한다.
15장은 거품 정렬과 퀵 정렬, 이진 탐색 알고리즘 등 알고리즘 수업 초반에 나오는 내용이 등장한다.
책 대부분이 Python 코드와 함께 설명하기 때문에 개발 언어 한번도 사용해본적이 없는 사람들은 Python 문법부터 어느 정도 익힌 후에 읽기를 추천한다.
개인적으로 책이 굉장히 마음에 들었는데 파이썬 가비지 콜렉션이나 레퍼런스 카운트 등 파이썬 내부에 대한 이야기를 하는 책을 많이 보지 못했었는데 이 책에서는 조금이지만 볼 수 있어서 좋았다.