You want to learn how computers work
- "The Elements of Computing Systems: Building a Modern Computer from First Principles" by Noam Nisan, Shimon Schocken
- "Code: The Hidden Language of Computer Hardware and Software" by Charles Petzold
- "Computer Systems: A Programmer's Perspective" by Randal Bryant, David O'Hallaron
You want to learn how computers and programming languages intersect
- "Crafting Interpreters" by Robert Nystrom
- "Structure and Interpretation of Computer Programs"
- "An Introduction to Assembly Programming with RISC-V" by Edson Borin
You want to read the classics
- "The C Programming Language" by Dennis Ritchie, Brian Kernighan
- "The Art of Computer Programming", volumes 1 and 4B by Donald Knuth
- "A Discipline of Programming" by Edsger W. Dijkstra
- "Hackers Delight" by Henry S. Warren, Jr.
- "Optimizing Compilers for Modern Architectures" by Randy Allen, Ken Kennedy
You want to learn Math through your programmer's lens
- "A Programmer's Introduction to Mathematics" by Jeremy Kun
You want to program with GPUs
- "Programming Massively Parallel Processors: A Hands-on Approach" by David Kirk, Wen-mei Hwu
Tips
- Do the exercises! Don't just read.
- Learning to code is done by coding. Build terminal applications, build simple HTTP servers, build tools you might want to use. Nothing is too complicated.
- Study the fundamentals. Data structures, algorithms. Networking. How does memory work? What happens when you type google.com in your search bar?
- Look underneath software you use. A lot of software is open-source. Consume a lot of code. Be curious.
- If you have a specific career path and/or just want to enter the job market -- you can DM or @ me on X.