목차7개 항목
출처와 참고
「DevOps·SRE」 줄은 ByteByteGo의 System Design 101 가이드 「Some DevOps Books I Find Enlightening」을, 알고리즘 교과서와 도메인 주도 설계는 「10 Books for Software Developers」를 바탕으로 보강했다. 「분산 시스템 고전 논문」은 「25 Papers That Completely Transformed the Computer World」를 바탕으로 주제별로 묶었다. 일부 고전·도구 책은 「나의 성장을 도와준 고마운 책들」을 참고해 더했다.
개발 서적을 분야별로 묶은 목록이다. 분야마다 첫 줄에 어디서 시작하면 좋은지 적고, 같은 줄 안에서는 입문서 → 심화서 순으로 둔다.
CS 기초
| 분야 | 입문 경로 | 책 |
|---|---|---|
| 네트워크 | 그림 위주의 입문서로 계층 구조를 잡고 HTTP → TCP/IP 순으로 깊어진다 | 모두의 네트워크 → TCP/IP 쉽게, 더 쉽게 → HTTP 완벽 가이드 → TCP/IP 완벽 가이드, Computer Networks: A Top-down Approach |
| 운영체제 | 쉬운 개론서 다음 OSTEP으로 가상화·동시성·영속성을 익힌다 | 쉽게 배우는 운영체제 → 운영체제 아주 쉬운 세 가지 이야기(OSTEP), Operating System Concepts(공룡책), Modern Operating Systems |
| 컴퓨터 시스템 | 전기 신호부터 쌓아 올리는 책으로 시작한다 | 찰스 페졸드의 CODE, 밑바닥부터 만드는 컴퓨팅 시스템, Computer Systems: A Programmer's Perspective, Computer Architecture |
| 데이터베이스 | 원리서 다음 분산 시스템 관점으로 넓힌다 | Database Management Systems, 데이터 중심 애플리케이션 설계, 면접을 위한 CS 전공지식 노트 |
| 자료구조 | C로 직접 구현하는 입문서가 기본이다 | 윤성우의 열혈 자료구조, 자료구조 입문, 이것이 자료구조+알고리즘이다 with C 언어, C로 쓴 자료구조론 |
| 프로그래밍 언어론 | 여러 언어를 비교하는 교양서 다음 SICP와 인터프리터 구현으로 간다 | 코딩을 지탱하는 기술, 세븐 랭귀지, 폴리글랏 프로그래밍, SICP(자바스크립트판 포함), Programming Language Pragmatics, 프로그래밍 언어론 원리와 실제, 밑바닥부터 만드는 인터프리터 in Go, Compilers: Principles, Techniques, and Tools, 서울대 프로그래밍 언어 공개 강의(4190.310) |
알고리즘
교양서로 흥미를 붙이고, 코딩 테스트 대비서로 유형을 익힌 뒤 문제 해결 전략서로 깊어진다.
| 갈래 | 책 |
|---|---|
| 교양 | 누워서 읽는 알고리즘, 미래를 바꾼 아홉 가지 알고리즘, 알고리즘 인생을 계산하다, 마스터 알고리즘, 알고리즘이 보이는 그림책 |
| 코딩 테스트 | 이것이 취업을 위한 코딩테스트다 with 파이썬, 파이썬 알고리즘 인터뷰, Do it! 알고리즘 코딩 테스트(자바), 한 권으로 끝내는 코딩테스트, 코딩 인터뷰 완전 분석 |
| 이론·문제 해결 | Introduction to Algorithms(CLRS, 교과서), 알고리즘 문제 해결 전략, 로젠의 이산수학, 프로그래밍 콘테스트 챌린징, TOP CODER 알고리즘 트레이닝, 문제로 풀어보는 알고리즘 |
| 언어별 | 자바스크립트 자료구조와 알고리즘, 자바로 배우는 핵심 자료구조와 알고리즘, 고전 컴퓨터 알고리즘 인 파이썬, C로 구현한 알고리즘 |
설계·코드 품질
| 분야 | 입문 경로 | 책 |
|---|---|---|
| 클린 코드·리팩터링·테스트 | 읽기 쉬운 코드 원칙에서 시작해 리팩터링과 TDD로 간다 | 읽기 좋은 코드가 좋은 코드다, 클린 코드, 리팩터링, 켄트 벡의 구현 패턴, 테스트 주도 개발, 클린 코드를 위한 테스트 주도 개발, 탐험적 테스팅, 레거시 코드 활용 전략, 코드 컴플리트 2, 프로그래밍 수련법(The Practice of Programming) |
| 객체지향·디자인 패턴 | 개념서로 역할·책임·협력을 이해한 뒤 패턴서를 읽는다 | 객체지향의 사실과 오해 → 오브젝트, 헤드 퍼스트 디자인 패턴 → GoF의 디자인 패턴, A Philosophy of Software Design, 객체에서 함수로, 도메인 주도 설계(에릭 에반스) |
| 아키텍처 | 의존성 원칙을 익힌 뒤 대규모 시스템 설계와 운영으로 넓힌다 | 클린 아키텍처, 클린 소프트웨어, 가상 면접 사례로 배우는 대규모 시스템 설계 기초, 파이썬으로 살펴보는 아키텍처 패턴, 마이크로서비스 아키텍처 구축, 마이크로서비스 구축과 운영, 플랫폼 엔지니어링, Release의 모든 것 |
| DevOps·SRE | 소설로 흐름의 문제를 체감한 뒤, 실천 안내서와 측정 연구로 간다 | The Phoenix Project(피닉스 프로젝트) → The DevOps Handbook, Effective DevOps, Continuous Delivery, Accelerate, Site Reliability Engineering(구글 SRE 책) |
분산 시스템 고전 논문
오늘날 대규모 시스템이 쓰는 개념 중 상당수가 아래 논문들에서 나왔다. 책으로 큰 그림을 잡은 뒤(데이터 중심 애플리케이션 설계), 관심 있는 주제의 원 논문을 읽는다.
| 주제 | 논문 | 무엇을 바꿨나 |
|---|---|---|
| 시간과 합의 | Time, Clocks, and the Ordering of Events (Lamport), Raft | 분산 환경에서 사건의 순서를 정하는 논리 시계, 이해하기 쉬운 합의 알고리즘 |
| 분산 저장소 | Google File System, Bigtable, Dynamo, Cassandra | 값싼 장비 위의 대용량 파일 시스템, 와이드 컬럼 저장소, 가용성 우선의 키-값 저장소와 일관된 해싱 |
| 분산 DB | Spanner, Amazon Aurora, FoundationDB, MyRocks | 전역 분산 트랜잭션(TrueTime), 로그만 복제하는 클라우드 DB, 결정론적 시뮬레이션 테스트, LSM 트리 저장 엔진 |
| 데이터 처리 | MapReduce, Kafka, Apache Flink | 대규모 병렬 배치 처리, 로그 기반 메시징, 배치와 스트림을 한 엔진으로 |
| 운영 인프라 | Borg, Shard Manager, Dapper, Monarch, Scaling Memcache at Facebook | 클러스터 관리(Kubernetes의 원형), 범용 샤드 관리, 분산 트레이싱, 인메모리 시계열 DB, 대규모 캐시 운영 |
| 권한·통신 | Zanzibar, Thrift | 전역 권한(ACL) 시스템, 언어 중립 RPC 코드 생성 |
| 그 밖의 전환점 | Go To Statement Considered Harmful, Bitcoin, Attention Is All You Need, WTF(Who to Follow), A Comprehensive Survey on Vector Databases | 구조적 프로그래밍, P2P 전자 화폐, 트랜스포머, 그래프 기반 추천, 벡터 DB |
프론트엔드·UX
언어 기본서로 자바스크립트를 단단히 하고, 사용성 고전으로 사용자 관점을 더한다.
| 갈래 | 책 |
|---|---|
| 자바스크립트·타입스크립트 | 프론트엔드 개발자를 위한 자바스크립트 프로그래밍, 자바스크립트 핵심 가이드, 함수형 자바스크립트, 우아한 타입스크립트 with 리액트 |
| UX·디자인 | 사용자를 생각하게 하지 마!, 대체 뭐가 문제야, 사용자를 읽는 법, 버려지는 디자인 통과되는 디자인, Creative Selection, 디자인 오브 디자인, 당당한 디자인 결정을 위한 9가지 방법, 데이터 시각화 교과서 |
언어·도구
쓰는 언어의 관용구를 다루는 책을 먼저 고른다. 프로그래머를 위한 파이썬, Two Scoops of Django, Node.js 디자인 패턴 바이블, Effective C#, Kubernetes in Action, 이펙티브 자바, Practical Vim, Pro Git, 리눅스 커맨드라인 완벽 입문서, 다양한 언어로 배우는 정규표현식, 유닉스의 탄생, 리눅스 그냥 재미로.
일하는 방식·커리어
함께 자라기와 실용주의 프로그래머가 입문으로 좋고, 역할이 바뀔 때 리더십 책으로 넘어간다.
| 갈래 | 책 |
|---|---|
| 개발 문화 | 함께 자라기, 익스트림 프로그래밍, 실용주의 프로그래머, Software Engineering at Google, 소프트웨어 장인 |
| 커리어 | 육각형 개발자, 커리어 스킬, 소프트웨어 엔지니어 가이드북, 요즘 개발자, 오늘부터 개발자, 필독! 개발자 온보딩 가이드, 프로그래머의 길 멘토에게 묻다 |
| 리더십·매니지먼트 | 실리콘 밸리의 팀장들, 개발 7년차 매니저 1일차, 안녕하세요 오늘부터 매니저입니다, 개발자를 넘어 기술 리더로 가는 길, 스태프 엔지니어, 테크니컬 리더(제럴드 와인버그), 컨설팅의 비밀 |
| 협업 | 오늘도 개발자가 안 된다고 말했다, 개발자의 글쓰기, 데이터 분석과 비판적 사고 |
| 고전·에세이 | 맨먼스 미신, 피플웨어, 프로그래밍 심리학, 프로그래머의 뇌, 해커와 화가, 조엘 온 소프트웨어, 클린 코더, 프로그래머 열정을 말하다, 죽을 때까지 코딩하며 사는 법, 컴퓨터 과학이 여는 세계, 오늘날 우리는 컴퓨터라 부른다, 프로젝트가 서쪽으로 간 까닭은, 더 골(The Goal), 괴델 에셔 바흐, 추측과 논박(칼 포퍼) |
관련 노트: 회사에서 빠르게 성장하는 법, 초보 웹 개발자의 공부 방향과 차별화, 개발 자료 잘 찾는 법, 개발자의 지속 가능한 학습 루프