Penser comme un programmeur
Un catalogue organisé de ressources (principalement) techniques que tout développeur devrait connaître, quel que soit son niveau ou sa pile technologique. Basé sur la liste communautaire disponible à l'adresse https://github.com/mtdvio/every-programmer-should-know par Alexey Migutsky et ses contributeurs, sous licence CC BY 4.0. L'original est ouvertement « très subjectif, non fondé sur la science » et dans aucun ordre particulier.
Quand l'utiliser
- « Que devrais-je apprendre ensuite / que devrait savoir tout développeur sur X ? »
- Demandes de livre, conférence, article, cours ou article de blog sur un sujet fondamental.
- Expliquer un concept (virgule flottante, fuseaux horaires, Unicode, mémoire, CAP/horloges distribuées, cryptographie) et vouloir pointer vers la lecture canonique.
- Questions de carrière : entretiens, négociation d'offre, participation, travail à distance, CV.
- « Où puis-je m'entraîner à coder / me préparer aux entretiens ? »
Comment l'utiliser
- Faire correspondre la question à une ou plusieurs sections du catalogue ci-dessous.
- Recommander 2 à 4 ressources, pas toute la section. Pour chacune, donner une ligne expliquant pourquoi elle convient et son format (livre / vidéo / article / article scientifique / cours / site).
- Adapter au niveau : les débutants reçoivent d'abord des ressources visuelles ou accessibles (Grokking Algorithms, Hello Algo, Learn X in Y Minutes) ; les développeurs expérimentés reçoivent le matériel plus profond ou classique (Introduction to Algorithms, DDIA, Lamport, Out of the Tar Pit).
- Si le sujet n'est pas dans le catalogue, le dire clairement et répondre à partir de connaissances générales ; ne pas forcer un lien non pertinent.
- Certains liens sont anciens et peuvent avoir été déplacés ou ne plus fonctionner. Si l'accès web est disponible et qu'un lien est important, le vérifier avant de s'y fier ; sinon, mentionner que le lien est peut-être obsolète.
- Répondre dans la langue de l'utilisateur ; conserver les titres des ressources dans leur forme originale.
- Rappeler aux gens, si utile, que personne n'a besoin de connaître tout cela par cœur — c'est une carte, pas une liste de contrôle.
Parcours suggérés (combinaisons du catalogue)
- Nouveau en informatique : Map of Computer Science → Computer Science Roadmap → Grokking Algorithms → Big O Cheatsheet → Floating Point Guide → Unicode and Character Sets.
- Backend / systèmes distribués : Latency Numbers → Understanding Distributed Systems → Designing Data-Intensive Applications → Fallacies of Distributed Computing → Time, Clocks and the Ordering of Events → Jepsen.
- Écrire du meilleur code : The Art of Readable Code → Clean Code / Code Complete → Working Effectively with Legacy Code → Out of the Tar Pit → Simple Made Easy.
- Préparation aux entretiens : Tech Interview Handbook → Cracking the Coding Interview → LeetCode / Codility → How To Interview As a Developer Candidate → Ten Rules for Negotiating a Job Offer.
- Bases de la sécurité : OWASP Top 10 → Portswigger Academy → Hashing, Encryption and Encoding → Cryptographic Right Answers → Rolling Your Own Crypto (pourquoi ne pas le faire).
Catalogue
Introduction
- Map of Computer Science (vidéo) — 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
Idées fausses
- Awesome Falsehoods (liste) — https://github.com/kdeldycke/awesome-falsehood — idées fausses que les programmeurs croient sur les chaînes, adresses, noms, nombres, emails, fuseaux horaires, dates et plus.
Algorithmes
- Big O Cheatsheet (site) — http://bigocheatsheet.com/
- Computer Science Distilled (livre) — https://www.goodreads.com/book/show/34189798-computer-science-distilled
- Grokking Algorithms (livre) — https://www.goodreads.com/book/show/22847284-grokking-algorithms-an-illustrated-guide-for-programmers-and-other-curio
- Introduction to Algorithms (livre) — 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/
Structures de données
- Hello Algo (livre) — https://www.hello-algo.com/en/chapter_preface/about_the_book/
- UC Berkeley Data Structures Course (vidéo/cours) — https://sp19.datastructur.es/
- Foundations of Data Structures, edX (cours) — https://www.edx.org/course/foundations-data-structures-iitbombayx-cs213-1x-0
- Data Structures, Coursera (cours) — https://www.coursera.org/learn/data-structures
- Mathematics for Computer Science, Eric Lehman et al. (livre, PDF) — https://people.csail.mit.edu/meyer/mcs.pdf
Nombres
- How to Count (livre) — 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/
Chaînes
- Unicode and Character Sets, Joel Spolsky (article) — https://www.joelonsoftware.com/articles/Unicode.html
- Homoglyphs (outil) — https://github.com/codebox/homoglyph/
- Unicode Common Locale Data Repository (site) — http://cldr.unicode.org/
- ASCII (vidéo) — https://www.youtube.com/watch?v=B1Sf1IhA0j4
- UTF-8 (vidéo) — https://www.youtube.com/watch?v=vLBtrd9Ar28
Latence
- 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
Temps
- Some Notes About Time (article) — https://unix4lyfe.org/time/
- The Problem with Timezones (vidéo) — https://www.youtube.com/watch?v=-5wpm-gesOY
Mémoire
- What Every Programmer Should Know About Memory, Ulrich Drepper (série d'articles) — https://lwn.net/Articles/250967/ — PDF complet : https://akkadia.org/drepper/cpumemory.pdf
Systèmes distribués
- Understanding Distributed Systems (livre) — https://www.goodreads.com/book/show/56977420-understanding-distributed-systems
- Designing Data-Intensive Applications (livre) — https://www.goodreads.com/book/show/23463279-designing-data-intensive-applications
- Designs, Lessons and Advice from Building Large Distributed Systems, Jeff Dean (article/diapositives) — 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 (article) — 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: comment les bases de données se comportent en cas de partition (articles) — https://aphyr.com/tags/jepsen
- Fallacies of Distributed Computing Explained (article) — https://pages.cs.wisc.edu/~zuyu/files/fallacies.pdf
Apprentissage automatique
- Andrew Ng Machine Learning Specialization (cours) — https://www.coursera.org/specializations/machine-learning-introduction
Expressions régulières
- RegexHQ (site) — https://github.com/regexhq
- Learn Regex the Easy Way (tutoriel) — https://github.com/ziishaned/learn-regex
- Regex Crossword (jeu) — https://regexcrossword.com/
Sécurité
- Secure Programming HOWTO, David Wheeler (livre) — 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 (livre) — https://www.goodreads.com/book/show/128003.Foundations_of_Security
- OWASP Top 10 (référence) — https://owasp.org/www-project-top-ten — la liste standard des vulnérabilités des applications web.
- PortSwigger Web Security Academy (laboratoires) — https://portswigger.net — laboratoires pratiques de sécurité web.
- Web Application Exploits and Defenses, Google Gruyere (laboratoires) — https://google-gruyere.appspot.com/part1
- Hashing, Encryption and Encoding (article) — https://www.integralist.co.uk/posts/hashing-and-encryption/
UX / Utilisabilité
- Don't Make Me Think (livre) — https://www.goodreads.com/book/show/18197267-don-t-make-me-think-revisited
- Inventing on Principle, Bret Victor (vidéo) — 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 (article) — https://web.cs.wpi.edu/~cs562/s98/pdf/Boxology.pdf
- Out of the Tar Pit (article) — https://github.com/papers-we-love/papers-we-love/blob/master/design/out-of-the-tar-pit.pdf
- No Silver Bullet, Fred Brooks (article) — http://www.cs.unc.edu/techreports/86-020.pdf
- Growing a Language, Guy Steele (vidéo) — https://www.youtube.com/watch?v=_ahvzDzKdB0
- CQRS and Event Sourcing (vidéo) — https://www.youtube.com/watch?v=JHGkaShoyNs
- Practical Object-Oriented Design in Ruby (livre) — https://www.poodr.com/
- Evolutionary Software Architectures (vidéo) — https://www.youtube.com/watch?v=CglSFhwbI3s
- System Design Primer (guide) — https://github.com/donnemartin/system-design-primer
- How JavaScript Works, parties 1-4 (articles) — https://medium.com/sessionstack-blog/how-does-javascript-actually-work-part-1-b0bacc073cf
- Entity-Component-System Architecture with Unity by Example (vidéo) — https://www.youtube.com/watch?v=lNTaC-JWmdI
Conception de code
- Programming Principles Wiki (site) — http://www.principles-wiki.net/
Philosophie de l'ingénierie
- Category Theory in Life (vidéo) — https://www.youtube.com/watch?v=ho7oagHeqNc
- Simple Made Easy, Rich Hickey (vidéo) — https://www.infoq.com/presentations/Simple-Made-Easy
- Speed in Software Development (article) — https://www.targetprocess.com/articles/speed-in-software-development/
- #NoEstimates (vidéo) — https://www.youtube.com/watch?v=QVBlnCTu9Ms
- The Myth of the Genius Programmer (vidéo) — https://www.youtube.com/watch?v=0SARbwvhupQ
- Making Badass Developers, Kathy Sierra (vidéo) — 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 (vidéo) — 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 (vidéo) — https://www.youtube.com/watch?v=8bZh5LMaSmE
- Teach Yourself Programming in Ten Years, Peter Norvig (article) — https://norvig.com/21-days.html
Pratiques
- Working Effectively with Legacy Code (livre) — https://www.goodreads.com/book/show/44919.Working_Effectively_with_Legacy_Code
- The Art of Readable Code (livre) — https://www.goodreads.com/book/show/8677004-the-art-of-readable-code
- Code Complete (livre) — https://www.goodreads.com/book/show/4845.Code_Complete
- Clean Code (livre) — https://www.goodreads.com/book/show/3735293-clean-code
- Test Driven Development: By Example (livre) — https://www.goodreads.com/book/show/387190.Test_Driven_Development
- Going To Production Checklist (liste de contrôle) — https://github.com/mr-mig/going-to-production
- Release It! (livre) — https://www.goodreads.com/book/show/1069827.Release_It_
- Professor Frisby's Mostly Adequate Guide to Functional Programming (livre) — https://mostly-adequate.gitbook.io/mostly-adequate-guide/
- SICP: Structure and Interpretation of Computer Programs (livre) — 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 (article) — https://www.info.ucl.ac.be/~pvr/VanRoyChapter.pdf
- Learn X in Y Minutes (site) — https://learnxinyminutes.com/ — bases condensées d'un langage.
- Hyperpolyglot (site) — http://hyperpolyglot.org/ — comparaison côte à côte des fonctionnalités de langages similaires.
- Pomodoro for Programmers (article) — https://medium.com/@mr_mig_by/pomodoro-for-programmers-d6568dd1e6fc
- Site Reliability Engineering, Google (livre, gratuit en ligne) — https://sre.google/sre-book/table-of-contents/
Carrière
- Levels.fyi (site) — https://www.levels.fyi — données salariales des entreprises technologiques.
- 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 (diapositives) — https://slides.com/mr-mig/se101
- The Passionate Programmer (livre) — https://www.goodreads.com/book/show/6399113-the-passionate-programmer
- Soft Skills: The Software Developer's Life Manual (livre) — https://www.goodreads.com/book/show/23232941-soft-skills
- The Complete Software Developer's Career Guide (livre) — https://www.goodreads.com/book/show/35674293-the-complete-software-developer-s-career-guide
- Programming Beyond Practices (livre) — 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 (article) — http://vlsicad.ucsd.edu/Research/Advice/star_engineer.pdf
- TL;DR Stock Option ... (tronqué)