Fundamentals
Data Structures & Algorithms
- A Common-Sense Guide to Data Structures and Algorithms by Jay Wengrow - Great for building intuition
- Crafting Interpreters by Robert Nystrom - Learn by building a programming language
- LeetCode - Practice problems (focus on understanding, not grinding)
System Design
- Designing Data-Intensive Applications by Martin Kleppmann - The bible of distributed systems
- Software Engineering at Google by Titus Winters - How to build systems that last
- System Design Primer - Comprehensive overview
Languages & Frameworks
PHP / Laravel
- Official Laravel Documentation - Always start here
- Laracasts - Jeffrey Way's excellent video tutorials
- Laravel: Up & Running by Matt Stauffer
JavaScript / TypeScript
- You Don't Know JS by Kyle Simpson - Deep dive into JavaScript
- TypeScript Handbook
- React Documentation - New docs are excellent
Systems Programming
- The Rust Programming Language by Steve Klabnik & Carol Nichols
- A Tour of Go
- Code: The Hidden Language by Charles Petzold - How computers work from first principles
Career Development
- The Pragmatic Programmer by David Thomas & Andrew Hunt - Timeless advice
- Staff Engineer by Will Larson - For senior+ growth
- How to Get a Better Dev Job - My own guide
Recommended Practice
The best way to learn is to build things. Pick a project slightly above your current skill level and work through the problems. Reading is supplementary—doing is primary.
- Build a CLI tool - Learn file I/O, argument parsing, process management
- Build a REST API - Authentication, validation, database design
- Build a real-time app - WebSockets, state synchronization
- Contribute to open source - Read others' code, learn conventions