I was always interested in ciphers and such as a kid so those two books got my attention when I found them in high school/college. I'm a bit fuzzy, now, about which one I was more interested in but both were good books. (I still have them, may give them a re-read next month.)
There are a few others I have in mind, but just can't recall the titles at the moment.
While I like Petzold's "Code", it's really aimed at nontechnical audiences. Jon Stokes' "Inside the Machine" or Nisan and Schocken's textbook "The Elements of Computing Systems" are far better if you have a technical background.
Code by Charles Petzold, The Elements of Computing (Nand2Tetris course book), No Starch Press's Secret Life of Programs, Learning Computer Architecture with Raspberry Pi
No disrespect to Petzold intended (I'm a huge fan of his technical works) but "Code" is at best at a pop-sci level. It prepares one for doing digital logic as well as "A Brief History Of Time" prepares one for doing coursework in cosmology.
Try the Brown book or Mano's "Digital Design" (my preference; took a while to remember his name) and see if it works for you. Good luck.
Code is a good motivator (and I need to buy a second copy, my copy was loaned out and then we both switched jobs, oops). A good follow-on is The Elements of Computing Systems (nand2tetris course) which starts with a more "hands-on" approach to the material in the second half of Code. "hands-on" because it's all via simulations and idealized components, but it's a good course and a motivated teen could work through it with some guidance or solo.
My tuppenceworth
Some high level language VB, C# or Java
then
the first half of Code by Charles Petzold
then
The elements of computing systems by Schocken and Nisan
followed by
the rest of Petzold's book
Another one that I have (but haven't had time to read yet) is Dreaming in Code: Two Dozen Programmers, Three Years, 4,732 Bugs, and One Quest for Transcendent Software by Scott Rosenberg. It might have something that your friend would find interesting.
Another one that may be inspirational, although it's more about personalities than computer science per-se, would be Steven Levy's Hackers: Heroes of the Computer Revolution.
For very foundational stuff, Charles Petzold has put out some great books.
His book Code is fantastic. He starts at simple battery and lightbulb circuits and builds and builds towards a simple CPU.
He also wrote The Annotated Turing which is a breakdown of Alan Turing seminal paper and you only need high school math to get through it.
When I was in school my favorite course was compiler design and we used Compilers: Principles, Techniques, and Tools (aka the dragon book). It’s one of the best textbooks I’ve used but that was 30 years ago. There might be something better now. Understanding parsers and lexers and (especially) state machines is something that will serve you well.
Three good books that try to introduce computer science to non-specialists from various angles:
* The Pattern on the Stone: The Simple Ideas That Make Computers Work by Danny Hillis
* D is for Digital: What a Well-Informed Person Should Know About Computers and Communications by Brian W. Kernighan (I think his Understanding the Digital World is probably a retitled newer edition of this book?)
* Code: The Hidden Language of Computer Hardware and Software by Charles Petzold
All three of these authors have had interesting and prominent careers in computing. None of these books are exactly on-point in terms of directly addressing careers, but all of them should help you understand more of the substance of what your daughter is working on and the context for other discussions you encounter.
I never formally studied CS, but I can strongly recommend Code by Charles Petzold.
If you want to learn how a computer does what it does at the absolute lowest levels, it's a great starting point. It's all written in laymans terms so it's good as a conceptual overview or for people without a strong math background. If you're interested in diving super deep into that kind of stuff I imagine it would be a great high level overview to anchor yourself.
+1 to Code (Petzold). I would absolutely start with that. One of my favorite books. The build a computer course from coursera (https://www.coursera.org/learn/build-a-computer) is the natural next step after reading code.
What book/resource would you suggest to budding teenagers who like solving problems and want to learn programming and computer science?
And they want to cover both depth and breadth of CS.
Thanks but I already know that book.
It's great yet I'm specifically interested in real code bc a book and real code is probably something very different... ;)
Code by Petzold (https://www.amazon.com/Code-Language-Computer-Hardware-Softw...) - non-technical (in the sense it isn't something to "work through"), covers a lot of interesting topics. Especially approachable for that age.
Elements of Computing Systems by Nisan & Schoken (https://www.amazon.com/Elements-Computing-Systems-second-Pri...) - more technical (has content to work through). I've read the first edition, not the second. Has a companion site: https://www.nand2tetris.org. It's well-written, and a motivated high schooler could work through it.
The Code Book by Singh (https://www.amazon.com/Code-Book-Science-Secrecy-Cryptograph...)
The Codebreakers by Kahn (https://www.amazon.com/Codebreakers-Comprehensive-History-Co...)
I was always interested in ciphers and such as a kid so those two books got my attention when I found them in high school/college. I'm a bit fuzzy, now, about which one I was more interested in but both were good books. (I still have them, may give them a re-read next month.)
There are a few others I have in mind, but just can't recall the titles at the moment.
reply