Denk wie ein Programmierer
Ein kuratierter Katalog mit (größtenteils) technischen Ressourcen, die jeder Softwareentwickler kennen sollte, unabhängig von Erfahrungsstufe oder Technologie-Stack. Basierend auf der Community-Liste unter https://github.com/mtdvio/every-programmer-should-know von Alexey Migutsky und Mitwirkenden, lizenziert unter CC BY 4.0. Das Original ist offen "hochgradig meinungsbasiert, nicht wissenschaftlich untermauert" und in keiner bestimmten Reihenfolge.
Wann verwenden
- "Was sollte ich als Nächstes lernen / was sollte jeder Entwickler über X wissen?"
- Anfragen nach einem Buch, Vortrag, Fachartikel, Kurs oder Artikel zu einem grundlegenden Thema.
- Erklären eines Konzepts (Fließkommazahlen, Zeitzonen, Unicode, Speicher, CAP/verteilte Uhren, Kryptographie) und Verweisen auf die kanonische Lektüre.
- Karrierefragen: Vorstellungsgespräche, Verhandlung von Angeboten, Aktienoptionen, Remote-Arbeit, Lebenslauf.
- "Wo kann ich programmieren üben / mich auf Vorstellungsgespräche vorbereiten?"
Wie verwenden
- Ordnen Sie die Frage einem oder mehreren Abschnitten des Katalogs unten zu.
- Empfehlen Sie 2–4 Ressourcen, nicht den gesamten Abschnitt. Geben Sie für jede einen Satz an, warum sie passt, und ihr Format (Buch / Video / Artikel / Fachartikel / Kurs / Website).
- Passen Sie das Niveau an: Anfänger erhalten zuerst visuelle oder sanfte Ressourcen (Grokking Algorithms, Hello Algo, Learn X in Y Minutes); erfahrene Entwickler erhalten tiefgehendes oder klassisches Material (Introduction to Algorithms, DDIA, Lamport, Out of the Tar Pit).
- Wenn das Thema nicht im Katalog enthalten ist, sagen Sie dies klar und antworten Sie aus Ihrem Allgemeinwissen; erzwingen Sie keinen unpassenden Link.
- Einige Links sind alt und könnten verschoben oder tot sein. Wenn Webzugriff verfügbar ist und ein Link wichtig ist, überprüfen Sie ihn, bevor Sie sich darauf verlassen; erwähnen Sie andernfalls, dass der Link veraltet sein könnte.
- Antworten Sie in der Sprache des Benutzers; behalten Sie Ressourcentitel in ihrer Originalform.
- Erinnern Sie die Leute bei Bedarf daran, dass niemand das alles auswendig können muss – es ist eine Landkarte, keine Checkliste.
Vorgeschlagene Pfade (Kombinationen aus dem Katalog)
- Neuling in der Informatik: Map of Computer Science → Computer Science Roadmap → Grokking Algorithms → Big O Cheatsheet → Floating Point Guide → Unicode and Character Sets.
- Backend / verteilte Systeme: Latency Numbers → Understanding Distributed Systems → Designing Data-Intensive Applications → Fallacies of Distributed Computing → Time, Clocks and the Ordering of Events → Jepsen.
- Besseren Code schreiben: The Art of Readable Code → Clean Code / Code Complete → Working Effectively with Legacy Code → Out of the Tar Pit → Simple Made Easy.
- Vorbereitung auf Vorstellungsgespräche: Tech Interview Handbook → Cracking the Coding Interview → LeetCode / Codility → How To Interview As a Developer Candidate → Ten Rules for Negotiating a Job Offer.
- Sicherheitsgrundlagen: OWASP Top 10 → Portswigger Academy → Hashing, Encryption and Encoding → Cryptographic Right Answers → Rolling Your Own Crypto (warum nicht).
Katalog
Einleitung
- Map of Computer Science (Video) — https://www.youtube.com/watch?v=SzJ46YA_RaA
- 40 Key Computer Science Concepts Explained in Layman's Terms (Artikel) — http://carlcheo.com/compsci
- Computer Science Roadmap (Artikel) — https://roadmap.sh/computer-science
- Community-driven Roadmaps for Developers (Website) — https://github.com/kamranahmedse/developer-roadmap
Irrtümer
- Awesome Falsehoods (Liste) — https://github.com/kdeldycke/awesome-falsehoods — Irrtümer, an die Programmierer über Zeichenketten, Adressen, Namen, Zahlen, E-Mails, Zeitzonen, Daten und mehr glauben.
Algorithmen
- Big O Cheatsheet (Website) — http://bigocheatsheet.com/
- Computer Science Distilled (Buch) — https://www.goodreads.com/book/show/34189798-computer-science-distilled
- Grokking Algorithms (Buch) — https://www.goodreads.com/book/show/22847284-grokking-algorithms-an-illustrated-guide-for-programmers-and-other-curio
- Introduction to Algorithms (Buch) — https://www.goodreads.com/book/show/108986.Introduction_to_Algorithms
- Algorithms Visualization (Website) — https://www.cs.usfca.edu/~galles/visualization/Algorithms.html
- Algorithms for Competitive Programming (Website) — https://cp-algorithms.com/
Datenstrukturen
- Hello Algo (Buch) — https://www.hello-algo.com/en/chapter_preface/about_the_book/
- UC Berkeley Data Structures Course (Video/Kurs) — https://sp19.datastructur.es/
- Foundations of Data Structures, edX (Kurs) — https://www.edx.org/course/foundations-data-structures-iitbombayx-cs213-1x-0
- Data Structures, Coursera (Kurs) — https://www.coursera.org/learn/data-structures
- Mathematics for Computer Science, Eric Lehman et al. (Buch, PDF) — https://people.csail.mit.edu/meyer/mcs.pdf
Zahlen
- How to Count (Buch) — https://www.goodreads.com/book/show/12093869-how-to-count
- Floating Point Guide (Artikel) — http://floating-point-gui.de/
- What Every Computer Scientist Should Know About Floating-Point Arithmetic (Artikel) — https://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html
- Basic Number Theory Every Programmer Should Know (Artikel) — https://www.codechef.com/wiki/tutorial-number-theory/
Zeichenketten
- Unicode and Character Sets, Joel Spolsky (Artikel) — https://www.joelonsoftware.com/articles/Unicode.html
- Homoglyphs (Werkzeug) — https://github.com/codebox/homoglyph/
- Unicode Common Locale Data Repository (Website) — http://cldr.unicode.org/
- ASCII (Video) — https://www.youtube.com/watch?v=B1Sf1IhA0j4
- UTF-8 (Video) — https://www.youtube.com/watch?v=vLBtrd9Ar28
Latenz
- Interactive Latency Infographics (Website) — https://people.eecs.berkeley.edu/~rcs/research/interactive_latency.html
- Latency Numbers Every Programmer Should Know (Artikel) — https://gist.github.com/jboner/2841832
Zeit
- Some Notes About Time (Artikel) — https://unix4lyfe.org/time/
- The Problem with Timezones (Video) — https://www.youtube.com/watch?v=-5wpm-gesOY
Speicher
- What Every Programmer Should Know About Memory, Ulrich Drepper (Artikelserie) — https://lwn.net/Articles/250967/ — vollständiges PDF: https://akkadia.org/drepper/cpumemory.pdf
Verteilte Systeme
- Understanding Distributed Systems (Buch) — https://www.goodreads.com/book/show/56977420-understanding-distributed-systems
- Designing Data-Intensive Applications (Buch) — https://www.goodreads.com/book/show/23463279-designing-data-intensive-applications
- Designs, Lessons and Advice from Building Large Distributed Systems, Jeff Dean (Fachartikel/Folien) — 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 (Fachartikel) — https://www.microsoft.com/en-us/research/publication/time-clocks-ordering-events-distributed-system/
- There Is No Now (Artikel) — https://queue.acm.org/detail.cfm?id=2745385
- Jepsen: how databases behave under partition (Artikel) — https://aphyr.com/tags/jepsen
- Fallacies of Distributed Computing Explained (Fachartikel) — https://pages.cs.wisc.edu/~zuyu/files/fallacies.pdf
Maschinelles Lernen
- Andrew Ng Machine Learning Specialization (Kurs) — https://www.coursera.org/specializations/machine-learning-introduction
RegExp
- RegexHQ (Website) — https://github.com/regexhq
- Learn Regex the Easy Way (Tutorial) — https://github.com/ziishaned/learn-regex
- Regex Crossword (Spiel) — https://regexcrossword.com/
Sicherheit
- Secure Programming HOWTO, David Wheeler (Buch) — https://www.dwheeler.com/secure-programs/
- Rolling Your Own Crypto (Artikel) — http://loup-vaillant.fr/articles/rolling-your-own-crypto
- Cryptographic Right Answers (Artikel) — https://gist.github.com/tqbf/be58d2d39690c3b366ad
- An Open Letter to Developers Everywhere (About Cryptography) (Artikel) — https://gist.github.com/paragonie-scott/e9319254c8ecbad4f227
- Foundations of Security: What Every Programmer Needs to Know (Buch) — https://www.goodreads.com/book/show/128003.Foundations_of_Security
- OWASP Top 10 (Referenz) — https://owasp.org/www-project-top-ten — die Standardliste der Webanwendungssicherheitslücken.
- PortSwigger Web Security Academy (Übungen) — https://portswigger.net — praktische Web-Sicherheitsübungen.
- Web Application Exploits and Defenses, Google Gruyere (Übungen) — https://google-gruyere.appspot.com/part1
- Hashing, Encryption and Encoding (Artikel) — https://www.integralist.co.uk/posts/hashing-and-encryption/
UX / Benutzerfreundlichkeit
- Don't Make Me Think (Buch) — 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 (Artikel) — https://katemats.com/blog/what-every-programmer-should-know-about-seo
Architektur
- A Field Guide to Boxology (Fachartikel) — https://web.cs.wpi.edu/~cs562/s98/pdf/Boxology.pdf
- Out of the Tar Pit (Fachartikel) — https://github.com/papers-we-love/papers-we-love/blob/master/design/out-of-the-tar-pit.pdf
- No Silver Bullet, Fred Brooks (Fachartikel) — 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 (Buch) — https://www.poodr.com/
- Evolutionary Software Architectures (Video) — https://www.youtube.com/watch?v=CglSFhwbI3s
- System Design Primer (Leitfaden) — https://github.com/donnemartin/system-design-primer
- How JavaScript Works, parts 1-4 (Artikel) — 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 (Website) — http://www.principles-wiki.net/
Ingenieursphilosophie
- 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 (Artikel) — 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 (Artikel) — https://www.zenprogrammer.org/en/10-rules-of-a-zen-programmer.html
- The Mythical 10x Programmer, antirez (Artikel) — http://antirez.com/news/112
- The Debugging Mindset (Artikel) — https://queue.acm.org/detail.cfm?id=3068754
- The Future of Programming, Bret Victor (Video) — http://worrydream.com/dbx/
- The Good Software Development Manifesto (Artikel) — 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 (Artikel) — https://norvig.com/21-days.html
Praktiken
- Working Effectively with Legacy Code (Buch) — https://www.goodreads.com/book/show/44919.Working_Effectively_with_Legacy_Code
- The Art of Readable Code (Buch) — https://www.goodreads.com/book/show/8677004-the-art-of-readable-code
- Code Complete (Buch) — https://www.goodreads.com/book/show/4845.Code_Complete
- Clean Code (Buch) — https://www.goodreads.com/book/show/3735293-clean-code
- Test Driven Development: By Example (Buch) — https://www.goodreads.com/book/show/387190.Test_Driven_Development
- Going To Production Checklist (Checkliste) — https://github.com/mr-mig/going-to-production
- Release It! (Buch) — https://www.goodreads.com/book/show/1069827.Release_It_
- Professor Frisby's Mostly Adequate Guide to Functional Programming (Buch) — https://mostly-adequate.gitbook.io/mostly-adequate-guide/
- SICP: Structure and Interpretation of Computer Programs (Buch) — https://www.goodreads.com/book/show/43713.Structure_and_Interpretation_of_Computer_Programs
- Thirteen Ways of Looking at a Turtle (Artikel) — https://fsharpforfunandprofit.com/posts/13-ways-of-looking-at-a-turtle-3/
- Programming Paradigms for Dummies, Peter Van Roy (Fachartikel) — https://www.info.ucl.ac.be/~pvr/VanRoyChapter.pdf
- Learn X in Y Minutes (Website) — https://learnxinyminutes.com/ — komprimierte Grundlagen einer Sprache.
- Hyperpolyglot (Website) — http://hyperpolyglot.org/ — Seitenvergleich von Funktionen ähnlicher Sprachen.
- Pomodoro for Programmers (Artikel) — https://medium.com/@mr_mig_by/pomodoro-for-programmers-d6568dd1e6fc
- Site Reliability Engineering, Google (Buch, kostenlos online) — https://sre.google/sre-book/table-of-contents/
Karriere
- Levels.fyi (Website) — https://www.levels.fyi — Gehaltsdaten von Technologieunternehmen.
- 10 Things Every Programmer Should Know for Their First Job (Artikel) — 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? (Artikel) — https://www.codementor.io/blog/best-cities-software-engineer-earnings-271vpf599k
- Software Engineering 101 (Folien) — https://slides.com/mr-mig/se101
- The Passionate Programmer (Buch) — https://www.goodreads.com/book/show/6399113-the-passionate-programmer
- Soft Skills: The Software Developer's Life Manual (Buch) — https://www.goodreads.com/book/show/23232941-soft-skills
- The Complete Software Developer's Career Guide (Buch) — https://www.goodreads.com/book/show/35674293-the-complete-software-developer-s-career-guide
- Programming Beyond Practices (Buch) — https://www.goodreads.com/book/show/29895093-programming-beyond-practices
- Ten Rules for Negotiating a Job Offer (Artikel) — https://medium.com/free-code-camp/ten-rules-for-negotiating-a-job-offer-ee17cccbdab6
- How To Interview As a Developer Candidate (Artikel) — https://medium.freecodecamp.com/how-to-interview-as-a-developer-candidate-b666734f12dd
- How To Get a Tech Job Abroad Faster (Artikel) — https://relocate.me/blog/job-relocation/landing-a-tech-job-abroad-7-simple-tips/
- How To Be a STAR Engineer (Fachartikel) — http://vlsicad.ucsd.edu/Research/Advice/star_engineer.pdf
- TL;DR Stock Option ... (gekürzt für die Übersetzung)