🗃️ Resources

Programming Languages

Javascript

I highly recommend learning JS from javascript.info. It's like the missing documentation to the language. The official documentaion is good enough for getting started with Typescript.

Python

The official tutorial is good enough. Head First Python is good too. Just write a lot of code.

C & C++

Although learning C is not a prerequisite to learning C++, I recommened you learn C first anyway. The folllowing are excellent books for getting started with C.

For C++, learncpp.com provides excellent tutorials.

Rust

I learnt Rust (and still learn, when needed) from Brown University's fork of the official Rust book. I also encourage you to checkout this youtube playlist by the channel 300 seconds of Rust.

This is a excellent article on error handling in Rust.

Go

I love Go. I learnt Go from A Tour of Go. I refer to Go by Examples whenever necessary.

Java

Head First Java is a good introduction to the language. Perhaps you'll also need to go through Head First Design Patterns, which uses Java.

x86 Assembly

I had picked up Assembly Language for x86 Processors by Kip R. Irvine from my university library in 2022 and I think it taught me quite a bit of assembly in a weekend.

Computer Architecture

I think these two books work as excellent introduction to the subject:

Prof. Onur Mutlu's YouTube channel is a treaure trove of extremely good CompArch lectures, including the cutting-edge stuff.

Memory Managenent

Read the paper What Every Programmer Should Know About Memory by U. Drepper.

I've found this Youtube Lecture Series by Prof. Black-Schaffer to be extremely helpful for learning how virtual memory works.

These videos by David Tarnoff are great for learning about cache memory and data alignment.

Operating Systems

My personal favourite is the book Operating System Concepts by Silberschatz, Gagne & Galvin.

I've heard good things about the Operating System: Three Easy Pieces book too.

I also finished the Fundamentals of Operating Systems course by Huussein Nasser and would definitely recommend it.

Compilers

Although the dragon book is the standard when it comes to compiler design, I'd recommend against jumping on it first.

Instead, pick up Crafting Interpreters by Robert Nystrom to get a first-hand experience of how interpreters are built in the real world. You can look into Writing an Interpreter in Go or Writing a Compiler in Go too. Both are written by Throsten Ball.

Databases

I got my introduction to databases from the standard text Fundamentals of Database Systems by Elmasri & Navathe. It provides a good mathematical grounding for further, more practical explorations into the field.

Brian Holt has nice courses on databases & SQL.

Hussein Nasser's course Fundamentals of Database Engineering is more than excellent for getting your feet wet into the nitty-gritties of the field.

Discrete Mathematics

Discrete Mathematics & Its Application by Kenneth Rosen probably has everything you'll ever need. I actually read Essentials of Discrete Mathematics by David Hunter and found it more accessible than the Rosen book.

Calculus

A working knowledge of Calculus is essential for machine learning and some branches of theoretical computer science. I'd highly recommend going through Calculus: Concepts & Contexts by Stewart & Kokoska. It covers vector calculus along with all the necessary prerequisites.

Grant Sanderson's Essence of Calculus playlist is a must-watch.

Linear Algebra

Some say ML & AI is just glorified Linear Algebra. Just like thousands others, I also got started with Introduction to Linear Algebra by Gilbert Strang. You can also read the Manga Guide to Linear Algebra if you're a weeb.

Grant Sanderson's Linear Algebra playlist is a must-watch. You can also watch Gilbert Strang's MIT lectures (and can download them using my tool ocwds).

Probability & Statistics

Introduction to Probability for Data Science by Stanley Chan is the single best book I've ever read on the subject.

I read Head First Statistics and I think it provides a good overview of the subject.

I also read Statistics for People Who Think They Hate Statistics in R while taking a Data Science course from IIT Madras.

Developer Tools & Utilities

ThePrimeagen's Everything You'll Need to Know About Git is a pretty good Git tutorial. If you're looking for more advanced stuff, you should probably head to learngitbranching.

Brian Holt's Complete Intro to Containers v2 is a great place to start learning about containers & Docker.

AWS Certifications

I got my AWS Certified Cloud Practitioner Certification (yeah, that's a mouthful) by bingeing Neal Davis's Udemy course in 6 days. He's really good at explaining stuff.

I also made my notes public.

Deep Learning

I'm still in the process of teaching myself DL. These were the steps I took and I think are good enough to get a good understanding of the fundamentals of the subject. I assume, you know the basics of Probability & Stats and Calculus.

  1. 1. Hands-On Machine Learning by Aurélien Géron
  2. 2. Neural Nets Zero-To-Hero by Andrej Karpathy
  3. 3. Intro to Deep Learning and Generative Models by Sebastian Raschka

© Aniruddha Mukherjee 2024