This list was originally presented at the Recurse Center’s weekly lightning technical talks, and is lovingly compiled for you with commentary by Ed on this page. Click here to learn more about our culture of learning generously.

👋 Intro from Ed:

I prefer reading to videos, so most of these are going to be text-heavy links. I also like REALLY long articles, or even books, to learn information. Sometimes they say things that I think can't be said effectively in shorter ways. Oh, and some of these are really old. I've read a lot of old (and new!) webpages and books about programming, and most of them I didn't personally think were that helpful to me. These are the ones that were, and are (mostly) freely available.

🧱 Fundamentals:

Algorithms, by Robert Sedgewick and Kevin Wayne:  https://algs4.cs.princeton.edu/home/

Knowing what algorithms are out there for common programming tasks will help you tackle those tasks better, and learning how those algorithms work will help you learn how to use (and occasionally implement) them, especially when you use algorithms in coding interviews. There are many good textbooks and other resources out there; I've read some, and this is my favorite. Many incomplete sections of the book are online at that link, so you can get some idea if you'll like it (and maybe learn a few things!)

What Color Is Your Function?: https://journal.stuffwithstuff.com/2015/02/01/what-color-is-your-function/

I sometimes find that programmers are fuzzy about what asynchronous programming is, how to use it appropriately, and what effects it has in practice. This blog post, by the wonderful author of Crafting Interpreters ( https://craftinginterpreters.com/ ) explains all that at length.

Rule Of Three (computer programming):  https://en.wikipedia.org/wiki/Rule_of_three_(computer_programming)

Of all the programming principles listed on Wikipedia ( https://en.wikipedia.org/wiki/Category:Programming_principles ), the principle I've found most consistently and practically useful is this one. I don't think it should be adhered to strictly -- now and then I've found that I need more than 3 examples to abstract something out properly -- but it's a great place to start.

Introduction To The A* Algorithm:  https://www.redblobgames.com/pathfinding/a-star/introduction.html

As someone who used to teach game AI, many resources on the web are half-baked and not so useful for learning. This page, which is about algorithms for pathfinding, is one of the resources that isn't, and there's a lot of great CS concepts that this page will teach you in an awesomely interactive way. (And if you like this, I recommend most of Amit Patel's explanations, which you can find at https://www.redblobgames.com/).

🔎 Resources for specific domains:

Learn SQL: https://dataschool.com/learn-sql/

The two programming languages that I feel have no good replacements in today's programming world are JavaScript, which is the language of the browser, and SQL, which is the most common language in databases. I feel that learning hands-on is best for programming, and there are tons of great hands-on resources out there for learning JavaScript, but less so for SQL in my experience. This is the best online interactive resource I've seen for learning SQL so far.

AWS In Plain English: https://expeditedsecurity.com/aws-in-plain-english

I'm always surprised at how hard it can be for me to understand which AWS service I need, or what a particular AWS service does. This page does a great job of explaining that.

Regular Expressions 101: https://regex101.com/

If you want to go ahead and give yourself two problems ( https://blog.codinghorror.com/regular-expressions-now-you-have-two-problems/ ), a graphical representation like this one for regular expressions has helped me many times (and saved me a lot of headaches in production!)

Learn You A Haskell For Great Good!: http://learnyouahaskell.com/