/awesome-aha

Awesome list for "Aha!" moments related to programming and computer science. Accelerate your learning.

Awesome "Aha!"

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 :)

Technology

How to judge technology and develop a good gut feeling

Operating Systems

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.

Unix

It's an operating system, but also a mindset and a cult

General Programming

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 Programming

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.

Patterns

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.

Data

How to treat data, and datastructures

Ops

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.)

Programming Languages

High precision pointers into various programming languages

Go

  • Golang Notes - coverage of several subjects from a programmer's perspective, including a bit of internals.

Effectiveness

Be a more effective engineer

Frameworks

High precision pointers into various frameworks

React

Mechanics

Focusing on tools and practices

Programming Languages

  • 🔧 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.

Vim

You

About your own self, mental modes, and more

Habits and Learning

  • 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.

Next Steps

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.