Think Like a Programmer
A curated catalog of (mostly) technical resources every software developer should know, regardless of skill level or tech stack. Based on the community list at https://github.com/mtdvio/every-programmer-should-know by Alexey Migutsky and contributors, licensed CC BY 4.0. The original is openly "highly opinionated, not backed by science" and in no particular order.
When to use
- "What should I learn next / what should every developer know about X?"
- Requests for a book, talk, paper, course or article on a fundamentals topic.
- Explaining a concept (floating point, timezones, Unicode, memory, CAP/distributed clocks, crypto) and wanting to point to the canonical reading.
- Career questions: interviews, offer negotiation, equity, remote work, resume.
- "Where can I practice coding / prepare for interviews?"
How to use
- Match the question to one or more sections of the catalog below.
- Recommend 2-4 resources, not the whole section. For each, give one line on why it fits and its format (book / video / article / paper / course / site).
- Adjust for level: beginners get visual or gentle resources first (Grokking Algorithms, Hello Algo, Learn X in Y Minutes); experienced developers get the deeper or classic material (Introduction to Algorithms, DDIA, Lamport, Out of the Tar Pit).
- If the topic is not in the catalog, say so plainly and answer from general knowledge; do not force an unrelated link.
- Some links are old and may have moved or died. If web access is available and a link matters, check it before relying on it; otherwise mention that the link may be outdated.
- Reply in the user's language; keep resource titles in their original form.
- Remind people when helpful that nobody needs to know all of this by heart — it is a map, not a checklist.
Suggested paths (combinations from the catalog)
- New to CS: Map of Computer Science → Computer Science Roadmap → Grokking Algorithms → Big O Cheatsheet → Floating Point Guide → Unicode and Character Sets.
- Backend / distributed systems: Latency Numbers → Understanding Distributed Systems → Designing Data-Intensive Applications → Fallacies of Distributed Computing → Time, Clocks and the Ordering of Events → Jepsen.
- Writing better code: The Art of Readable Code → Clean Code / Code Complete → Working Effectively with Legacy Code → Out of the Tar Pit → Simple Made Easy.
- Interview prep: Tech Interview Handbook → Cracking the Coding Interview → LeetCode / Codility → How To Interview As a Developer Candidate → Ten Rules for Negotiating a Job Offer.
- Security basics: OWASP Top 10 → Portswigger Academy → Hashing, Encryption and Encoding → Cryptographic Right Answers → Rolling Your Own Crypto (why not to).
Catalog
Introduction
- Map of Computer Science (video) — https://www.youtube.com/watch?v=SzJ46YA_RaA
- 40 Key Computer Science Concepts Explained in Layman's Terms (article) — http://carlcheo.com/compsci
- Computer Science Roadmap (article) — https://roadmap.sh/computer-science
- Community-driven Roadmaps for Developers (site) — https://github.com/kamranahmedse/developer-roadmap
Falsehoods
- Awesome Falsehoods (list) — https://github.com/kdeldycke/awesome-falsehood — falsehoods programmers believe about strings, addresses, names, numbers, emails, timezones, dates and more.
Algorithms
- Big O Cheatsheet (site) — http://bigocheatsheet.com/
- Computer Science Distilled (book) — https://www.goodreads.com/book/show/34189798-computer-science-distilled
- Grokking Algorithms (book) — https://www.goodreads.com/book/show/22847284-grokking-algorithms-an-illustrated-guide-for-programmers-and-other-curio
- Introduction to Algorithms (book) — https://www.goodreads.com/book/show/108986.Introduction_to_Algorithms
- Algorithms Visualization (site) — https://www.cs.usfca.edu/~galles/visualization/Algorithms.html
- Algorithms for Competitive Programming (site) — https://cp-algorithms.com/
Data Structures
- Hello Algo (book) — https://www.hello-algo.com/en/chapter_preface/about_the_book/
- UC Berkeley Data Structures Course (video/course) — https://sp19.datastructur.es/
- Foundations of Data Structures, edX (course) — https://www.edx.org/course/foundations-data-structures-iitbombayx-cs213-1x-0
- Data Structures, Coursera (course) — https://www.coursera.org/learn/data-structures
- Mathematics for Computer Science, Eric Lehman et al. (book, PDF) — https://people.csail.mit.edu/meyer/mcs.pdf
Numbers
- How to Count (book) — https://www.goodreads.com/book/show/12093869-how-to-count
- Floating Point Guide (article) — http://floating-point-gui.de/
- What Every Computer Scientist Should Know About Floating-Point Arithmetic (article) — https://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html
- Basic Number Theory Every Programmer Should Know (article) — https://www.codechef.com/wiki/tutorial-number-theory/
Strings
- Unicode and Character Sets, Joel Spolsky (article) — https://www.joelonsoftware.com/articles/Unicode.html
- Homoglyphs (tool) — https://github.com/codebox/homoglyph/
- Unicode Common Locale Data Repository (site) — http://cldr.unicode.org/
- ASCII (video) — https://www.youtube.com/watch?v=B1Sf1IhA0j4
- UTF-8 (video) — https://www.youtube.com/watch?v=vLBtrd9Ar28
Latency
- Interactive Latency Infographics (site) — https://people.eecs.berkeley.edu/~rcs/research/interactive_latency.html
- Latency Numbers Every Programmer Should Know (article) — https://gist.github.com/jboner/2841832
Time
- Some Notes About Time (article) — https://unix4lyfe.org/time/
- The Problem with Timezones (video) — https://www.youtube.com/watch?v=-5wpm-gesOY
Memory
- What Every Programmer Should Know About Memory, Ulrich Drepper (article series) — https://lwn.net/Articles/250967/ — full paper PDF: https://akkadia.org/drepper/cpumemory.pdf
Distributed Systems
- Understanding Distributed Systems (book) — https://www.goodreads.com/book/show/56977420-understanding-distributed-systems
- Designing Data-Intensive Applications (book) — https://www.goodreads.com/book/show/23463279-designing-data-intensive-applications
- Designs, Lessons and Advice from Building Large Distributed Systems, Jeff Dean (paper/slides) — 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 (paper) — https://www.microsoft.com/en-us/research/publication/time-clocks-ordering-events-distributed-system/
- There Is No Now (article) — https://queue.acm.org/detail.cfm?id=2745385
- Jepsen: how databases behave under partition (articles) — https://aphyr.com/tags/jepsen
- Fallacies of Distributed Computing Explained (paper) — https://pages.cs.wisc.edu/~zuyu/files/fallacies.pdf
Machine Learning
- Andrew Ng Machine Learning Specialization (course) — https://www.coursera.org/specializations/machine-learning-introduction
RegExp
- RegexHQ (site) — https://github.com/regexhq
- Learn Regex the Easy Way (tutorial) — https://github.com/ziishaned/learn-regex
- Regex Crossword (game) — https://regexcrossword.com/
Security
- Secure Programming HOWTO, David Wheeler (book) — https://www.dwheeler.com/secure-programs/
- Rolling Your Own Crypto (article) — http://loup-vaillant.fr/articles/rolling-your-own-crypto
- Cryptographic Right Answers (article) — https://gist.github.com/tqbf/be58d2d39690c3b366ad
- An Open Letter to Developers Everywhere (About Cryptography) (article) — https://gist.github.com/paragonie-scott/e9319254c8ecbad4f227
- Foundations of Security: What Every Programmer Needs to Know (book) — https://www.goodreads.com/book/show/128003.Foundations_of_Security
- OWASP Top 10 (reference) — https://owasp.org/www-project-top-ten — the standard list of web application vulnerabilities.
- PortSwigger Web Security Academy (labs) — https://portswigger.net — hands-on web security labs.
- Web Application Exploits and Defenses, Google Gruyere (labs) — https://google-gruyere.appspot.com/part1
- Hashing, Encryption and Encoding (article) — https://www.integralist.co.uk/posts/hashing-and-encryption/
UX / Usability
- Don't Make Me Think (book) — https://www.goodreads.com/book/show/18197267-don-t-make-me-think-revisited
- Inventing on Principle, Bret Victor (video) — https://vimeo.com/906418692
SEO
- What Every Programmer Should Know About SEO (article) — https://katemats.com/blog/what-every-programmer-should-know-about-seo
Architecture
- A Field Guide to Boxology (paper) — https://web.cs.wpi.edu/~cs562/s98/pdf/Boxology.pdf
- Out of the Tar Pit (paper) — https://github.com/papers-we-love/papers-we-love/blob/master/design/out-of-the-tar-pit.pdf
- No Silver Bullet, Fred Brooks (paper) — http://www.cs.unc.edu/techreports/86-020.pdf
- Growing a Language, Guy Steele (video) — https://www.youtube.com/watch?v=_ahvzDzKdB0
- CQRS and Event Sourcing (video) — https://www.youtube.com/watch?v=JHGkaShoyNs
- Practical Object-Oriented Design in Ruby (book) — https://www.poodr.com/
- Evolutionary Software Architectures (video) — https://www.youtube.com/watch?v=CglSFhwbI3s
- System Design Primer (guide) — https://github.com/donnemartin/system-design-primer
- How JavaScript Works, parts 1-4 (articles) — https://medium.com/sessionstack-blog/how-does-javascript-actually-work-part-1-b0bacc073cf
- Entity-Component-System Architecture with Unity by Example (video) — https://www.youtube.com/watch?v=lNTaC-JWmdI
Code Design
- Programming Principles Wiki (site) — http://www.principles-wiki.net/
Engineering Philosophy
- Category Theory in Life (video) — https://www.youtube.com/watch?v=ho7oagHeqNc
- Simple Made Easy, Rich Hickey (video) — https://www.infoq.com/presentations/Simple-Made-Easy
- Speed in Software Development (article) — https://www.targetprocess.com/articles/speed-in-software-development/
- #NoEstimates (video) — https://www.youtube.com/watch?v=QVBlnCTu9Ms
- The Myth of the Genius Programmer (video) — https://www.youtube.com/watch?v=0SARbwvhupQ
- Making Badass Developers, Kathy Sierra (video) — https://www.youtube.com/watch?v=FKTxC9pl-WM
- The Ten Rules of a Zen Programmer (article) — https://www.zenprogrammer.org/en/10-rules-of-a-zen-programmer.html
- The Mythical 10x Programmer, antirez (article) — http://antirez.com/news/112
- The Debugging Mindset (article) — https://queue.acm.org/detail.cfm?id=3068754
- The Future of Programming, Bret Victor (video) — http://worrydream.com/dbx/
- The Good Software Development Manifesto (article) — https://www.infoworld.com/article/3214481/application-development/the-good-software-development-manifesto.html
- All the Little Things, Sandi Metz (video) — https://www.youtube.com/watch?v=8bZh5LMaSmE
- Teach Yourself Programming in Ten Years, Peter Norvig (article) — https://norvig.com/21-days.html
Practices
- Working Effectively with Legacy Code (book) — https://www.goodreads.com/book/show/44919.Working_Effectively_with_Legacy_Code
- The Art of Readable Code (book) — https://www.goodreads.com/book/show/8677004-the-art-of-readable-code
- Code Complete (book) — https://www.goodreads.com/book/show/4845.Code_Complete
- Clean Code (book) — https://www.goodreads.com/book/show/3735293-clean-code
- Test Driven Development: By Example (book) — https://www.goodreads.com/book/show/387190.Test_Driven_Development
- Going To Production Checklist (checklist) — https://github.com/mr-mig/going-to-production
- Release It! (book) — https://www.goodreads.com/book/show/1069827.Release_It_
- Professor Frisby's Mostly Adequate Guide to Functional Programming (book) — https://mostly-adequate.gitbook.io/mostly-adequate-guide/
- SICP: Structure and Interpretation of Computer Programs (book) — https://www.goodreads.com/book/show/43713.Structure_and_Interpretation_of_Computer_Programs
- Thirteen Ways of Looking at a Turtle (article) — https://fsharpforfunandprofit.com/posts/13-ways-of-looking-at-a-turtle-3/
- Programming Paradigms for Dummies, Peter Van Roy (paper) — https://www.info.ucl.ac.be/~pvr/VanRoyChapter.pdf
- Learn X in Y Minutes (site) — https://learnxinyminutes.com/ — condensed basics of a language.
- Hyperpolyglot (site) — http://hyperpolyglot.org/ — side-by-side feature comparison of similar languages.
- Pomodoro for Programmers (article) — https://medium.com/@mr_mig_by/pomodoro-for-programmers-d6568dd1e6fc
- Site Reliability Engineering, Google (book, free online) — https://sre.google/sre-book/table-of-contents/
Career
- Levels.fyi (site) — https://www.levels.fyi — salary data across tech companies.
- 10 Things Every Programmer Should Know for Their First Job (article) — 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? (article) — https://www.codementor.io/blog/best-cities-software-engineer-earnings-271vpf599k
- Software Engineering 101 (slides) — https://slides.com/mr-mig/se101
- The Passionate Programmer (book) — https://www.goodreads.com/book/show/6399113-the-passionate-programmer
- Soft Skills: The Software Developer's Life Manual (book) — https://www.goodreads.com/book/show/23232941-soft-skills
- The Complete Software Developer's Career Guide (book) — https://www.goodreads.com/book/show/35674293-the-complete-software-developer-s-career-guide
- Programming Beyond Practices (book) — https://www.goodreads.com/book/show/29895093-programming-beyond-practices
- Ten Rules for Negotiating a Job Offer (article) — https://medium.com/free-code-camp/ten-rules-for-negotiating-a-job-offer-ee17cccbdab6
- How To Interview As a Developer Candidate (article) — https://medium.freecodecamp.com/how-to-interview-as-a-developer-candidate-b666734f12dd
- How To Get a Tech Job Abroad Faster (article) — https://relocate.me/blog/job-relocation/landing-a-tech-job-abroad-7-simple-tips/
- How To Be a STAR Engineer (paper) — http://vlsicad.ucsd.edu/Research/Advice/star_engineer.pdf
- TL;DR Stock Options (archived site) — https://web.archive.org/web/20190304234515/https://tldroptions.io/
- The Open Guide to Equity Compensation (guide) — https://github.com/jlevy/og-equity-compensation
- Equity 101 for Startup Employees (article) — https://blog.carta.com/equity-101-stock-option-basics/
- Cracking the Coding Interview (book) — https://www.goodreads.com/book/show/25707092-cracking-the-coding-interview
- Everything You Need to Know to Get the Job (guide) — https://github.com/kdn251/interviews
- Tech Interview Handbook (guide) — https://github.com/yangshun/tech-interview-handbook
- What You Should Know as a Founder of a Software Company (article) — https://qotoqot.com/blog/founder-skills/
- Pramp, mock interviews (site) — https://www.pramp.com/
- 97 Things Every Programmer Should Know (book, free) — https://github.com/97-things/97-things-every-programmer-should-know
- A Philosophy of Software Design, John Ousterhout, Talks at Google (video) — https://www.youtube.com/watch?v=bmSAYlu0NcY
- Resume: CV Compiler (tool) — https://cvcompiler.com/
Open Source
- Learn How to Use Git and GitHub (guide) — https://www.deployhq.com/git
- Choose an Open Source License (site) — https://choosealicense.com/
- TLDRLegal, software licenses explained (site) — https://tldrlegal.com/
- How Open Source Licenses Work (article) — https://medium.freecodecamp.org/how-open-source-licenses-work-and-how-to-add-them-to-your-projects-34310c3cf94
Remote Work
- Remotive: startups hiring remotely (list) — https://docs.google.com/spreadsheets/d/1TLJSlNxCbwRNxy14Toe1PYwbCTY7h0CNHeer9J0VRzE/htmlview
- Remote Working List for Developers (list) — https://github.com/georgemandis/remote-working-list
- NomadList (site) — https://nomadlist.com/
- The Ultimate Guide to Remote Work, Zapier (book) — https://zapier.com/learn/remote-work/
- Awesome Remote Job (list) — https://github.com/lukasz-madon/awesome-remote-job
Problem Solving
- The Art and Craft of Problem Solving (book) — https://www.goodreads.com/book/show/593458.The_Art_and_Craft_of_Problem_Solving
- How to Solve It, George Pólya (book) — https://www.goodreads.com/book/show/192221.How_to_Solve_It
Soft Skills
- Difficult Conversations (book) — https://www.goodreads.com/book/show/774088.Difficult_Conversations
- Crucial Conversations (book) — https://www.goodreads.com/book/show/15014.Crucial_Conversations
- How to Win Friends and Influence People (book) — https://www.goodreads.com/book/show/4865.How_to_Win_Friends_and_Influence_People
Mental Health
- Awesome Mental Health (list) — https://github.com/dreamingechoes/awesome-mental-health — articles and resources on mental health in the software industry.
Papers on Programming
- Papers We Love (collection) — https://github.com/papers-we-love/papers-we-love
- The Morning Paper (blog) — https://blog.acolyer.org/
- Go To Statement Considered Harmful, Dijkstra (paper) — https://homepages.cwi.nl/~storm/teaching/reader/Dijkstra68.pdf
- arXiv (preprints) — https://arxiv.org/
Free Books
- Free Programming Books (list) — https://github.com/EbookFoundation/free-programming-books
Services and Tools
- Free For Dev (list) — https://github.com/ripienaar/free-for-dev
- Public APIs (list) — https://github.com/abhishekbanthia/Public-APIs
- The Noun Project (icons) — https://thenounproject.com/
- Simple Icons (brand icons) — https://simpleicons.org/
- Learn Anything (learning maps) — https://learn-anything.xyz/
- Replit (online IDE) — https://replit.com/
Where to Look for Further Info
- freeCodeCamp — https://www.freecodecamp.org/news/
- GeeksforGeeks — https://www.geeksforgeeks.org/
- DEV Community — https://dev.to/
- Stack Overflow — https://stackoverflow.com/
- DZone — https://dzone.com/
Coding Practice Sites
- Competitive programming: Codeforces (https://codeforces.com/), AtCoder (https://atcoder.jp/), CodeChef (https://www.codechef.com), SPOJ (https://spoj.com/), TopCoder (https://www.topcoder.com/), CS Academy (https://csacademy.com/), ICPC Problem Archive (https://icpc.kattis.com/), Project Euler (https://projecteuler.net/)
- Interview prep: LeetCode (https://leetcode.com/), HackerRank (https://hackerrank.com/), Codility (https://www.codility.com/), CodeSignal (https://codesignal.com/), InterviewBit (https://www.interviewbit.com/), Interview Cake (https://www.interviewcake.com/), LintCode (https://www.lintcode.com/), Coderbyte (https://coderbyte.com/), HackerEarth (https://hackerearth.com/), Codemia (https://codemia.io/)
- Practice and katas: Exercism (https://exercism.org/), Codewars (https://codewars.com/), CodinGame (https://www.codingame.com/), LabEx (https://labex.io/), Codebattle (https://codebattle.hexlet.io/), uCoder (https://ucoder.com.br)
Learning Through Games
- Robocode — https://robocode.sourceforge.io/
- Elevator Saga — https://play.elevatorsaga.com/
- Untrusted — https://alexnisnevich.github.io/untrusted/
- CSS Diner — https://flukeout.github.io/
- CodeCombat — https://codecombat.com/
Platform Engineering
A discipline grown out of DevOps and SRE: building self-service tools and workflows (often an Internal Developer Platform) to reduce developers' cognitive load and streamline the path to production.
- What is platform engineering? — Microsoft Learn: https://learn.microsoft.com/en-us/platform-engineering/what-is-platform-engineering ; Atlassian: https://www.atlassian.com/developer-experience/platform-engineering
- Internal Developer Platform (IDP) — https://internaldeveloperplatform.org/what-is-an-internal-developer-platform/ ; Atlassian guide: https://www.atlassian.com/developer-experience/internal-developer-platform
- Golden Paths (paved roads) — Spotify/Backstage: https://backstage.spotify.com/learn/onboarding-software-to-backstage/setting-up-software-templates/11-spotify-templates/ ; Red Hat: https://www.redhat.com/en/topics/devops/golden-paths