Some times you don't know where to start. Sometimes you just dont "get" it. We're flooded with information and resources, but we, the more experienced lot, all know which ones really made it sink for us.
This is a list of the best starting points that helped experienced people learn new things quickly, and those pivotal resources that made an "Aha!" moment.
NOTE: as such, this list is very carefully groomed, not all suggestions will be accepted, but we'll do our best
Guidelines for submitting a topic:
- It should be critically acclaimed.
- Prefer the original, timeless, resource over a derivative of it (such as a blog post).
- Prefer a derivative (such as an article, blog post, book) of the original when it really is known to explain the subject in a better way.
- Any form of a resources is good: Books, videos, courses, talks, and more.
- When in doubt, just submit a PR and we'll help find the best way to make it into the list.
Legend:
- 📌 - timeless
- 📖 - book
- ☕ - accessible, coffee time reading
- 🎓 - academic / heavy reading
- 🍍 - fresh, recent development
- 🔧 - makes you a pragmatic programmer
Many thanks to everyone on the contributor list :)
How to judge technology and develop a good gut feeling
- 📌 ☕ Five things we need to know about technological change - a classic, mind opening essay about technology and people.
- ☕ Beating the Averages - how programming languages are related to a mindset.
Understanding the almost-mechanical pieces on top of which we run our software
- 📌 Operating Systems: Three Easy Pieces - probably the most accessible book about operating systems. Don't have to read this cover to cover, just hunt out interesting bits you like.
It's an operating system, but also a mindset and a cult
- 📌 The Cathedral and the Bazaar - "get" open source.
Pure programming, problem solving, detached of specific technology
- 📖 📌 Programming Pearls - programming and problem solving.
- 📖 📌 🎓 SICP - Structure and Interpretation of Computer Programs. For some, hard read. However, pivotal for understanding abstraction and Scheme makes the perfect beginner FP language. If you have time, invest it. Otherwise, try finding gists of the ideas in this book such as here.
- 📖 🔧 📌 The Pragmatic Programmer - a classic on a pragmatic thinking for programmers. Was a pivotal part of driving a new era of thinking, tools, languages and platforms.
- ☕ better errors opens your mind to the idea of giving humans better compiler errors (as implemented in Elm, written by Elm's creator).
- 🎓 The LISP Paper 1960, this is where John McCarthy introduces LISP, and introduces the world to: recursion, naming variable with more than a single letter (as was done because of math), and if/else expressions. Later, non-functional languages would adopt it. Thanks, John!.
- ☕ Greg Young on Software - (video) a few observations about what makes a good or bad codebase, a good or bad design. Spoiler: it's the code size; sort of. Has many other good observation if you have not a lot of experience. Very repetitive, but good.
- ☕ 📌 Rob Pike's Notes on Programming in C - Really this could have been called "shit people knew in 89' that people today will keep rediscovering and fight about - but will never stop to realize they're really reinventing a flatter wheel".
- ☕ Design Stamina Hypothesis (Fowler) - The emerging pop computing trend challenges good design because people keep adopting buzzwords and slapping stack overflow code snippets onto production. This essay reminds us why good design is important and why it's so hard to justify good design or architecture in general.
- ☕ ID Software's 90's Programming Guidelines - (video) Amazingly relevant still, even today.
Functional, and functional-style programming
- 📖 🍍 Mostly Adequate Guide (to functional programming) - a great tutorial if you want to short-circuit years of wax-on wax-off to properly "get" FP. Start with this if you don't have FP background, or have some university clue, and progress to more heavy hitters such as Haskell, Lisp and so on.
- ☕ 🍍 FP Jargon and The Perfect API - pair the "Mostly Adequate Guide" with these, either while reading, or after finishing reading it, to bolt in place all of the FP magic. These will also serve as a good cheatsheet for later.
- ☕ Some History of Functional Programming Languages - Turner summarizes part of the history of FP languages. Good to skim and to get a feeling of the evolution.
- 📌 Introduction to Functional Programming - Wadler and Bird's classic. Many FP concepts first introduced here. Search on Google for more usable copies.
- 📌 What's a Transducer - A modern take on explaining transducers with Javascript (ES6), but read it any way because it intros map, filter, reduce and so on.
Design patterns in depth
- 📌 🎓 MVC, MVP - the original articles. MV-[wildcard] patterns will keep popping up, but you must understand their original context, and see that it was so different than what they are used for today.
How to treat data, and datastructures
- 🍍 ☕ Log structured merge trees - the data structure that powers a lot of recent big data products.
Servers, ops, and compute centers
- My (Rob's) Philosophy on Alerting - The orignal raw document that kickstarted this case study by Rob Ewaschuck. I prefer the raw original because it passes a sense of "There's no silver bullet" so I treat it as a discusion or knowledge sharing. Don't take it as the prescriptive way to go (and, of course, do read the Google SRE book, etc.)
High precision pointers into various programming languages
- Golang Notes - coverage of several subjects from a programmer's perspective, including a bit of internals.
Be a more effective engineer
- ☕ How to read a book in a week - this is good for some nonfiction books, but all academic papers.
- ☕ How to read an academic paper - changed the way I read papers and made me immediately more effective. Wish I had that when I was in university.
High precision pointers into various frameworks
- ☕ 🍍 React implementation notes and the guiding principles. They are simple to understand and well crafted. Read these even if you don't know what React is. If you're still not convinced, read their implementation principles, it felt like my 20 years of experience trying to build perfect APIs distilled into a small number of simple ideas.
Focusing on tools and practices
- 🔧 Learn X in Y Minutes - a highly effective website for polyglots, for refreshers, and the gist of many programming languages. Use this if you're already experienced with programming.
- 📌 ☕ Seven habits of effective text editing
- 🔧 Vim Bootstrap - a great
vimrc
generator with sane defaults. - ☕ A Good Vimrc - a soft and reasonable introduction to vim configuration that makes sense.
About your own self, mental modes, and more
- ☕ Summary of Super Human by Habit by Derek Sivers. Most of the points listed are great and some are so-so; you can get the gist of the ideas without reading the book.
Where to go from here?
You might want to discover things on your own. When you're done with this list, I'd recommend spending some time with these.
- papers we love - an amazing compilation of academic papers on many subject. Remember, there are probably papers that are missing from this repo out of copyright reasons.
- Microsoft research portal - Microsoft grabbed a lot of pioneers in computer science, there's plenty of great content there.
- Google research - same for Google.