I'm second-career web developer (writing mostly Ruby) since 2022, meaning I didn't get a computer science degree. So this list is me catching up.
- Networking / the Web
- Hardware systems
- Operating systems
- Linux / command line
- Concurrency / distributed systems
- Database internals
- Compilers
- Math / logic
- Data structures and algorithms
- Software architecture
- Performance
- Low-level programming
- HTTP:
- Networking:
- High Performance Browser Networking
- Computer Networking : Principles,Protocols and Practice
- π²Computer Networking: A Top-Down Approach
- Jesse Storimer - Working with TCP Sockets.
- Beej's Guide to Network Programming
- Experiment with CDNs or reverse proxies (e.g. Nginx, Varnish, HAProxy, Cloudflare) to understand caching, TLS termination, load balancing, and security filtering (rate limiting, WAF, etc.).
- Security:
- π²Grokking Web Application Security and the free accompanying site Hacksplaining
- PortSwigger - web security exercises
- Browsers:
- π²Code: The Hidden Language of Computer Hardware and Software
- NandGame and solutions: 1, 2, 3
- From Nand to Tetris: Part 1, Part 2
- Circuit sandboxes:
- Dive into Systems
- What Every Programmer Should Know About Memory
- π²Digital Design and Computer Architecture
- π²Computer Systems: A Programmer's Perspective
- Linux Journey
- Sundeep Agarwal - Linux Command Line Computing
- The Linux Command Line
- The Art of Command Line
- Sundeep Agarwal - "Linux CLI and shell scripting" list
- Julia Evans - Your Linux Toolbox
- π²Efficient Linux at the Command Line
- π²How Linux Works
- π²Julia Evans - Bite Size zine pack
- π²Wicked Cool Shell Scripts
- π²Foundations of Scalable Systems
- Is Parallel Programming Hard, And, If So, What Can You Do About It?
- Distributed Systems
- On Transactional Concurrency Control
- Gossip Glomers (distibuted systems challenges)
- How does a relational database work?
- Architecture of a Database System
- π²Database Internals
- Transaction Processing
- Readings in Database Systems
- PGTune
- Postgres Playground
- Yeah, Postgres can do that
- Introduction to PostgreSQL Indexes
- The Internals of PostgreSQL
- PostgreSQL docs
- π²The Art of PostgreSQL
- π²PostgreSQL Query Optimization: The Ultimate Guide to Building Efficient Queries
- π²Build a Database Server
- π²Build Your Own Database From Scratch in Go
- Build Your Own Redis with C/C++
- Build Redis from scratch
- Destroy All Software - A Compiler from Scratch
- Writing a compiler in Ruby, bottom up and related resources at the bottom of that page
- Let's make a Teeny Tiny compiler
- Stanford: SOE-YCSCS1 Compilers
- π²Crafting Interpreters
- π²Build Your Own Compiler from Scratch
- π²Logic for Programmers
- π²Math for Programming
- π²Concrete Mathematics: A Foundation for Computer Science
- π²Coding The Matrix: Linear Algebra Through Computer Science Applications
- π²Data Structures and Algorithms in Java along with VisuAlgo
- Maybe this instead: π²A Common-Sense Guide to Data Structures and Algorithms
- Or: π²Algorithms Unlocked
- Codeintuition
- π²Practical Analysis of Algorithms
- π²The Algorithm Design Manual plus lecture videos
- π²Algorithm Design
- Maybe this instead: π²Algorithms
- Or: π²Introduction to Algorithms
- Tech Interview Handbook
- π²Beyond Cracking the Coding Interview (preview csolutions for free at interviewing.io)
- π²Elements of Programming Interviews
- Ruby solutions: 1, 2, 3, 4, 5
- Algorithms Ruby gem that is included in the LeetCode environment.
- NeetCode 250
- Grind75
- 14 Patterns to Ace Any Coding Interview Question
- 20 Essential Coding Patterns to Ace Your Next Coding Interview
- Coding Interview Patterns
- AlgoMonster - Patterns
- LeetCode Patterns
- π²Grokking the Coding Interview: Patterns for Coding Questions
- An interview algorithms tier list
- Another algorithms tier list
- Other resource lists: 1, 2, 3
- Fundamentals of Software Architecture
- The Architecture of Open Source Applications
- Hexagonal Architecture Explained
- Talks on vertical slice architecture: 1, 2
- Ziglings
- Zen of Zig
- zig.guide
- Learning Zig
- Introduction to Zig: a project-based book
- Zig Cookbook
- π²Systems Programming with Zig
- Working with Strings in Zig
- Karl Seguin's blog
- Starting FORTH or Easy Forth
- Thinking Forth
- Implementing a Forth
- Minimal FORTH interpreters: 1, 2
- Fitting a Forth in 512 bytes
- Design Decisions in the Forth Kernel
- Threaded Interpretive Languages: Their Design and Implementation
- Factor if I want to explore a "high-level FORTH"
- π²C Programming: A Modern Approach
- CS50 problem sets (1-5) and solutions: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
- Tutorial on pointers and arrays in C
- Exercism - C
- Advent of Code: CLI/runner written in C; I can't find any repos with solutions for all years, but probably there are repos with solutions for a specific year.
- Look into other "better C" languages besides Zig: Odin, Beef, V, Jai, C3, MiniLang, and others (minus the C++ replacements like Rust, which are too complex for my purposes)
- Handmade Hero videos plus Handmade Penguin to follow along in Linux
- Handmade Quake videos and source code
- Kohi Game Engine videos
- Make a game, taking inspiration from high_impact, raylib, Box2D 3.x (or see box2d-raylib)
- Or make a text-based game: see How to program a text adventure in C and Knuth's C port of Colossal Cave Adventure (which, incidentally, is an example of literate programming, now reincarnated in Entangled)
- Handmade Network