Piensa como un Programador
Un catálogo curado de recursos (principalmente) técnicos que todo desarrollador de software debería conocer, independientemente de su nivel de habilidad o stack tecnológico. Basado en la lista comunitaria en https://github.com/mtdvio/every-programmer-should-know por Alexey Migutsky y colaboradores, con licencia CC BY 4.0. El original es abiertamente "muy opinado, sin respaldo científico" y en ningún orden en particular.
Cuándo usar
- "¿Qué debería aprender a continuación / qué debería saber todo desarrollador sobre X?"
- Solicitudes de un libro, charla, paper, curso o artículo sobre un tema fundamental.
- Explicar un concepto (coma flotante, husos horarios, Unicode, memoria, CAP/relojes distribuidos, criptografía) y querer señalar la lectura canónica.
- Preguntas de carrera: entrevistas, negociación de ofertas, equidad, trabajo remoto, currículum.
- "¿Dónde puedo practicar programación / prepararme para entrevistas?"
Cómo usar
- Empareja la pregunta con una o más secciones del catálogo a continuación.
- Recomienda de 2 a 4 recursos, no la sección completa. Para cada uno, da una línea sobre por qué encaja y su formato (libro / video / artículo / paper / curso / sitio).
- Ajusta según el nivel: los principiantes obtienen primero recursos visuales o suaves (Grokking Algorithms, Hello Algo, Learn X in Y Minutes); los desarrolladores experimentados obtienen el material más profundo o clásico (Introduction to Algorithms, DDIA, Lamport, Out of the Tar Pit).
- Si el tema no está en el catálogo, dilo claramente y responde desde el conocimiento general; no fuerces un enlace no relacionado.
- Algunos enlaces son antiguos y pueden haberse movido o roto. Si hay acceso web y un enlace es importante, verifícalo antes de confiar en él; de lo contrario, menciona que el enlace puede estar desactualizado.
- Responde en el idioma del usuario; mantén los títulos de los recursos en su forma original.
- Recuerda a las personas cuando sea útil que nadie necesita saber todo esto de memoria — es un mapa, no una lista de verificación.
Rutas sugeridas (combinaciones del catálogo)
- Nuevo en CS: Map of Computer Science → Computer Science Roadmap → Grokking Algorithms → Big O Cheatsheet → Floating Point Guide → Unicode and Character Sets.
- Backend / sistemas distribuidos: Latency Numbers → Understanding Distributed Systems → Designing Data-Intensive Applications → Fallacies of Distributed Computing → Time, Clocks and the Ordering of Events → Jepsen.
- Escribir mejor código: The Art of Readable Code → Clean Code / Code Complete → Working Effectively with Legacy Code → Out of the Tar Pit → Simple Made Easy.
- Preparación 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 seguridad: OWASP Top 10 → Portswigger Academy → Hashing, Encryption and Encoding → Cryptographic Right Answers → Rolling Your Own Crypto (por qué no).
Catálogo
Introducción
- Map of Computer Science (video) — https://www.youtube.com/watch?v=SzJ46YA_RaA
- 40 Key Computer Science Concepts Explained in Layman's Terms (artículo) — http://carlcheo.com/compsci
- Computer Science Roadmap (artículo) — https://roadmap.sh/computer-science
- Community-driven Roadmaps for Developers (sitio) — https://github.com/kamranahmedse/developer-roadmap
Falsedades
- Awesome Falsehoods (lista) — https://github.com/kdeldycke/awesome-falsehood — falsedades que los programadores creen sobre cadenas, direcciones, nombres, números, correos electrónicos, husos horarios, fechas y más.
Algoritmos
- Big O Cheatsheet (sitio) — http://bigocheatsheet.com/
- Computer Science Distilled (libro) — https://www.goodreads.com/book/show/34189798-computer-science-distilled
- Grokking Algorithms (libro) — https://www.goodreads.com/book/show/22847284-grokking-algorithms-an-illustrated-guide-for-programmers-and-other-curio
- Introduction to Algorithms (libro) — https://www.goodreads.com/book/show/108986.Introduction_to_Algorithms
- Algorithms Visualization (sitio) — https://www.cs.usfca.edu/~galles/visualization/Algorithms.html
- Algorithms for Competitive Programming (sitio) — https://cp-algorithms.com/
Estructuras de Datos
- Hello Algo (libro) — https://www.hello-algo.com/en/chapter_preface/about_the_book/
- UC Berkeley Data Structures Course (video/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. (libro, PDF) — https://people.csail.mit.edu/meyer/mcs.pdf
Números
- How to Count (libro) — https://www.goodreads.com/book/show/12093869-how-to-count
- Floating Point Guide (artículo) — http://floating-point-gui.de/
- What Every Computer Scientist Should Know About Floating-Point Arithmetic (artículo) — https://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html
- Basic Number Theory Every Programmer Should Know (artículo) — https://www.codechef.com/wiki/tutorial-number-theory/
Cadenas
- Unicode and Character Sets, Joel Spolsky (artículo) — https://www.joelonsoftware.com/articles/Unicode.html
- Homoglyphs (herramienta) — https://github.com/codebox/homoglyph/
- Unicode Common Locale Data Repository (sitio) — http://cldr.unicode.org/
- ASCII (video) — https://www.youtube.com/watch?v=B1Sf1IhA0j4
- UTF-8 (video) — https://www.youtube.com/watch?v=vLBtrd9Ar28
Latencia
- Interactive Latency Infographics (sitio) — https://people.eecs.berkeley.edu/~rcs/research/interactive_latency.html
- Latency Numbers Every Programmer Should Know (artículo) — https://gist.github.com/jboner/2841832
Tiempo
- Some Notes About Time (artículo) — https://unix4lyfe.org/time/
- The Problem with Timezones (video) — https://www.youtube.com/watch?v=-5wpm-gesOY
Memoria
- What Every Programmer Should Know About Memory, Ulrich Drepper (serie de artículos) — https://lwn.net/Articles/250967/ — PDF completo del paper: https://akkadia.org/drepper/cpumemory.pdf
Sistemas Distribuidos
- Understanding Distributed Systems (libro) — https://www.goodreads.com/book/show/56977420-understanding-distributed-systems
- Designing Data-Intensive Applications (libro) — https://www.goodreads.com/book/show/23463279-designing-data-intensive-applications
- Designs, Lessons and Advice from Building Large Distributed Systems, Jeff Dean (paper/diapositivas) — 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 (artículo) — https://queue.acm.org/detail.cfm?id=2745385
- Jepsen: how databases behave under partition (artículos) — https://aphyr.com/tags/jepsen
- Fallacies of Distributed Computing Explained (paper) — https://pages.cs.wisc.edu/~zuyu/files/fallacies.pdf
Aprendizaje Automático
- Andrew Ng Machine Learning Specialization (curso) — https://www.coursera.org/specializations/machine-learning-introduction
Expresiones Regulares
- RegexHQ (sitio) — https://github.com/regexhq
- Learn Regex the Easy Way (tutorial) — https://github.com/ziishaned/learn-regex
- Regex Crossword (juego) — https://regexcrossword.com/
Seguridad
- Secure Programming HOWTO, David Wheeler (libro) — https://www.dwheeler.com/secure-programs/
- Rolling Your Own Crypto (artículo) — http://loup-vaillant.fr/articles/rolling-your-own-crypto
- Cryptographic Right Answers (artículo) — https://gist.github.com/tqbf/be58d2d39690c3b366ad
- An Open Letter to Developers Everywhere (About Cryptography) (artículo) — https://gist.github.com/paragonie-scott/e9319254c8ecbad4f227
- Foundations of Security: What Every Programmer Needs to Know (libro) — https://www.goodreads.com/book/show/128003.Foundations_of_Security
- OWASP Top 10 (referencia) — https://owasp.org/www-project-top-ten — la lista estándar de vulnerabilidades de aplicaciones web.
- PortSwigger Web Security Academy (laboratorios) — https://portswigger.net — laboratorios prácticos de seguridad web.
- Web Application Exploits and Defenses, Google Gruyere (laboratorios) — https://google-gruyere.appspot.com/part1
- Hashing, Encryption and Encoding (artículo) — https://www.integralist.co.uk/posts/hashing-and-encryption/
UX / Usabilidad
- Don't Make Me Think (libro) — 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 (artículo) — https://katemats.com/blog/what-every-programmer-should-know-about-seo
Arquitectura
- 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 (libro) — https://www.poodr.com/
- Evolutionary Software Architectures (video) — https://www.youtube.com/watch?v=CglSFhwbI3s
- System Design Primer (guía) — https://github.com/donnemartin/system-design-primer
- How JavaScript Works, partes 1-4 (artículos) — 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
Diseño de Código
- Programming Principles Wiki (sitio) — http://www.principles-wiki.net/
Filosofía de Ingeniería
- 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 (artículo) — 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 (artículo) — https://www.zenprogrammer.org/en/10-rules-of-a-zen-programmer.html
- The Mythical 10x Programmer, antirez (artículo) — http://antirez.com/news/112
- The Debugging Mindset (artículo) — https://queue.acm.org/detail.cfm?id=3068754
- The Future of Programming, Bret Victor (video) — http://worrydream.com/dbx/
- The Good Software Development Manifesto (artículo) — 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 (artículo) — https://norvig.com/21-days.html
Prácticas
- Working Effectively with Legacy Code (libro) — https://www.goodreads.com/book/show/44919.Working_Effectively_with_Legacy_Code
- The Art of Readable Code (libro) — https://www.goodreads.com/book/show/8677004-the-art-of-readable-code
- Code Complete (libro) — https://www.goodreads.com/book/show/4845.Code_Complete
- Clean Code (libro) — https://www.goodreads.com/book/show/3735293-clean-code
- Test Driven Development: By Example (libro) — https://www.goodreads.com/book/show/387190.Test_Driven_Development
- Going To Production Checklist (lista de verificación) — https://github.com/mr-mig/going-to-production
- Release It! (libro) — https://www.goodreads.com/book/show/1069827.Release_It_
- Professor Frisby's Mostly Adequate Guide to Functional Programming (libro) — https://mostly-adequate.gitbook.io/mostly-adequate-guide/
- SICP: Structure and Interpretation of Computer Programs (libro) — https://www.goodreads.com/book/show/43713.Structure_and_Interpretation_of_Computer_Programs
- Thirteen Ways of Looking at a Turtle (artículo) — 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 (sitio) — https://learnxinyminutes.com/ — conceptos básicos condensados de un lenguaje.
- Hyperpolyglot (sitio) — http://hyperpolyglot.org/ — comparación lado a lado de características de lenguajes similares.
- Pomodoro for Programmers (artículo) — https://medium.com/@mr_mig_by/pomodoro-for-programmers-d6568dd1e6fc
- Site Reliability Engineering, Google (libro, gratis en línea) — https://sre.google/sre-book/table-of-contents/
Carrera
- Levels.fyi (sitio) — https://www.levels.fyi — datos salariales de empresas tecnológicas.
- 10 Things Every Programmer Should Know for Their First Job (artículo) — 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? (artículo) — https://www.codementor.io/blog/best-cities-software-engineer-earnings-271vpf599k
- Software Engineering 101 (diapositivas) — https://slides.com/mr-mig/se101
- The Passionate Programmer (libro) — https://www.goodreads.com/book/show/6399113-the-passionate-programmer
- Soft Skills: The Software Developer's Life Manual (libro) — https://www.goodreads.com/book/show/23232941-soft-skills
- The Complete Software Developer's Career Guide (libro) — https://www.goodreads.com/book/show/35674293-the-complete-software-developer-s-career-guide
- Programming Beyond Practices (libro) — https://www.goodreads.com/book/show/29895093-programming-beyond-practices
- Ten Rules for Negotiating a Job Offer (artículo) — https://medium.com/free-code-camp/ten-rules-for-negotiating-a-job-offer-ee17cccbdab6
- How To Interview As a Developer Candidate (artículo) — https://medium.freecodecamp.com/how-to-interview-as-a-developer-candidate-b666734f12dd
- How To Get a Tech Job Abroad Faster (artículo) — 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