프로그래머처럼 생각하기 (Think Like a Programmer)
숙련도나 기술 스택에 관계없이 모든 소프트웨어 개발자가 알아야 할 (주로) 기술 리소스의 엄선된 카탈로그입니다. Alexey Migutsky와 기여자들이 만든 https://github.com/mtdvio/every-programmer-should-know 커뮤니티 리스트를 기반으로 하며, CC BY 4.0 라이선스가 적용됩니다. 원본은 '매우 주관적이며 과학적으로 뒷받침되지 않음'을 명시하고 있으며, 특별한 순서는 없습니다.
사용 시기
- "다음에 무엇을 배워야 할까? / 모든 개발자가 X에 대해 알아야 할 것은?"
- 기초 주제에 대한 책, 강연, 논문, 강좌 또는 기사 요청
- 개념(부동소수점, 시간대, 유니코드, 메모리, CAP/분산 시계, 암호화) 설명 시 표준 자료를 가리키고 싶을 때
- 커리어 관련 질문: 면접, 제안 협상, 스톡옵션, 원격 근무, 이력서
- "코딩 연습 / 면접 준비는 어디서 할 수 있나요?"
사용 방법
- 질문을 아래 카탈로그의 하나 이상의 섹션에 매칭합니다.
- 전체 섹션이 아닌 2-4개의 리소스를 추천합니다. 각 리소스에 대해 왜 적합한지와 그 형식(책/동영상/기사/논문/강좌/사이트)을 한 줄로 설명합니다.
- 수준에 맞게 조정합니다. 초보자에게는 시각적이거나 쉬운 자료(Grokking Algorithms, Hello Algo, Learn X in Y Minutes)를 우선 제공하고, 경험 많은 개발자에게는 더 심화된 고전 자료(Introduction to Algorithms, DDIA, Lamport, Out of the Tar Pit)를 제공합니다.
- 주제가 카탈로그에 없으면 솔직히 말하고 일반 지식으로 답변하며, 관련 없는 링크를 강요하지 않습니다.
- 일부 링크는 오래되어 이동했거나 끊어졌을 수 있습니다. 웹 접근이 가능하고 링크가 중요할 경우 의존하기 전에 확인하고, 그렇지 않으면 링크가 오래되었을 수 있음을 언급합니다.
- 사용자의 언어로 답변하고, 리소스 제목은 원래 형태로 유지합니다.
- 필요할 때 아무도 이 모든 것을 외울 필요가 없다는 점을 상기시킵니다. 이것은 지도이지 체크리스트가 아닙니다.
추천 경로 (카탈로그 조합)
- CS 입문: 컴퓨터 과학 지도(Map of Computer Science) → 컴퓨터 과학 로드맵(Computer Science Roadmap) → Grokking Algorithms → Big O 치트시트 → 부동소수점 가이드(Floating Point Guide) → 유니코드와 문자 집합(Unicode and Character Sets).
- 백엔드 / 분산 시스템: 지연 시간 수(Latency Numbers) → 분산 시스템 이해(Understanding Distributed Systems) → 데이터 중심 애플리케이션 설계(Designing Data-Intensive Applications) → 분산 컴퓨팅의 오류(Fallacies of Distributed Computing) → 분산 시스템의 시간, 시계 및 이벤트 순서(Time, Clocks and the Ordering of Events) → Jepsen.
- 더 나은 코드 작성: 읽기 쉬운 코드의 기술(The Art of Readable Code) → Clean Code / Code Complete → 레거시 코드와 효과적으로 작업하기(Working Effectively with Legacy Code) → Out of the Tar Pit → Simple Made Easy.
- 면접 준비: 기술 면접 핸드북(Tech Interview Handbook) → 코딩 면접 해부(Cracking the Coding Interview) → LeetCode / Codility → 개발자 후보자로서 면접 보는 방법(How To Interview As a Developer Candidate) → 구직 제안 협상을 위한 10가지 규칙(Ten Rules for Negotiating a Job Offer).
- 보안 기초: OWASP Top 10 → Portswigger Academy → 해싱, 암호화 및 인코딩(Hashing, Encryption and Encoding) → 암호화의 올바른 답(Cryptographic Right Answers) → 직접 암호화 구현하기(Rolling Your Own Crypto)(하지 말아야 할 이유).
카탈로그
소개
- 컴퓨터 과학 지도 (동영상) — https://www.youtube.com/watch?v=SzJ46YA_RaA
- 40가지 핵심 컴퓨터 과학 개념을 평이한 언어로 설명 (기사) — http://carlcheo.com/compsci
- 컴퓨터 과학 로드맵 (기사) — https://roadmap.sh/computer-science
- 개발자를 위한 커뮤니티 주도 로드맵 (사이트) — https://github.com/kamranahmedse/developer-roadmap
오류
- Awesome Falsehoods (목록) — https://github.com/kdeldycke/awesome-falsehoods — 프로그래머들이 문자열, 주소, 이름, 숫자, 이메일, 시간대, 날짜 등에 대해 흔히 믿는 오류들
알고리즘
- Big O 치트시트 (사이트) — http://bigocheatsheet.com/
- 컴퓨터 과학 요약 (책) — https://www.goodreads.com/book/show/34189798-computer-science-distilled
- Grokking Algorithms (책) — https://www.goodreads.com/book/show/22847284-grokking-algorithms-an-illustrated-guide-for-programmers-and-other-curio
- 알고리즘 입문 (책) — https://www.goodreads.com/book/show/108986.Introduction_to_Algorithms
- 알고리즘 시각화 (사이트) — https://www.cs.usfca.edu/~galles/visualization/Algorithms.html
- 경쟁 프로그래밍을 위한 알고리즘 (사이트) — https://cp-algorithms.com/
자료 구조
- Hello Algo (책) — https://www.hello-algo.com/en/chapter_preface/about_the_book/
- UC Berkeley 자료 구조 강의 (동영상/강좌) — https://sp19.datastructur.es/
- 자료 구조 기초, edX (강좌) — https://www.edx.org/course/foundations-data-structures-iitbombayx-cs213-1x-0
- 자료 구조, Coursera (강좌) — https://www.coursera.org/learn/data-structures
- 컴퓨터 과학을 위한 수학, Eric Lehman 외 (책, PDF) — https://people.csail.mit.edu/meyer/mcs.pdf
숫자
- 세는 법 (책) — https://www.goodreads.com/book/show/12093869-how-to-count
- 부동소수점 가이드 (기사) — http://floating-point-gui.de/
- 모든 컴퓨터 과학자가 알아야 할 부동소수점 연산 (기사) — https://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html
- 모든 프로그래머가 알아야 할 기초 정수론 (기사) — https://www.codechef.com/wiki/tutorial-number-theory/
문자열
- 유니코드와 문자 집합, Joel Spolsky (기사) — https://www.joelonsoftware.com/articles/Unicode.html
- 동형 문자 (도구) — https://github.com/codebox/homoglyph/
- 유니코드 공통 로케일 데이터 저장소 (사이트) — http://cldr.unicode.org/
- ASCII (동영상) — https://www.youtube.com/watch?v=B1Sf1IhA0j4
- UTF-8 (동영상) — https://www.youtube.com/watch?v=vLBtrd9Ar28
지연 시간
- 대화형 지연 시간 인포그래픽 (사이트) — https://people.eecs.berkeley.edu/~rcs/research/interactive_latency.html
- 모든 프로그래머가 알아야 할 지연 시간 수치 (기사) — https://gist.github.com/jboner/2841832
시간
- 시간에 관한 몇 가지 참고 사항 (기사) — https://unix4lyfe.org/time/
- 시간대의 문제 (동영상) — https://www.youtube.com/watch?v=-5wpm-gesOY
메모리
- 모든 프로그래머가 알아야 할 메모리, Ulrich Drepper (기사 시리즈) — https://lwn.net/Articles/250967/ — 전체 논문 PDF: https://akkadia.org/drepper/cpumemory.pdf
분산 시스템
- 분산 시스템 이해 (책) — https://www.goodreads.com/book/show/56977420-understanding-distributed-systems
- 데이터 중심 애플리케이션 설계 (책) — https://www.goodreads.com/book/show/23463279-designing-data-intensive-applications
- 대규모 분산 시스템 구축의 설계, 교훈 및 조언, Jeff Dean (논문/슬라이드) — https://www.cs.cornell.edu/projects/ladis2009/talks/dean-keynote-ladis2009.pdf
- 분산 시스템의 시간, 시계 및 이벤트 순서, Leslie Lamport (논문) — https://www.microsoft.com/en-us/research/publication/time-clocks-ordering-events-distributed-system/
- 지금은 없다 (기사) — https://queue.acm.org/detail.cfm?id=2745385
- Jepsen: 파티션 상황에서 데이터베이스의 동작 방식 (기사) — https://aphyr.com/tags/jepsen
- 분산 컴퓨팅의 오류 설명 (논문) — https://pages.cs.wisc.edu/~zuyu/files/fallacies.pdf
머신 러닝
- Andrew Ng 머신 러닝 전문 과정 (강좌) — https://www.coursera.org/specializations/machine-learning-introduction
정규 표현식
- RegexHQ (사이트) — https://github.com/regexhq
- 쉬운 방법으로 정규 표현식 배우기 (튜토리얼) — https://github.com/ziishaned/learn-regex
- Regex Crossword (게임) — https://regexcrossword.com/
보안
- 안전한 프로그래밍 HOWTO, David Wheeler (책) — https://www.dwheeler.com/secure-programs/
- 직접 암호화 구현하기 (기사) — http://loup-vaillant.fr/articles/rolling-your-own-crypto
- 암호화의 올바른 답 (기사) — https://gist.github.com/tqbf/be58d2d39690c3b366ad
- 모든 개발자에게 보내는 공개 서한 (암호화에 관하여) (기사) — https://gist.github.com/paragonie-scott/e9319254c8ecbad4f227
- 보안 기초: 모든 프로그래머가 알아야 할 것 (책) — https://www.goodreads.com/book/show/128003.Foundations_of_Security
- OWASP Top 10 (참고 자료) — https://owasp.org/www-project-top-ten — 웹 애플리케이션 취약점의 표준 목록.
- PortSwigger 웹 보안 아카데미 (실습) — https://portswigger.net — 실습형 웹 보안 실습.
- 웹 애플리케이션 공격과 방어, Google Gruyere (실습) — https://google-gruyere.appspot.com/part1
- 해싱, 암호화 및 인코딩 (기사) — https://www.integralist.co.uk/posts/hashing-and-encryption/
UX / 사용성
- 생각하지 마 (책) — https://www.goodreads.com/book/show/18197267-don-t-make-me-think-revisited
- 원칙을 가지고 발명하기, Bret Victor (동영상) — https://vimeo.com/906418692
SEO
- 모든 프로그래머가 알아야 할 SEO (기사) — https://katemats.com/blog/what-every-programmer-should-know-about-seo
아키텍처
- Boxology 현장 가이드 (논문) — https://web.cs.wpi.edu/~cs562/s98/pdf/Boxology.pdf
- Out of the Tar Pit (논문) — https://github.com/papers-we-love/papers-we-love/blob/master/design/out-of-the-tar-pit.pdf
- 은총알은 없다, Fred Brooks (논문) — http://www.cs.unc.edu/techreports/86-020.pdf
- 언어 키우기, Guy Steele (동영상) — https://www.youtube.com/watch?v=_ahvzDzKdB0
- CQRS와 이벤트 소싱 (동영상) — https://www.youtube.com/watch?v=JHGkaShoyNs
- 루비로 배우는 실용 객체지향 설계 (책) — https://www.poodr.com/
- 진화적 소프트웨어 아키텍처 (동영상) — https://www.youtube.com/watch?v=CglSFhwbI3s
- 시스템 설계 입문서 (가이드) — https://github.com/donnemartin/system-design-primer
- JavaScript 작동 원리, 파트 1-4 (기사) — https://medium.com/sessionstack-blog/how-does-javascript-actually-work-part-1-b0bacc073cf
- 예제로 배우는 Unity의 엔티티-컴포넌트-시스템 아키텍처 (동영상) — https://www.youtube.com/watch?v=lNTaC-JWmdI
코드 설계
- 프로그래밍 원칙 위키 (사이트) — http://www.principles-wiki.net/
엔지니어링 철학
- 삶 속의 범주론 (동영상) — https://www.youtube.com/watch?v=ho7oagHeqNc
- Simple Made Easy, Rich Hickey (동영상) — https://www.infoq.com/presentations/Simple-Made-Easy
- 소프트웨어 개발의 속도 (기사) — https://www.targetprocess.com/articles/speed-in-software-development/
- #NoEstimates (동영상) — https://www.youtube.com/watch?v=QVBlnCTu9Ms
- 천재 프로그래머의 신화 (동영상) — https://www.youtube.com/watch?v=0SARbwvhupQ
- 멋진 개발자 만들기, Kathy Sierra (동영상) — https://www.youtube.com/watch?v=FKTxC9pl-WM
- 선 프로그래머의 10가지 규칙 (기사) — https://www.zenprogrammer.org/en/10-rules-of-a-zen-programmer.html
- 신화적인 10배 프로그래머, antirez (기사) — http://antirez.com/news/112
- 디버깅 마인드셋 (기사) — https://queue.acm.org/detail.cfm?id=3068754
- 프로그래밍의 미래, Bret Victor (동영상) — http://worrydream.com/dbx/
- 좋은 소프트웨어 개발 선언문 (기사) — https://www.infoworld.com/article/3214481/application-development/the-good-software-development-manifesto.html
- All the Little Things, Sandi Metz (동영상) — https://www.youtube.com/watch?v=8bZh5LMaSmE
- 10년 안에 프로그래밍 독학하기, Peter Norvig (기사) — https://norvig.com/21-days.html
실천법
- 레거시 코드와 효과적으로 작업하기 (책) — https://www.goodreads.com/book/show/44919.Working_Effectively_with_Legacy_Code
- 읽기 쉬운 코드의 기술 (책) — https://www.goodreads.com/book/show/8677004-the-art-of-readable-code
- Code Complete (책) — https://www.goodreads.com/book/show/4845.Code_Complete
- Clean Code (책) — https://www.goodreads.com/book/show/3735293-clean-code
- 테스트 주도 개발: 예제로 배우기 (책) — https://www.goodreads.com/book/show/387190.Test_Driven_Development
- 프로덕션 출시 체크리스트 (체크리스트) — https://github.com/mr-mig/going-to-production
- Release It! (책) — https://www.goodreads.com/book/show/1069827.Release_It_
- Professor Frisby의 Mostly Adequate 함수형 프로그래밍 가이드 (책) — https://mostly-adequate.gitbook.io/mostly-adequate-guide/
- SICP: 컴퓨터 프로그램의 구조와 해석 (책) — https://www.goodreads.com/book/show/43713.Structure_and_Interpretation_of_Computer_Programs
- 거북이를 바라보는 열세 가지 방법 (기사) — https://fsharpforfunandprofit.com/posts/13-ways-of-looking-at-a-turtle-3/
- 초보자를 위한 프로그래밍 패러다임, Peter Van Roy (논문) — https://www.info.ucl.ac.be/~pvr/VanRoyChapter.pdf
- X분 안에 배우기 (사이트) — https://learnxinyminutes.com/ — 언어의 압축된 기본 사항.
- Hyperpolyglot (사이트) — http://hyperpolyglot.org/ — 유사한 언어의 기능을 나란히 비교.
- 프로그래머를 위한 뽀모도로 (기사) — https://medium.com/@mr_mig_by/pomodoro-for-programmers-d6568dd1e6fc
- 사이트 신뢰성 엔지니어링, Google (무료 온라인 책) — https://sre.google/sre-book/table-of-contents/
커리어
- Levels.fyi (사이트) — https://www.levels.fyi — 기술 회사별 연봉 데이터.
- 첫 직장을 위한 모든 프로그래머가 알아야 할 10가지 (기사) — http://www.applematters.com/article/10-things-every-programmer-should-know-for-their-first-job/
- 소프트웨어 엔지니어는 도시별로 얼마나 버나요? (기사) — https://www.codementor.io/blog/best-cities-software-engineer-earnings-271vpf599k
- 소프트웨어 공학 101 (슬라이드) — https://slides.com/mr-mig/se101
- 열정적인 프로그래머 (책) — https://www.goodreads.com/book/show/6399113-the-passionate-programmer
- 소프트 스킬: 소프트웨어 개발자의 인생 매뉴얼 (책) — https://www.goodreads.com/book/show/23232941-soft-skills
- 완벽한 소프트웨어 개발자 커리어 가이드 (책) — https://www.goodreads.com/book/show/35674293-the-complete-software-developer-s-career-guide
- 실천을 넘어선 프로그래밍 (책) — https://www.goodreads.com/book/show/29895093-programming-beyond-practices
- 구직 제안 협상을 위한 10가지 규칙 (기사) — https://medium.com/free-code-camp/ten-rules-for-negotiating-a-job-offer-ee17cccbdab6
- 개발자 후보자로서 면접 보는 방법 (기사) — https://medium.freecodecamp.com/how-to-interview-as-a-developer-candidate-b666734f12dd
- 해외 기술 직업을 더 빨리 얻는 방법 (기사) — https://relocate.me/blog/job-relocation/landing-a-tech-job-abroad-7-simple-tips/
- STAR 엔지니어가 되는 방법 (논문) — http://vlsicad.ucsd.edu/Research/Advice/star_engineer.pdf
- TL;DR 스톡옵션 (기사) — https://gist.github.com/jesselpalmer/09e42827e38530d5f65b
면접
- 기술 면접 핸드북 (사이트) — https://github.com/yangshun/tech-interview-handbook
- 코딩 면접 해부 (책) — https://www.goodreads.com/book/show/25707015-cracking-the-coding-interview
- LeetCode (사이트) — https://leetcode.com/
- Codility (사이트) — https://www.codility.com/
- HackerRank (사이트) — https://www.hackerrank.com/
- InterviewBit (사이트) — https://www.interviewbit.com/
- Pramp (사이트) — https://www.pramp.com/
- Exponent (사이트) — https://www.tryexponent.com/
라이선스
이 프로젝트는 CC BY 4.0 라이선스에 따라 라이선스가 부여됩니다. 자세한 내용은 LICENSE 파일을 참조하세요.