주니어 개발자에게 추천하는 책 TOP 12
5년차로 접어드는 동안, 대학에서 CS를 전공하지 않았기에 '비는 지식'을 채우기 위해 노력했었는데요.
이 글에서는 읽었던 +100권 중 CS, Software engineering 책들 중 가장 좋았던 11권을 뽑아보았습니다.
(그렇기에 아무래도 '취업'이 목표인 분들에게는 조금 거리가 있는 책들일 수 있겠네요)
Operating Systems: Three Easy Pieces [1]
virtualization, concurrency, persistence라는 3가지 중심 개념 하에 전반적인 OS에 대해 설명해주고 있습니다. 이 책에서 가장 좋은 점은 '소화하기 쉽고', '잘 구조화 되어 있다'는 점입니다.
길지 않은 짧막한 구성의 챕터들이 큰 줄기에서 잘 정리되어서, 조금씩 읽어나가며 지루함을 느끼지 못했습니다. 또, 짧은 챕터 이후 여러 레퍼런스가 잘 적혀있어서 다루고자 하는 주제에 집중해서 살펴볼 수 있었습니다.
Computer Systems: A Programmer's Perspective [2]
프로그래머의 관점으로 Computer 시스템을 설명해주는 책입니다. 구성을 보면 여러 개념들 메모리, 레지스터, 캐시, 프로세스 등을 정의하고 설명하는 것보다는 실제 어셈블리 코드와 C코드를 통해 어떻게 상호작용하는지를 중심으로 기술되어 있습니다.
추천하는 CS 온라인 강의 의 embedded 시스템 또는 해킹쪽과 유사하게 실제로 실행 시 어떻게 메모리, 레지스터, 어셈블리 코드가 동작하고 변경되는지 그것을 이해하기 위한 요소들은 무엇이 있는지 설명해줍니다.
여러 OS 책이 추상적이고, 얼핏 모호할 수 있는 반면에 이 책은 코드 레벨까지 다루며 '구체적'인 느낌을 많이 받았습니다. 아직 다 읽진 못했는데, 어서 마무리해봐야겠네요.
Computer Networking: A Top-Down Approach [3]
눈치채셨을지 모르겠지만, 저는 '잘 구조화된' 책을 좋아하는데요. 잘 구조화된 책은 숲을 보는 관점에서 나무들의 위치를 대략적으로 기억하고 까먹는 것들도 어떤 항목에서 찾을 수 있는지 연결할 수 있는 관점을 제공해주는 것 같아서 그렇습니다.
이 책도 숲을 보는 거시적인 관점에서, 네트워크의 세부사항을 살펴보며 네트워크의 다양한 부분들을 다뤄줍니다. 예로, 흔히 면접에서 자주 나오는 '브라우저에서 구글을 치면 어떻게 동작하는지 자세히 설명해달라'와 같은 부분도 개괄 부분에서 다뤄주며 DHCP, UDP, ARP 등의 요소들을 설명해줍니다 (이 글에서 자세히 다뤘습니다).
High Performance Browser Networking [13]
모던 애플리케이션에서 사용되는 다양한 프로토콜을 상세하게 다뤄주고 있습니다. 브라우저라는 이름을 가지고 있으나, 실무적으로 네트워크를 이용하는 부분에 있어 도움이 될 수 있는 책입니다.
Algorithms, 4th Edition [4]
읽어본 알고리즘과 관련된 책 중에서 한 권을 꼽는다면, 이 책입니다. (why?)
API Security in Action [5]
API의 전반적인 보안과 관련해 기술적으로 진화해온 발자취에 맞추어서, 특정 구현은 무엇을 위해, 어떻게 구성되며, 어떤 취약점이 있으며, 어떻게 개선할 수 있는지 등을 코드 레벨에서 다뤄주고 있습니다.
추상적인 부분을 벗어나 실제 코드를 살펴보며 어떻게 구현되어 있는지 볼 수 있기에 매우 practical하면서 도움이 많이 되었습니다. 내용은 인증 도메인의 백엔드 개발자에게 최적화되어 있다고 생각되나, 동시에 웹 서비스 전반에 핵심적인 인증, 세션, JWT, OAuth 등에 대한 개념과 실제를 다뤄주기에 두루 유용하다고 생각됩니다.
Real-World Cryptography [6]
블록체인의 암호학 부분을 이해하기 위해서 읽었던 책들 중 원탑입니다. 역시 실무를 하며 필요하였기에, 추상적이지 않고 실제로 많이 사용되는 crypto 위주로 다뤄주어서 저는 유용하다 생각했습니다.
교과서 레벨의 수학적 증명과 같은 부분들은 빈약했으나, 많이 사용되는 부분을 골고루 다뤄주고 인증, 네트워크 등과 연결해 다뤄주어서 재미있게 보았던 것 같습니다.
Refactoring: Improving the Design of Existing Code [7]
단순히 리팩토링 뿐만 아니라, 전반적으로 코드를 작성할 때 어떤 부분을 고려해야 될지, 그 부분을 고려하는 것이 실제 돈을 버는 것과 왜 관련이 있는지, 그렇기에 기업의 최종 목표인 이익창출을 위해서는 어떻게 코드를 작성해야하는지를 연결시켜 설명해주어서 초반부터 명쾌하게 납득이 간 책입니다.
리팩토링, 즉 코드를 변경하는 것에 관한 것이기에 다양한 목적 (testability, maintainability 등)을 위해서는 어떻게 클래스, 함수, 변수명 등을 작성할지 상세히 다뤄줍니다.
그렇기에 단순히 변경이 아니라, 코드를 어떻게 쓸지에 대한 기본적인 철학 및 목적과 그 부분에서 파생되는 다양한 하위 목표, 그리고 그것을 달성하는 현실적인 작성법을 전달해줍니다.
Designing Data-Intensive Applications [8]
분산시스템은 실 서비스 개발과 깊게 연관되어 있습니다. 검색의 데이터를 다루기 위해 Elastic Search를 사용하고, 비동기 구조를 위해 Kafka를, 세션이나 대량의 데이터를 관리하기 위해 HBase나 Hadoop을 많이 사용합니다. 그렇기에 대용량의 데이터를 다루는 이 책은 '데이터 엔지니어' 뿐만 아니라 실서비스를 개발 운영하는 '백엔드 엔지니어'에도 필수적일 듯 합니다.
학문적 깊이가 있는 저자는 분산시스템 필드에 존재하는 다양한 개념들과 수 많은 논문들, 관련된 구현체들을 잘 엮어 설명해주고 있습니다. 책 내용은 물론, 참조에 있는 다양한 임팩트 있는 논문들도 너무 좋습니다.
System Design Interview – An insider's guide [9]
보는 순간 '이런 책이 필요했었는데'하는 생각이 들었던 책입니다. 인터뷰 상황에서 나올 법한, '10000명이 사용하는 구글 드라이브는 어떻게 구성하면 좋을까요?', 'PG 사를 이용하는 간단한 결제 및 정산 시스템 구축을 어떤 구조로 하면 좋을까요?' 등등 다양한 아키텍쳐를 질의응답 형태로 기술해주고 있습니다.
취직 또는 이직을 고려하는 분들 뿐만 아니라, 실제 현업에서 다양한 구조를 고민하고 유사한 요구사항에 대한 템플릿을 찾는 실무자에게도 생각 날 때마다 다시 찾아보게 되는 책입니다.
Frameworkless Front-End Development [10]
이 책을 읽고 'Frameworkless'라는 관점이 너무 좋아서 찾아보게 되었는데요. 관련된 자료를 모아놓은 github이 있네요! [12]
제목 그대로, Vue, React, Angular를 걷어내고 Pure JavaScript로 주요 개념들만 참고해 Front-end를 개발하면 어떻게 할 수 있는지를 보여주는 책입니다. 그렇기에 github을 통해 많은 코드 소스를 공유해주고 있는데요.
실제로 간단한 형태를 구현해보는 내용이기에, 다양한 FE Framework이 감싸고 있는 내부 구현의 디자인을 쉽게 이해할 수 있습니다.
The Tech Resume Inside Out [11]
Tech 이력서에 관한 책입니다. 실제 기술 리크루팅을 담당하는 저자가 작성했기에, 그들만이 아는 꿀팁들을 공유해주고 있는데요. 기술 이력서 관련한 실무 이해관계자는 누가 있는지부터 그러한 사람들의 목표 및 상황, 어떤 부분을 고려하는지, 그렇기에 어떻게 작성해야되고 잘 작성된 템플릿은 어떤 것인지를 알려줍니다.
또한, 기술 채용 시장에서 어떻게 자신을 홍보하고 더 좋은 제안과 브랜딩이 가능한지에 대해서도 간략하게 설명해주고 있습니다.
위와 같은 부분들은 실질적으로 저 개인의 커리어 관리에도 큰 도움이 되었는데요. 더 좋은 직장과 동료는 개발자의 성장에도 큰 바탕이 되기에 공유드려봅니다.
[1] https://www.amazon.com/Operating-Systems-Three-Easy-Pieces-ebook/dp/B00TPZ17O4
[2] https://www.amazon.com/Computer-Systems-Programmers-Randal-Bryant/dp/013034074X
[3] https://www.amazon.com/Computer-Networking-Top-Down-Approach-7th/dp/0133594149
[4] https://www.amazon.com/Introduction-Algorithms-3rd-MIT-Press/dp/0262033844
[5] https://www.manning.com/books/api-security-in-action
[6] https://www.manning.com/books/real-world-cryptography
[7] https://www.amazon.com/Refactoring-Improving-Design-Existing-Code/dp/0201485672
[8] https://www.amazon.com/Designing-Data-Intensive-Applications-Reliable-Maintainable/dp/1449373321
[9] https://www.amazon.com/System-Design-Interview-insiders-Second/dp/B08CMF2CQF
[10] https://www.amazon.com/Frameworkless-Front-End-Development-Dependencies-Controlling/dp/1484249666
[11] https://www.goodreads.com/book/show/55608536-the-tech-resume-inside-out
[12] https://github.com/frameworkless-movement/awesome-frameworkless
[13] https://www.goodreads.com/book/show/17985198-high-performance-browser-networking