I'm starting from scratch and want to develop a broad, solid understanding of software—not just memorize the syntax of one programming language. What fundamentals should I study, which books or courses are worth using, and are there any people or resources worth following? I'd also appreciate advice on how to balance theory with building practical projects and learning how computers work underneath the software.
4 Answers
If your goal is understanding how computers work beneath programs, follow a different path: Nand2Tetris, Nandgame, an introductory computer science course such as CS50x, and eventually an assembly-language course. That route covers hardware, machine instructions, operating-system ideas, and higher-level software.
For software design fundamentals, look at the early lectures of Structure and Interpretation of Computer Programs. If that feels too advanced, How to Design Programs is a gentler introduction. These focus more on problem-solving and designing software than on memorizing language details.
Don’t worry about studying every subject in a perfect order; software is far too large for that. Learn a basic concept, use it in a project, then study whatever gap or confusing idea you encounter. That gives your learning context and keeps it practical.
A web-focused path could begin with HTML, CSS, and JavaScript, followed by small applications that solve simple problems. Once the basics feel comfortable, try a framework such as React. AI can help explain errors, quiz you, or suggest a learning roadmap, but avoid letting it write everything for you—you need to struggle with the code and understand each part.

That makes sense. I’ll use projects to give the theory a purpose instead of trying to memorize an entire curriculum first.