Pense Como um Programador
Um catálogo curado de recursos (principalmente) técnicos que todo desenvolvedor de software deveria conhecer, independentemente do nível de habilidade ou stack tecnológica. Baseado na lista comunitária em https://github.com/mtdvio/every-programmer-should-know por Alexey Migutsky e colaboradores, licenciado CC BY 4.0. O original é abertamente "altamente opinativo, não baseado em ciência" e em nenhuma ordem particular.
Quando usar
- "O que devo aprender a seguir / o que todo desenvolvedor deveria saber sobre X?"
- Pedidos de um livro, palestra, artigo, curso ou post sobre um tópico fundamental.
- Explicar um conceito (ponto flutuante, fusos horários, Unicode, memória, CAP/relógios distribuídos, criptografia) e querer apontar para a leitura canônica.
- Perguntas sobre carreira: entrevistas, negociação de ofertas, equity, trabalho remoto, currículo.
- "Onde posso praticar programação / me preparar para entrevistas?"
Como usar
- Corresponda a pergunta a uma ou mais seções do catálogo abaixo.
- Recomende 2 a 4 recursos, não a seção inteira. Para cada um, dê uma linha sobre por que se encaixa e seu formato (livro / vídeo / artigo / paper / curso / site).
- Ajuste para o nível: iniciantes recebem recursos visuais ou mais suaves primeiro (Grokking Algorithms, Hello Algo, Learn X in Y Minutes); desenvolvedores experientes recebem o material mais profundo ou clássico (Introduction to Algorithms, DDIA, Lamport, Out of the Tar Pit).
- Se o tópico não estiver no catálogo, diga isso claramente e responda com conhecimento geral; não force um link não relacionado.
- Alguns links são antigos e podem ter sido movidos ou quebrados. Se o acesso à web estiver disponível e um link for importante, verifique-o antes de confiar; caso contrário, mencione que o link pode estar desatualizado.
- Responda no idioma do usuário; mantenha os títulos dos recursos em sua forma original.
- Lembre as pessoas, quando útil, que ninguém precisa saber tudo isso de cor — é um mapa, não uma lista de verificação.
Caminhos sugeridos (combinações do catálogo)
- Novato em CC: Map of Computer Science → Computer Science Roadmap → Grokking Algorithms → Big O Cheatsheet → Floating Point Guide → Unicode and Character Sets.
- Backend / sistemas distribuídos: Latency Numbers → Understanding Distributed Systems → Designing Data-Intensive Applications → Fallacies of Distributed Computing → Time, Clocks and the Ordering of Events → Jepsen.
- Escrevendo código melhor: The Art of Readable Code → Clean Code / Code Complete → Working Effectively with Legacy Code → Out of the Tar Pit → Simple Made Easy.
- Preparação para entrevistas: Tech Interview Handbook → Cracking the Coding Interview → LeetCode / Codility → How To Interview As a Developer Candidate → Ten Rules for Negotiating a Job Offer.
- Fundamentos de segurança: OWASP Top 10 → Portswigger Academy → Hashing, Encryption and Encoding → Cryptographic Right Answers → Rolling Your Own Crypto (por que não fazer).
Catálogo
Introdução
- Map of Computer Science (vídeo) — https://www.youtube.com/watch?v=SzJ46YA_RaA
- 40 Key Computer Science Concepts Explained in Layman's Terms (artigo) — http://carlcheo.com/compsci
- Computer Science Roadmap (artigo) — https://roadmap.sh/computer-science
- Community-driven Roadmaps for Developers (site) — https://github.com/kamranahmedse/developer-roadmap
Falsidades
- Awesome Falsehoods (lista) — https://github.com/kdeldycke/awesome-falsehood — falsidades que programadores acreditam sobre strings, endereços, nomes, números, emails, fusos horários, datas e muito mais.
Algoritmos
- Big O Cheatsheet (site) — http://bigocheatsheet.com/
- Computer Science Distilled (livro) — https://www.goodreads.com/book/show/34189798-computer-science-distilled
- Grokking Algorithms (livro) — https://www.goodreads.com/book/show/22847284-grokking-algorithms-an-illustrated-guide-for-programmers-and-other-curio
- Introduction to Algorithms (livro) — 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/
Estruturas de Dados
- Hello Algo (livro) — https://www.hello-algo.com/en/chapter_preface/about_the_book/
- UC Berkeley Data Structures Course (vídeo/curso) — https://sp19.datastructur.es/
- Foundations of Data Structures, edX (curso) — https://www.edx.org/course/foundations-data-structures-iitbombayx-cs213-1x-0
- Data Structures, Coursera (curso) — https://www.coursera.org/learn/data-structures
- Mathematics for Computer Science, Eric Lehman et al. (livro, PDF) — https://people.csail.mit.edu/meyer/mcs.pdf
Números
- How to Count (livro) — https://www.goodreads.com/book/show/12093869-how-to-count
- Floating Point Guide (artigo) — http://floating-point-gui.de/
- What Every Computer Scientist Should Know About Floating-Point Arithmetic (artigo) — https://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html
- Basic Number Theory Every Programmer Should Know (artigo) — https://www.codechef.com/wiki/tutorial-number-theory/
Strings
- Unicode and Character Sets, Joel Spolsky (artigo) — https://www.joelonsoftware.com/articles/Unicode.html
- Homoglyphs (ferramenta) — https://github.com/codebox/homoglyph/
- Unicode Common Locale Data Repository (site) — http://cldr.unicode.org/
- ASCII (vídeo) — https://www.youtube.com/watch?v=B1Sf1IhA0j4
- UTF-8 (vídeo) — https://www.youtube.com/watch?v=vLBtrd9Ar28
Latência
- Interactive Latency Infographics (site) — https://people.eecs.berkeley.edu/~rcs/research/interactive_latency.html
- Latency Numbers Every Programmer Should Know (artigo) — https://gist.github.com/jboner/2841832
Tempo
- Some Notes About Time (artigo) — https://unix4lyfe.org/time/
- The Problem with Timezones (vídeo) — https://www.youtube.com/watch?v=-5wpm-gesOY
Memória
- What Every Programmer Should Know About Memory, Ulrich Drepper (série de artigos) — https://lwn.net/Articles/250967/ — PDF completo do paper: https://akkadia.org/drepper/cpumemory.pdf
Sistemas Distribuídos
- Understanding Distributed Systems (livro) — https://www.goodreads.com/book/show/56977420-understanding-distributed-systems
- Designing Data-Intensive Applications (livro) — 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 (artigo) — https://queue.acm.org/detail.cfm?id=2745385
- Jepsen: how databases behave under partition (artigos) — 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 (curso) — 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 (jogo) — https://regexcrossword.com/
Segurança
- Secure Programming HOWTO, David Wheeler (livro) — https://www.dwheeler.com/secure-programs/
- Rolling Your Own Crypto (artigo) — http://loup-vaillant.fr/articles/rolling-your-own-crypto
- Cryptographic Right Answers (artigo) — https://gist.github.com/tqbf/be58d2d39690c3b366ad
- An Open Letter to Developers Everywhere (About Cryptography) (artigo) — https://gist.github.com/paragonie-scott/e9319254c8ecbad4f227
- Foundations of Security: What Every Programmer Needs to Know (livro) — https://www.goodreads.com/book/show/128003.Foundations_of_Security
- OWASP Top 10 (referência) — https://owasp.org/www-project-top-ten — a lista padrão de vulnerabilidades de aplicações web.
- PortSwigger Web Security Academy (laboratórios) — https://portswigger.net — laboratórios práticos de segurança web.
- Web Application Exploits and Defenses, Google Gruyere (laboratórios) — https://google-gruyere.appspot.com/part1
- Hashing, Encryption and Encoding (artigo) — https://www.integralist.co.uk/posts/hashing-and-encryption/
UX / Usabilidade
- Don't Make Me Think (livro) — https://www.goodreads.com/book/show/18197267-don-t-make-me-think-revisited
- Inventing on Principle, Bret Victor (vídeo) — https://vimeo.com/906418692
SEO
- What Every Programmer Should Know About SEO (artigo) — https://katemats.com/blog/what-every-programmer-should-know-about-seo
Arquitetura
- 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 (vídeo) — https://www.youtube.com/watch?v=_ahvzDzKdB0
- CQRS and Event Sourcing (vídeo) — https://www.youtube.com/watch?v=JHGkaShoyNs
- Practical Object-Oriented Design in Ruby (livro) — https://www.poodr.com/
- Evolutionary Software Architectures (vídeo) — https://www.youtube.com/watch?v=CglSFhwbI3s
- System Design Primer (guia) — https://github.com/donnemartin/system-design-primer
- How JavaScript Works, partes 1-4 (artigos) — https://medium.com/sessionstack-blog/how-does-javascript-actually-work-part-1-b0bacc073cf
- Entity-Component-System Architecture with Unity by Example (vídeo) — https://www.youtube.com/watch?v=lNTaC-JWmdI
Design de Código
- Programming Principles Wiki (site) — http://www.principles-wiki.net/
Filosofia de Engenharia
- Category Theory in Life (vídeo) — https://www.youtube.com/watch?v=ho7oagHeqNc
- Simple Made Easy, Rich Hickey (vídeo) — https://www.infoq.com/presentations/Simple-Made-Easy
- Speed in Software Development (artigo) — https://www.targetprocess.com/articles/speed-in-software-development/
- #NoEstimates (vídeo) — https://www.youtube.com/watch?v=QVBlnCTu9Ms
- The Myth of the Genius Programmer (vídeo) — https://www.youtube.com/watch?v=0SARbwvhupQ
- Making Badass Developers, Kathy Sierra (vídeo) — https://www.youtube.com/watch?v=FKTxC9pl-WM
- The Ten Rules of a Zen Programmer (artigo) — https://www.zenprogrammer.org/en/10-rules-of-a-zen-programmer.html
- The Mythical 10x Programmer, antirez (artigo) — http://antirez.com/news/112
- The Debugging Mindset (artigo) — https://queue.acm.org/detail.cfm?id=3068754
- The Future of Programming, Bret Victor (vídeo) — http://worrydream.com/dbx/
- The Good Software Development Manifesto (artigo) — https://www.infoworld.com/article/3214481/application-development/the-good-software-development-manifesto.html
- All the Little Things, Sandi Metz (vídeo) — https://www.youtube.com/watch?v=8bZh5LMaSmE
- Teach Yourself Programming in Ten Years, Peter Norvig (artigo) — https://norvig.com/21-days.html
Práticas
- Working Effectively with Legacy Code (livro) — https://www.goodreads.com/book/show/44919.Working_Effectively_with_Legacy_Code
- The Art of Readable Code (livro) — https://www.goodreads.com/book/show/8677004-the-art-of-readable-code
- Code Complete (livro) — https://www.goodreads.com/book/show/4845.Code_Complete
- Clean Code (livro) — https://www.goodreads.com/book/show/3735293-clean-code
- Test Driven Development: By Example (livro) — https://www.goodreads.com/book/show/387190.Test_Driven_Development
- Going To Production Checklist (lista de verificação) — https://github.com/mr-mig/going-to-production
- Release It! (livro) — https://www.goodreads.com/book/show/1069827.Release_It_
- Professor Frisby's Mostly Adequate Guide to Functional Programming (livro) — https://mostly-adequate.gitbook.io/mostly-adequate-guide/
- SICP: Structure and Interpretation of Computer Programs (livro) — https://www.goodreads.com/book/show/43713.Structure_and_Interpretation_of_Computer_Programs
- Thirteen Ways of Looking at a Turtle (artigo) — 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/ — noções básicas condensadas de uma linguagem.
- Hyperpolyglot (site) — http://hyperpolyglot.org/ — comparação lado a lado de recursos de linguagens similares.
- Pomodoro for Programmers (artigo) — https://medium.com/@mr_mig_by/pomodoro-for-programmers-d6568dd1e6fc
- Site Reliability Engineering, Google (livro, gratuito online) — https://sre.google/sre-book/table-of-contents/
Carreira
- Levels.fyi (site) — https://www.levels.fyi — dados salariais entre empresas de tecnologia.
- 10 Things Every Programmer Should Know for Their First Job (artigo) — 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? (artigo) — https://www.codementor.io/blog/best-cities-software-engineer-earnings-271vpf599k
- Software Engineering 101 (slides) — https://slides.com/mr-mig/se101
- The Passionate Programmer (livro) — https://www.goodreads.com/book/show/6399113-the-passionate-programmer
- Soft Skills: The Software Developer's Life Manual (livro) — https://www.goodreads.com/book/show/23232941-soft-skills
- The Complete Software Developer's Career Guide (livro) — https://www.goodreads.com/book/show/35674293-the-complete-software-developer-s-career-guide
- Programming Beyond Practices (livro) — https://www.goodreads.com/book/show/29895093-programming-beyond-practices
- Ten Rules for Negotiating a Job Offer (artigo) — https://medium.com/free-code-camp/ten-rules-for-negotiating-a-job-offer-ee17cccbdab6
- How To Interview As a Developer Candidate (artigo) — https://medium.freecodecamp.com/how-to-interview-as-a-developer-candidate-b666734f12dd
- How To Get a Tech Job Abroad Faster (artigo) — 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 Option (artigo) — https://tldroptions.io/