Algorithmics by David Harel is not much mentioned anymore, but it's really good if you can find it. An easy and inviting read, it was written as a popular book not a textbook but nevertheless covers many topics with very thorough and clear explanations, and also touches on history and culture. I recall there were several versions with different titles - Algorithmics: The Soul of Computing was, I think, a cut-down version.
Seconding Petzold's Code for hardware and low-level programming. Also seconding Downey's Think Python (which has appeared in several versions with different titles). It is an easy read but is a bit deeper than many introduction to Python books.
Also seconding Wirth's Algorithms + Data Structures = Programs but it requires a lot more concentration and study than the previous suggestions. It is also old-fashioned, from the late 1970s I think, uses Pascal as its programming language. It teaches and celebrates a rigorous, economical programming method and coding style which is not much in vogue any more.
The Harel book is "Algorithmics: The Spirit of Computing", not "The Soul of Computing".
The book was actually originally just called "The Science of Computing" and published in 1987. The second edition in 1992 had the name changed to "Algorithmics: The Spirit of Computing". The third edition in 2004 kept that name and had Yishai Feldman added as coauthor. There was a 2012 reprinting of that which had a new preface written for it that talked about Turing (2012 was his centennial year).
I have the original 1987 edition. Comparing its contents to the third edition's via preview on Amazon, it looks like the first four parts are mostly the same topics.
The chapter on "Algorithms and Intelligence" had moved from the fourth section to a new fifth section and been renamed to "Algorithmics and Intelligence", and a new chapter, "Cryptography and Reliable Interaction" has been added to the fourth section.
Other new chapters, all in the fifth section are "Software Engineering" and "Reactive Systems".
The second edition, according to the preface in the 2012 printing, had little change from the first as far as the chapter content but added exercises and solutions.
From second to third chapter 3 changed from "Programming Languages" to "Programming Languages and Paradigms" and dropped APL and Snobol and added C, C++, and Java. Chapter 10 changed from "Parallelism and Concurrency" to "Parallelism, Concurrency, and Alternative Models" and added quantum computing and molecular computing.
I have the 3rd edition and have often wondered whether i should look at the earlier editions for some insights; maybe i should hunt down a cheap used copy to add to my collection.
Oops...it turns out I didn't quite get the early history right.
The first edition was in fact called "Algorithmics: The Spirit of Computing". The book I have, "The Science of Computing" is the trade edition [1] of that, published one year later.
The trade edition has "carefully modified to reflect the slightly less technical background of a typical reader". The structure and much of the text remained the same but some passages were rewritten and "several of the starred subsections that appeared in small font in the original edition have been eliminated". Those often contained proofs and other more mathematical things.
[1] an edition of a book intended for general distribution, as opposed to a text edition which is an edition of a book prepared for use especially in schools and colleges.
Your recommendations are right on the money and not just for noobs. This is the first i have seen Harel's book Algorithmics being mentioned on HN. More people should read this book; not sure why it is not that well known.
Just to add to your comment;
Students need to understand the distinction between Computing Science and Computer Science. Harel's Algorithmics explains the former while Petzold's Code explains the latter. Wirth's Algorithms + Data Structures = Programs marries the two.
Seconding Petzold's Code for hardware and low-level programming. Also seconding Downey's Think Python (which has appeared in several versions with different titles). It is an easy read but is a bit deeper than many introduction to Python books.
Also seconding Wirth's Algorithms + Data Structures = Programs but it requires a lot more concentration and study than the previous suggestions. It is also old-fashioned, from the late 1970s I think, uses Pascal as its programming language. It teaches and celebrates a rigorous, economical programming method and coding style which is not much in vogue any more.