像程序员一样思考 是做什么的?
一份精心策划的(大部分)技术资源目录,每个软件开发者都应了解,无论技能水平或技术栈如何。基于社区清单 https://github.com/mtdvio/every-programmer-should-know ,由Alexey Migutsky及贡献者提供,采用 CC BY 4.0 许可。原始清单公开声明“高度主观,无科学依据”,且无特定顺序。
何时使用
- “我接下来该学什么 / 每个开发者都应该了解关于X的什么?”
- 请求关于基础主题的书籍、演讲、论文、课程或文章。
- 解释一个概念(浮点数、时区、Unicode、内存、CAP/分布式时钟、密码学),并希望指向权威读物。
- 职业问题:面试、薪资谈判、股权、远程工作、简历。
- “我在哪里可以练习编程 / 准备面试?”
如何使用
- 将问题匹配到下面目录的一个或多个部分。
- 推荐2-4个资源,不要推荐整个部分。对于每个资源,用一句话说明其适合的原因及其格式(书籍/视频/文章/论文/课程/网站)。
- 根据水平调整:初学者优先使用可视化或浅显的资源(《图解算法》、Hello Algo、Learn X in Y Minutes);有经验的开发者使用更深入或经典的材料(《算法导论》、DDIA、Lamport、Out of the Tar Pit)。
- 如果目录中没有该主题,请如实说明并从一般知识中回答;不要强行推荐不相关的链接。
- 一些链接已过时或可能失效。如果可以访问网络且链接重要,在使用前先验证;否则说明链接可能已过时。
- 用用户的语言回复;保持资源标题的原始形式。
- 在适当的时候提醒人们,没有人需要记住所有这些——这是一张地图,不是一个清单。
推荐学习路径(目录组合)
- CS新手: 计算机科学地图 → 计算机科学路线图 → 《图解算法》→ Big O 速查表 → 浮点数指南 → Unicode 与字符集。
- 后端/分布式系统: 延迟数字 → 理解分布式系统 → 《数据密集型应用系统设计》→ 分布式计算的谬误 → 《时间、时钟与分布式系统中事件排序》→ Jepsen。
- 写出更好的代码: 《可读代码的艺术》→ 《Clean 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 → Ten Rules for Negotiating a Job Offer。
- 安全基础: OWASP Top 10 → Portswigger Academy → 哈希、加密与编码 → 密码学正确答案 → Rolling Your Own Crypto (为何不应这样做)。
目录
介绍
- Map of Computer Science (视频) — https://www.youtube.com/watch?v=SzJ46YA_RaA
- 40 Key Computer Science Concepts Explained in Layman's Terms (文章) — http://carlcheo.com/compsci
- Computer Science Roadmap (文章) — https://roadmap.sh/computer-science
- Community-driven Roadmaps for Developers (网站) — https://github.com/kamranahmedse/developer-roadmap
谬误
- Awesome Falsehoods (清单) — https://github.com/kdeldycke/awesome-falsehood — 程序员关于字符串、地址、姓名、数字、电子邮件、时区、日期等的常见谬误。
算法
- Big O Cheatsheet (网站) — http://bigocheatsheet.com/
- Computer Science Distilled (书籍) — 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
- Introduction to Algorithms (书籍) — https://www.goodreads.com/book/show/108986.Introduction_to_Algorithms
- Algorithms Visualization (网站) — https://www.cs.usfca.edu/~galles/visualization/Algorithms.html
- Algorithms for Competitive Programming (网站) — https://cp-algorithms.com/
数据结构
- Hello Algo (书籍) — https://www.hello-algo.com/en/chapter_preface/about_the_book/
- UC Berkeley Data Structures Course (视频/课程) — https://sp19.datastructur.es/
- Foundations of Data Structures, edX (课程) — https://www.edx.org/course/foundations-data-structures-iitbombayx-cs213-1x-0
- Data Structures, Coursera (课程) — https://www.coursera.org/learn/data-structures
- Mathematics for Computer Science, Eric Lehman 等 (书籍, PDF) — https://people.csail.mit.edu/meyer/mcs.pdf
数字
- How to Count (书籍) — https://www.goodreads.com/book/show/12093869-how-to-count
- Floating Point Guide (文章) — http://floating-point-gui.de/
- What Every Computer Scientist Should Know About Floating-Point Arithmetic (文章) — https://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html
- Basic Number Theory Every Programmer Should Know (文章) — https://www.codechef.com/wiki/tutorial-number-theory/
字符串
- Unicode and Character Sets, Joel Spolsky (文章) — https://www.joelonsoftware.com/articles/Unicode.html
- Homoglyphs (工具) — https://github.com/codebox/homoglyph/
- Unicode Common Locale Data Repository (网站) — http://cldr.unicode.org/
- ASCII (视频) — https://www.youtube.com/watch?v=B1Sf1IhA0j4
- UTF-8 (视频) — https://www.youtube.com/watch?v=vLBtrd9Ar28
延迟
- Interactive Latency Infographics (网站) — https://people.eecs.berkeley.edu/~rcs/research/interactive_latency.html
- Latency Numbers Every Programmer Should Know (文章) — https://gist.github.com/jboner/2841832
时间
- Some Notes About Time (文章) — https://unix4lyfe.org/time/
- The Problem with Timezones (视频) — https://www.youtube.com/watch?v=-5wpm-gesOY
内存
- What Every Programmer Should Know About Memory, Ulrich Drepper (文章系列) — https://lwn.net/Articles/250967/ — 完整论文 PDF: https://akkadia.org/drepper/cpumemory.pdf
分布式系统
- Understanding Distributed Systems (书籍) — https://www.goodreads.com/book/show/56977420-understanding-distributed-systems
- Designing Data-Intensive Applications (书籍) — https://www.goodreads.com/book/show/23463279-designing-data-intensive-applications
- Designs, Lessons and Advice from Building Large Distributed Systems, Jeff Dean (论文/幻灯片) — https://www.cs.cornell.edu/projects/ladis2009/talks/dean-keynote-ladis2009.pdf
- Time, Clocks and the Ordering of Events in a Distributed System, Leslie Lamport (论文) — https://www.microsoft.com/en-us/research/publication/time-clocks-ordering-events-distributed-system/
- There Is No Now (文章) — https://queue.acm.org/detail.cfm?id=2745385
- Jepsen: how databases behave under partition (文章) — https://aphyr.com/tags/jepsen
- Fallacies of Distributed Computing Explained (论文) — https://pages.cs.wisc.edu/~zuyu/files/fallacies.pdf
机器学习
- Andrew Ng Machine Learning Specialization (课程) — https://www.coursera.org/specializations/machine-learning-introduction
正则表达式
- RegexHQ (网站) — https://github.com/regexhq
- Learn Regex the Easy Way (教程) — https://github.com/ziishaned/learn-regex
- Regex Crossword (游戏) — https://regexcrossword.com/
安全
- Secure Programming HOWTO, David Wheeler (书籍) — https://www.dwheeler.com/secure-programs/
- Rolling Your Own Crypto (文章) — http://loup-vaillant.fr/articles/rolling-your-own-crypto
- Cryptographic Right Answers (文章) — https://gist.github.com/tqbf/be58d2d39690c3b366ad
- An Open Letter to Developers Everywhere (About Cryptography) (文章) — https://gist.github.com/paragonie-scott/e9319254c8ecbad4f227
- Foundations of Security: What Every Programmer Needs to Know (书籍) — https://www.goodreads.com/book/show/128003.Foundations_of_Security
- OWASP Top 10 (参考) — https://owasp.org/www-project-top-ten — Web 应用程序漏洞的标准清单。
- PortSwigger Web Security Academy (实验) — https://portswigger.net — 动手实践的 Web 安全实验。
- Web Application Exploits and Defenses, Google Gruyere (实验) — https://google-gruyere.appspot.com/part1
- Hashing, Encryption and Encoding (文章) — https://www.integralist.co.uk/posts/hashing-and-encryption/
用户体验/可用性
- Don't Make Me Think (书籍) — https://www.goodreads.com/book/show/18197267-don-t-make-me-think-revisited
- Inventing on Principle, Bret Victor (视频) — https://vimeo.com/906418692
SEO
- What Every Programmer Should Know About SEO (文章) — https://katemats.com/blog/what-every-programmer-should-know-about-seo
架构
- A Field Guide to 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
- No Silver Bullet, Fred Brooks (论文) — http://www.cs.unc.edu/techreports/86-020.pdf
- Growing a Language, Guy Steele (视频) — https://www.youtube.com/watch?v=_ahvzDzKdB0
- CQRS and Event Sourcing (视频) — https://www.youtube.com/watch?v=JHGkaShoyNs
- Practical Object-Oriented Design in Ruby (书籍) — https://www.poodr.com/
- Evolutionary Software Architectures (视频) — https://www.youtube.com/watch?v=CglSFhwbI3s
- System Design Primer (指南) — https://github.com/donnemartin/system-design-primer
- How JavaScript Works, parts 1-4 (文章) — https://medium.com/sessionstack-blog/how-does-javascript-actually-work-part-1-b0bacc073cf
- Entity-Component-System Architecture with Unity by Example (视频) — https://www.youtube.com/watch?v=lNTaC-JWmdI
代码设计
- Programming Principles Wiki (网站) — http://www.principles-wiki.net/
工程哲学
- Category Theory in Life (视频) — https://www.youtube.com/watch?v=ho7oagHeqNc
- Simple Made Easy, Rich Hickey (视频) — https://www.infoq.com/presentations/Simple-Made-Easy
- Speed in Software Development (文章) — https://www.targetprocess.com/articles/speed-in-software-development/
- #NoEstimates (视频) — https://www.youtube.com/watch?v=QVBlnCTu9Ms
- The Myth of the Genius Programmer (视频) — https://www.youtube.com/watch?v=0SARbwvhupQ
- Making Badass Developers, Kathy Sierra (视频) — https://www.youtube.com/watch?v=FKTxC9pl-WM
- The Ten Rules of a Zen Programmer (文章) — https://www.zenprogrammer.org/en/10-rules-of-a-zen-programmer.html
- The Mythical 10x Programmer, antirez (文章) — http://antirez.com/news/112
- The Debugging Mindset (文章) — https://queue.acm.org/detail.cfm?id=3068754
- The Future of Programming, Bret Victor (视频) — http://worrydream.com/dbx/
- The Good Software Development Manifesto (文章) — 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
- Teach Yourself Programming in Ten Years, Peter Norvig (文章) — https://norvig.com/21-days.html
实践
- Working Effectively with Legacy Code (书籍) — https://www.goodreads.com/book/show/44919.Working_Effectively_with_Legacy_Code
- The Art of Readable 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
- Test Driven Development: By Example (书籍) — https://www.goodreads.com/book/show/387190.Test_Driven_Development
- Going To Production Checklist (清单) — https://github.com/mr-mig/going-to-production
- Release It! (书籍) — https://www.goodreads.com/book/show/1069827.Release_It_
- Professor Frisby's Mostly Adequate Guide to Functional Programming (书籍) — https://mostly-adequate.gitbook.io/mostly-adequate-guide/
- SICP: Structure and Interpretation of Computer Programs (书籍) — https://www.goodreads.com/book/show/43713.Structure_and_Interpretation_of_Computer_Programs
- Thirteen Ways of Looking at a Turtle (文章) — https://fsharpforfunandprofit.com/posts/13-ways-of-looking-at-a-turtle-3/
- Programming Paradigms for Dummies, Peter Van Roy (论文) — https://www.info.ucl.ac.be/~pvr/VanRoyChapter.pdf
- Learn X in Y Minutes (网站) — https://learnxinyminutes.com/ — 每种语言的精简基础。
- Hyperpolyglot (网站) — http://hyperpolyglot.org/ — 类似语言的功能并排对比。
- Pomodoro for Programmers (文章) — https://medium.com/@mr_mig_by/pomodoro-for-programmers-d6568dd1e6fc
- Site Reliability Engineering, Google (书籍, 免费在线) — https://sre.google/sre-book/table-of-contents/
职业
- Levels.fyi (网站) — https://www.levels.fyi — 各科技公司薪资数据。
- 10 Things Every Programmer Should Know for Their First Job (文章) — http://www.applematters.com/article/10-things-every-programmer-should-know-for-their-first-job/
- How Much Do Software Engineers Really Make in Each City? (文章) — https://www.codementor.io/blog/best-cities-software-engineer-earnings-271vpf599k
- Software Engineering 101 (幻灯片) — https://slides.com/mr-mig/se101
- The Passionate Programmer (书籍) — https://www.goodreads.com/book/show/6399113-the-passionate-programmer
- Soft Skills: The Software Developer's Life Manual (书籍) — https://www.goodreads.com/book/show/23232941-soft-skills
- The Complete Software Developer's Career Guide (书籍) — https://www.goodreads.com/book/show/35674293-the-complete-software-developer-s-career-guide
- Programming Beyond Practices (书籍) — https://www.goodreads.com/book/show/29895093-programming-beyond-practices
- Ten Rules for Negotiating a Job Offer (文章) — https://medium.com/free-code-camp/ten-rules-for-negotiating-a-job-offer-ee17cccbdab6
- How To Interview As a Developer Candidate (文章) — https://medium.freecodecamp.com/how-to-interview-as-a-developer-candidate-b666734f12dd
- How To Get a Tech Job Abroad Faster (文章) — https://relocate.me/blog/job-relocation/landing-a-tech-job-abroad-7-simple-tips/
- How To Be a STAR Engineer (论文) — http://vlsicad.ucsd.edu/Research/Advice/star_engineer.pdf
- TL;DR Stock Option ...
[因内容过长而截断]