links

Programming Getting started

Readings

Teach Yourself Programming in Ten Years - Peter Norvig

Courses

CS50, Harvard
Introduction to Computer Science and Programming Using Python, MIT
CS51 - Abstraction and Design in Computation

Books

Structure and Interpretation of Computer Programs - Abelson, Sussman, and Sussman
Think python - Allen B. Downey

Theoritical CS

Courses

CSCI-E121: Introduction to Theoretical Computer Science
CS 152: Programming Languages
Great Ideas in Theoretical Computer Science

Books

Introduction to Theoretical Computer Science

Algorithms and data structures

Courses

MIT 6.006
Skiena's Algorithms
MIT 6.046

Books

Introduction to Algorithms, CLRS
Competitive Programmer's Handbook

Useful sites

awesome Competitive Programming
usaco.guide
cp-algorithms
bigocheatsheet

Competitions and practice

Leetcode
Codeforces
Atcoder
CSES
oj
Clist
a2oj
Grind75
takeuforward

Visualization

qiao.github.io
visualgo
Data Structure Visualizations

OS

Courses

John Kubiatowicz

Books

Operating Systems: Three Easy Pieces
The Design and Implementation of the 4.4BSD Operating System

Others

Writing an OS in Rust

DBMS

Courses

CS50’s Introduction to Databases with SQL

Redis

Docs
Redis-py

Networking

Courses

Tanenbaum, Wetherall Computer Networks 5e
Networks

Computation

Courses

Theory of Computation

Computer Architecture

Courses

[CS61C FA20] Lectures - Great Ideas in Computer Architecture | UC, Berkeley
Digital Design and Computer Architecture - Spring 2023

Compiler

Courses

StanfordOnline: Compilers

Data Mining

CS246: Mining Massive Data Sets
CS341: Project in Mining Massive Data Sets
Mining of Massive Datasets

Computer Graphics

Courses

Computer Graphics
6.837