I'm starting from zero and want to teach myself both hardware and software, along with several programming languages. A friend strongly recommended The Elements of Computing Systems by Noam Nisan and Shimon Schocken, but I'm unsure whether Seven Languages in Seven Weeks by Bruce A. Tate is equally useful for beginners. Should I start with these books, follow a different sequence, or use another curriculum?
3 Answers
Seven Languages in Seven Weeks is better viewed as a quick tour of different programming styles than as a fundamentals course. It can be interesting once you already know how to program, but switching languages and paradigms so quickly may be confusing when you’re brand new. Start with one beginner-friendly language and build small projects before using it.
The Elements of Computing Systems is a serious but excellent starting point if you want to understand how computers work from the ground up. It connects logic gates, hardware, assembly, virtual machines, compilers, and higher-level software, usually with practical projects. It takes commitment, but it gives you a strong overview of the entire stack.
A practical path would be to learn programming fundamentals in one language first—such as Python, JavaScript, or another language with beginner resources—then go deeper through projects. You can study hardware alongside that if it interests you, but don’t try to master several languages at once. Most self-taught programmers learn by combining books, documentation, exercises, and projects; a formal computer science degree isn’t required.

That sounds like the kind of hardware-to-software connection I’m looking for. I’ll probably start there and work through it steadily.