Answers.Body: <p>One book I'd recommend is C. Papadimitriou's <a href="https://en.wikipedia.org/wiki/Logicomix" rel="nofollow noreferrer">Logicomix</a>. It's a graphic novel introducing aspiring students to one of the great challenges in CS: undecidability, and how it came about in maths. CS is more than writing python or <span class="math-container">$\langle$</span>insert whatever language gets you a BS job these days<span class="math-container">$\rangle$</span>.</p>
  
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2023-02-08T09:37:19.713Z
Answers.Text: Funny you should say that because I just re-read this book a month ago and asked a question here https://skeptics.stackexchange.com/questions/54327/did-bertrand-russell-spend-360-pages-in-principia-mathematica-to-prove-1-1-2
Answers.UserDisplayName: Qiulang 邱朗
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2023-02-08T09:46:06.317Z
Answers.Text: I first read this book in 2011 according to my Goodreads record. lol
Answers.UserDisplayName: Qiulang 邱朗
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2023-02-08T09:29:57.180Z
Answers.LastActivityDate: 2023-02-08T09:29:57.180Z
Answers.UserDisplayName: Kai
Answers.Body: <p>The Innovators: How a Group of Hackers, Geniuses and Geeks Created the Digital Revolution by Walter Isaacson.
  Book Review:<a href="https://www.goodreads.com/book/show/21856367-the-innovators" rel="nofollow noreferrer">Read Review here</a>!</p>
  
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2023-01-06T19:32:12.577Z
Answers.LastActivityDate: 2023-01-06T19:32:12.577Z
Answers.UserDisplayName: Manoov
Answers.Body: <p>I have been searching my own answer for the past several months, now I have two books added to the list,</p>
  <ol>
  <li>&quot;<a href="https://code.energy/computer-science-distilled/" rel="nofollow noreferrer">computer science distilled</a>&quot;</li>
  <li>&quot;<a href="https://www.howcomputersreallywork.com/" rel="nofollow noreferrer">How Computers Really Work</a>&quot;, check here for its <a href="https://nostarch.com/how-computers-really-work" rel="nofollow noreferrer">table of contents</a></li>
  </ol>
  <p>The &quot;computer science distilled&quot; has only 181 pages so it is an easier read, while &quot;How Computers Really Work&quot; covers the basic concepts of OS, which is one of the things I was looking for. They are both an easy read for my targeted audiences, which is an important factor when I think about my recommendations.</p>
  <p>Both books cover the basic of digital circuits, so I had a brief discussion with <a href="https://cseducators.stackexchange.com/users/3524/bob-brown">Bob Brown</a> here <a href="https://cseducators.stackexchange.com/questions/3986/explaining-the-value-of-knowledge-of-digital-logic">Explaining the Value of Knowledge of Digital Logic</a> and found out he also wrote a free introductory book for the similar purpose <a href="https://professorbrown.net/concepts/" rel="nofollow noreferrer">here</a></p>
  
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2023-03-05T02:20:37.893Z
Answers.LastActivityDate: 2023-03-05T02:20:37.893Z
Answers.UserDisplayName: Qiulang 邱朗
Answers.Body: <p>In my experience, most professional software engineering books (Mythical Man-Month, Pragmatic Programmer, Clean Code, Code Complete) and college-level algorithms books (Sedgewick, Cormen, Skiena, Roughgarden, Kleinberg, Dasgupta, etc) are too heavy for high schoolers. Many of my graduate-level CS classmates weren't able to penetrate Cormen (1300+ pages!) and struggled with Dasgupta. Most of the business concerns and subtle design tradeoffs discussed in software engineering books aren't relevant to high school students because they're not in the industry and aren't designing, building or maintaining large-scale production applications or systems.</p>
  <p>High schoolers mostly want to have fun, make hands-on games and apps, work with robotics (LEGO Mindstorms, Arduino, Raspberry Pi) and explore the fundamentals and &quot;greatest hits&quot; of computing. There should be a balance between big, high-level concepts presented in a nutshell and plenty of relatively sandboxed hands-on projects that offer a strong fun-to-effort ratio. The goal for engagement is to reduce frustration and present content that feels relevant. Material should be challenging, but not overly so.</p>
  <p>In-depth advanced algorithm analysis, inner workings of operating systems (schedulers, memory models, etc) and deep tradeoffs in software engineering are out of scope. They'll learn about these things in their college and professional careers and on an as-needed basis.</p>
  <p>There's a good deal of tension teaching algorithms in general, because the topic is often seen as dry and impractical. Attitudes about algorithms have shifted over the past decade in their use in hiring, with potential transitive impacts on education. Algorithms aren't necessary for everyday professional software engineering work. There are high school level competitive programming teams througout the world focused on algorithms, but this is a select minority of students, not representative of a high school class curriculum.</p>
  <p>Given this context, I'd suggest one of a few approaches:</p>
  <ol>
  <li><p>Don't use a textbook at all and teach algorithms using online resources and practical problems. I'll admit I've generally only skimmed most of the 20+ textbooks I've been assigned throughout my computing education. I'm not sure they're necessary or relevant for most courses these days given the abundance of high-quality online options (assuming good curation). Consider <a href="https://www.khanacademy.org/computing/computer-science/algorithms" rel="nofollow noreferrer">Khan Academy</a> for starters.</p>
  </li>
  <li><p>Use an algorithms textbook, but pick something short, accessible and practical. I agree that it's a good idea to steer clear of books older than a decade or so and try to avoid C++ and functional languages (Racket, Scheme, Haskell) in favor of Python or JS. Choose one with simple explanations, more code and less math. Here are a couple suggestions:</p>
  <ul>
  <li>Algorithms for Dummies (mentioned in the comments). This book is well-written, easy to understand and focuses on real-world concerns. For topics that are difficult or theoretical, the author sticks to big takeaways and fostering an appreciation for the impact the algorithms have had on software.</li>
  <li>Grokking Algorithms (mentioned in the original post). This book has fun illustrations, presents the material with a light, accessible tone and sticks to core topics, avoiding esoteric college-level concepts like B-trees, FFT, NP-Complete reductions, Master Theorem and so on.</li>
  </ul>
  <p>Both books use Python.</p>
  </li>
  <li><p>If your curriculum permits it, sneak algorithms in the back door via games. I like <a href="https://inventwithpython.com/invent4thed/" rel="nofollow noreferrer">Invent Your Own Computer Games with Python</a> (and just about anything by Al Sweigart), with the caveat that the algorithms it covers (such as simple game AI) might leave gaps if you're expecting a comprehensive understanding of algorithm fundamentals. On the flip side, it's fun and the algorithms will feel immediately relevant and applicable.</p>
  </li>
  </ol>
  <p>These books are either very affordable or available <a href="https://greenteapress.com/free_books.html" rel="nofollow noreferrer">for free</a> online.</p>
  <p>Sort of an aside, but while <a href="https://greenteapress.com/" rel="nofollow noreferrer">Green Tea Press</a> doesn't have a self-proclaimed algorithms book per se, it offers accessible books on a variety of adjacent subjects that teach algorithmic thinking and data structures. Check out Allen's <a href="https://greenteapress.com/wp/textbook-manifesto/" rel="nofollow noreferrer">textbook manifesto</a> while you're there.</p>
  <p><a href="https://www.csunplugged.org" rel="nofollow noreferrer">CS Unplugged</a> is also worth mentioning for the concept in spite of its grade-school audience. I like the idea of going hands-on and offline with algorithm instruction when possible, although I haven't battle tested this much in my own teaching. Algorithms are particularly amenable to worked examples on paper, teaching students how to simulate the computer executing the algorithm step-by-step, think through the program flow and develop test cases to discover bugs.</p>
  
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2022-09-17T05:04:37.193Z
Answers.Text: You mentioned quite some materials I don't know, thanks. I highly agree with words "The result is a 1000-page book with no personality."  When I find "JavaScript The Definitive Guide" has 700 pages, my first reaction is WTF ?! A question, you said "Attitudes about algorithms have shifted over the past decade in their use in hiring, with potential transitive impacts on education."  Can you further elaborate that ?
Answers.UserDisplayName: Qiulang 邱朗
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2022-09-17T05:30:12.753Z
Answers.Text: Algorithm-based programming interviews have come under fire in recent years (too many citations possible, maybe search for "are programming interviews broken"), so if fewer companies wind up using them, then the education system may eventually adjust as well to de-emphasize algorithms in the curriculum.
Answers.UserDisplayName: ggorlen
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2022-09-17T06:24:13.133Z
Answers.Text: Here in China I know many big tech companies still like to ask algorithm questions and I also heard this is the case for google.
Answers.UserDisplayName: Qiulang 邱朗
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2022-09-17T06:41:29.733Z
Answers.Text: Yeah, it's definitely still a thing, but possibly becoming less so. I'm speculating on the long run. Things tend to get more high-level over time. Assembly isn't taught as much as it used to be, for example. GPT-3, Copilot and so forth are a new high-level that will likely impact education eventually. Algorithms seem to be slowly drifting into the "not everybody needs to know this" category.
Answers.UserDisplayName: ggorlen
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2022-09-18T03:14:14.920Z
Answers.Text: I found Cormen answered a similar question on quora, "So, my answer is that I have no answer."(check my updated question). lol
Answers.UserDisplayName: Qiulang 邱朗
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2022-09-18T03:16:22.460Z
Answers.Text: I also found ["code"](https://www.amazon.com/Code-Language-Computer-Hardware-Software-ebook/dp/B0B123P5GV/ref=sr_1_1?crid=1XMC1BO0DJI9B&keywords=code&qid=1663470936&s=digital-text&sprefix=c%2Cdigital-text%2C810&sr=1-1) just published the 2nd edition. Have you read code ? Would you recommend it ?
Answers.UserDisplayName: Qiulang 邱朗
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2022-09-18T03:34:15.043Z
Answers.Text: I agree with Cormen on not using a textbook. Interesting that he doesn't recommend his own book, considered the bible of algorithms. I read about half of "Code" before I got pulled into other things (I have trouble finishing books). Fantastic book, but like Nand2Tetris, it deals with ultra-low level concepts that are certainly fascinating but don't pertain to day-to-day professional programming concerns. Aside from a comp architecture elective, one can get through CS college and a programming career without knowing much of anything about NAND gates.
Answers.UserDisplayName: ggorlen
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2022-09-19T02:20:59.873Z
Answers.Text: I found Alan Kay gave a similar comment about "Code" at quota [What are the best books to understand computer science concepts?](https://www.quora.com/What-are-the-best-books-to-understand-computer-science-concepts) "The Code book basically uses a very good approach for “principles” — I would take this path also — but I feel that it has way too many words and a few too many side trips for a starter book... Code violates this I think"
Answers.UserDisplayName: Qiulang 邱朗
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2022-10-24T02:50:17.193Z
Answers.Text: Hi I am reading [how computer really works](https://www.howcomputersreallywork.com/) and find it fits my bill. After I finish it I will try to provide an answer to my own question. Initially, I wanted to read [How Computers Work: The Evolution of Technology](https://www.amazon.com/How-Computers-Work-Evolution-Technology/dp/078974984X) but found its latest version was published in 2014 so I gave it up.
Answers.UserDisplayName: Qiulang 邱朗
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2022-10-24T02:58:17.783Z
Answers.Text: From the book title you can see I want to introduce some book to the highschoolers about "how computer works". lol That idea was formed partially through the discussion with you. I want a book about hardware, about OS, no need to go deep but give them these concepts.
Answers.UserDisplayName: Qiulang 邱朗
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2023-02-12T05:16:44.153Z
Answers.Text: Hi I found this serial https://www.youtube.com/playlist?list=PLzdnOPI1iJNcsRwJhvksEo1tJqjIqWbN-  too bad it only has an English version.
Answers.UserDisplayName: Qiulang 邱朗
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2023-02-15T11:50:26.130Z
Answers.Text: While I agree with the general sentiment expressed in this answer I object to "try to avoid C++ and functional languages (Racket, Scheme, Haskell) in favor of Python or JS". I believe that exposing your students to the broken and verbose nature of poorly designed languages is only ever going to cloud their appreciation of the beauty of algorithm design. So give them Haskell or Scheme but not what you had in mind.
Answers.UserDisplayName: Kai
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2023-02-15T16:35:00.140Z
Answers.Text: @Kai That seems unrealistic. Few use Haskell or Scheme outside of stodgy academic circles so it's a disservice to students to push them into that world by default. JS and Py are far more popular and practical in virtually every domain, including algorithms. Few online judge sites support Scheme/Haskell, they're not used in most job interviews (or many jobs) and the algo textbooks are usually too dense or antiquated for HS. Even the author of SICP and the cornerstone of Scheme at MIT [defended switching from Scheme to Python](https://youtu.be/cblhgNUoX9M?t=3579). BTW, I code Haskell as a hobby.
Answers.UserDisplayName: ggorlen
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2023-02-16T10:57:16.987Z
Answers.Text: Couldn't disagree more. The switch to Python is akin to giving up the fight for a better software industry. Poul-Henning Kamp wrote why [The Software Industry Is Still the Problem](https://cacm.acm.org/magazines/2022/6/261171-the-software-industry-is-still-the-problem/abstract). We as educators have the single biggest responsibility to lead rather than follow industry's poor example.
Answers.UserDisplayName: Kai
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2023-03-05T02:21:41.313Z
Answers.Text: Hi, 5 months later I have an answer and added 3 books to my recommendation list, I would like to see your opinions.
Answers.UserDisplayName: Qiulang 邱朗
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2022-09-16T17:49:40.360Z
Answers.LastActivityDate: 2022-09-16T23:28:01.633Z
Answers.LastEditDate: 2022-09-16T23:28:01.633Z
Answers.UserDisplayName: ggorlen
Answers.Body: <p>While not exactly a textbook, <em><strong>Code: The Hidden Language of Computer Hardware and Software</strong></em> is one of the most important and influential books in my early times, when I was a high-schooler.</p>
  <p>Getting a top-down view on how a computer works early on is highly beneficial to one's later detailed study of computer architecture. This book explains various components of a computer in simple terms, like binary and 2's complement representation of numbers, logic gates, storage and computation units, and assembles a primitive computer from the ground-up. It covers basic topics from courses like <em>Digital Circuit Design</em>, <em>Introduction to Computer Systems</em>, <em>Computer Science: A Programmer's Perspective</em>, and serves as a perfect entry point for those interested in learning CS.</p>
  
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2023-02-11T10:15:02.923Z
Answers.Text: I came here to post the exact same answer! It's an excellent grounding in how things actually work.
Answers.UserDisplayName: John Dallman
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2023-02-11T11:42:43.467Z
Answers.Text: I discussed with ggorlen about the book, maybe you can check our discussion in his answer.
Answers.UserDisplayName: Qiulang 邱朗
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2023-02-12T04:46:15.637Z
Answers.Text: Hi do you think it is important that high school students know what  a Digital Circuit is ?
Answers.UserDisplayName: Qiulang 邱朗
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2023-02-12T04:58:23.883Z
Answers.Text: @Qiulang邱朗 It's the foundation of integrated circuits, and getting an idea of it helps with studying computers.
Answers.UserDisplayName: iBug
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2023-02-11T07:21:57.563Z
Answers.LastActivityDate: 2023-02-11T07:21:57.563Z
Answers.UserDisplayName: iBug
Body: <p>I have some students who will major in CS next year. I have taught them some basic algorithms (sorting &amp; searching), e.g. check here <a href="https://cseducators.stackexchange.com/questions/7347/how-to-teach-algorithms-in-an-interactive-way/7515#7515">How to teach algorithms in an interactive way</a> &amp; <a href="https://cseducators.stackexchange.com/questions/7527/teaching-ideas-for-string-algorithm">Teaching ideas for string algorithm?</a>. I teach they to write some simple python scripts, e.g. <a href="https://cseducators.stackexchange.com/questions/6699/what-are-good-practical-labs-and-activities-for-loops">What are good, practical labs and activities for loops?</a> and <a href="https://cseducators.stackexchange.com/questions/6709/some-real-practical-example-to-teach-object-oriented-concepts-and-programming-i">Some real practical example to teach object-oriented concepts and programming (in python)</a></p>
  <p>I want to recommend some books for them (also asked by some students). So I do some research and find this article <a href="https://ebookfriendly.com/most-popular-college-books-us-infographics/the-most-popular-college-books-in-the-us-computer-science/" rel="nofollow noreferrer">the most frequently assigned computer science college books in US</a>. I don't know if their data is credible or not (I feel not). I really frown on this book list. I agree with  &quot;introduction to algorithms&quot; (although I prefer Sedgewick's &quot;Algorithms&quot;) but other books really are not that good. I would rather recommend &quot;Code Complete&quot;(or &quot;Clean Code&quot;) instead of some book for a specific programing language.</p>
  <p>My first question, how do you interpret this book list? I feel they are poor recommendation/assigned books for a mediocre college in China (I can say this with confidence as I am Chinese)</p>
  <p>My second question, what is your recommendation? The goal is to help them keep interested in CS. If the reading can help them better prepare for their undergraduate study that is a plus. When thinking about my recommendation I reread Paul Graham's &quot;Hackers &amp; Painters&quot;(he talked about his high school life in the book) but I found I didn't enjoy reading it this time. It feels old and outdated.</p>
  <p>The comment from &quot;njuffa&quot; mentioned &quot;Programming Pearls&quot;. There are couple of reasons I didn't consider &quot;Programming Pearls&quot;.</p>
  <ol>
  <li>I try to avoid c++. I believe c++ should not be kids' first or second language. As a matter of fact I will advice them learn c++ until they absolute must, say a job/project requires to use c++.</li>
  <li>If I remember correctly the book is mainly about algorithm, but then we already have enough books for algorithm, e.g. I would rather recommend &quot;<a href="https://rads.stackoverflow.com/amzn/click/com/1617292230" rel="nofollow noreferrer" rel="nofollow noreferrer">Grokking Algorithms: An Illustrated Guide for Programmers and Other Curious People</a>&quot; instead of a book in 1999.</li>
  <li>I normally don't recommend any &quot;old&quot; book for my students, (whether we should still read &quot;The Mythical Man-Month&quot; can be another topic) but this lead to my next point.</li>
  <li>&quot;The Pragmatic Programmer&quot; 1st version also published in 1999 but I see it has a 20th Anniversary Edition. I don't read this new edition. So if you read this new edition will you recommend it to undergraduate student ?</li>
  <li>I am thinking about recommending books about Operating Systems because they heard these terms iOS, watchOS, macOS all the time. But I can't find an easy one. Most books about Operating Systems are too thick and I believe they will study OS theory in college, so I just need some easy(interesting if possible) introduction material.</li>
  </ol>
  <p>BTW, I asked a related question here &quot;<a href="https://skeptics.stackexchange.com/questions/53799/do-the-most-popular-college-books-in-the-us-include-the-communist-manifesto">Do the most popular college books in the US include &quot;The Communist Manifesto&quot; &amp; &quot;The Republic&quot;?</a>&quot;</p>
  <p>--- update ---</p>
  <p>I found Cormen answered a similar question on quora <a href="https://www.quora.com/What-is-the-best-introduction-to-computer-science-books" rel="nofollow noreferrer">&quot;What is the best introduction to computer science books?</a>, to quote</p>
  <blockquote>
  <p>At Dartmouth, we do not assign a textbook in our introductory course.
  We use a set of lecture notes on the Web that Devin Balkcom, Hany
  Farid, and I have written over the years. So, my answer is that I have
  no answer.</p>
  </blockquote>
  <p>And Alan Kay answered this on quora <a href="https://www.quora.com/What-are-the-best-books-to-understand-computer-science-concepts" rel="nofollow noreferrer">&quot;What are the best books to understand computer science concepts?&quot;</a></p>
  <blockquote>
  <p>By far the best book for the general public — the one I always
  recommend — is “The Pattern on the Stone” by Danny Hillis.</p>
  </blockquote>
  <p>I never heard of &quot;The Pattern on the Stone&quot; and I find it is also an old book.</p>
  <p>So I guess I have asked a difficult question.</p>
  <p>--- update 2023.2.12---</p>
  <p>I find this serial <a href="https://www.youtube.com/playlist?list=PLzdnOPI1iJNcsRwJhvksEo1tJqjIqWbN-" rel="nofollow noreferrer">&quot;How Computer Works&quot;</a> by <a href="https://code.org/" rel="nofollow noreferrer">https://code.org/</a> is quite good. I have checked many videos there <a href="https://www.youtube.com/@codeorg" rel="nofollow noreferrer">https://www.youtube.com/@codeorg</a> and highly recommend them. It is a pity it only has an English version.</p>
  
Comments.ContentLicense: CC BY-SA 4.0
Comments.CreationDate: 2022-09-14T12:11:29.627Z
Comments.Text: In my exp. Cormen is indeed the most used in the US for algo classes in the upper/final undergraduate year(s). So, I'd agree with your 'ebookfriendly' source on that.
Comments.UserDisplayName: got trolled too much this week
Comments.ContentLicense: CC BY-SA 4.0
Comments.CreationDate: 2022-09-14T12:17:03.010Z
Comments.Text: I'd also agree that more intro prog courses use Java than C in the US nowadays. But the choice for a 1st Java books is rather (more) varied. TBH the 'ebookfriendly' with its per-state rather than per-subject tops is rather useless other than for edutainment purposes.
Comments.UserDisplayName: got trolled too much this week
Comments.ContentLicense: CC BY-SA 4.0
Comments.CreationDate: 2022-09-14T13:55:44.270Z
Comments.Text: But it was from OpenSyllabus, ebookfriendly just quoted the data. So the bottom line is OpenSyllabus's data credible ?
Comments.UserDisplayName: Qiulang 邱朗
Comments.ContentLicense: CC BY-SA 4.0
Comments.CreationDate: 2022-09-15T22:08:56.917Z
Comments.Text: Re 'I would rather recommend "Code Complete"' That's a great book for junior software engineers, but I don't see how it would be effective for students still learning CS basics (as it assumes some familiarity with the fundamentals of CS and software development). Have you looked at Bentley's "Programming Pearls"?
Comments.UserDisplayName: njuffa
Comments.ContentLicense: CC BY-SA 4.0
Comments.CreationDate: 2022-09-16T03:56:53.517Z
Comments.Text: @njuffa update my question can you take a look ?
Comments.UserDisplayName: Qiulang 邱朗
Comments.ContentLicense: CC BY-SA 4.0
Comments.CreationDate: 2022-09-16T04:53:30.227Z
Comments.Text: Have you see these lists https://github.com/jobream/ComputerScience-Books and https://github.com/EbookFoundation/free-programming-books ?
Comments.UserDisplayName: Rushi
Comments.ContentLicense: CC BY-SA 4.0
Comments.CreationDate: 2022-09-16T06:43:40.083Z
Comments.Text: @Rusi I don't know these lists but when I check them I find there are too many books there. Do you have any recommendation ? Actually I am thinking about recommending books about Operating Systems. But I can't find an easy one. Most books about Operating Systems are too thick and I believe they will study OS theory in college, so I just need easy(interesting if possible) introduction material.
Comments.UserDisplayName: Qiulang 邱朗
Comments.ContentLicense: CC BY-SA 4.0
Comments.CreationDate: 2022-09-16T12:33:52.050Z
Comments.Text: It seems to me your requirement is somewhat self-contradictory.  OS is inherently an advanced or at least second level course. OTOH you want to teach school children.  You can give children some vague ideas of OS. Or you can expose *user-level* practices of Linux or Windows etc. Eg how to use a shell; how to boot shutdown and onwards. The internal structure of an OS seems rather out of range at this point [At least thats what I think!]
Comments.UserDisplayName: Rushi
Comments.ContentLicense: CC BY-SA 4.0
Comments.CreationDate: 2022-09-16T12:44:33.080Z
Comments.Text: @Rusi you are probably right. It is just that they heard all these terms, iOS watchOS macOS window10 window11 and asked me several times what are they exactly
Comments.UserDisplayName: Qiulang 邱朗
Comments.ContentLicense: CC BY-SA 4.0
Comments.CreationDate: 2022-09-16T13:17:45.147Z
Comments.Text: O like there are bestsellers "for dummies" I guess one could cook up "for children". Its just that I'm not the one who knows about this . My impression is that children learn much more operationally than conceptually -- you just need to show them what they can do with these xyzOS systems
Comments.UserDisplayName: Rushi
Comments.ContentLicense: CC BY-SA 4.0
Comments.CreationDate: 2022-09-17T03:30:33.367Z
Comments.Text: The "for dummies" is definitely not for them, these are high schoolers with high self-esteem lol
Comments.UserDisplayName: Qiulang 邱朗
Tags: <self-learning><programming><secondary-education><undergraduate>
Title: Book recommendation for high school students who will major in CS?
ThreadText: # Book recommendation for high school students who will major in CS?
  
  (Asked by: username_0 on 2022-09-14)
  
  I have some students who will major in CS next year. I have taught them some basic algorithms (sorting & searching), e.g. check here [How to teach algorithms in an interactive way](https://cseducators.stackexchange.com/questions/7347/how-to-teach-algorithms-in-an-interactive-way/7515#7515) & [Teaching ideas for string algorithm?](https://cseducators.stackexchange.com/questions/7527/teaching-ideas-for-string-algorithm). I teach they to write some simple python scripts, e.g. [What are good, practical labs and activities for loops?](https://cseducators.stackexchange.com/questions/6699/what-are-good-practical-labs-and-activities-for-loops) and [Some real practical example to teach object-oriented concepts and programming (in python)](https://cseducators.stackexchange.com/questions/6709/some-real-practical-example-to-teach-object-oriented-concepts-and-programming-i)
  
  I want to recommend some books for them (also asked by some students). So I do some research and find this article [the most frequently assigned computer science college books in US](https://ebookfriendly.com/most-popular-college-books-us-infographics/the-most-popular-college-books-in-the-us-computer-science/). I don't know if their data is credible or not (I feel not). I really frown on this book list. I agree with "introduction to algorithms" (although I prefer Sedgewick's "Algorithms") but other books really are not that good. I would rather recommend "Code Complete"(or "Clean Code") instead of some book for a specific programing language.
  
  My first question, how do you interpret this book list? I feel they are poor recommendation/assigned books for a mediocre college in China (I can say this with confidence as I am Chinese)
  
  My second question, what is your recommendation? The goal is to help them keep interested in CS. If the reading can help them better prepare for their undergraduate study that is a plus. When thinking about my recommendation I reread Paul Graham's "Hackers & Painters"(he talked about his high school life in the book) but I found I didn't enjoy reading it this time. It feels old and outdated.
  
  The comment from "username_2" mentioned "Programming Pearls". There are couple of reasons I didn't consider "Programming Pearls".
  
  1. I try to avoid c++. I believe c++ should not be kids' first or second language. As a matter of fact I will advice them learn c++ until they absolute must, say a job/project requires to use c++.
  2. If I remember correctly the book is mainly about algorithm, but then we already have enough books for algorithm, e.g. I would rather recommend "[Grokking Algorithms: An Illustrated Guide for Programmers and Other Curious People](https://rads.stackoverflow.com/amzn/click/com/1617292230)" instead of a book in 1999.
  3. I normally don't recommend any "old" book for my students, (whether we should still read "The Mythical Man-Month" can be another topic) but this lead to my next point.
  4. "The Pragmatic Programmer" 1st version also published in 1999 but I see it has a 20th Anniversary Edition. I don't read this new edition. So if you read this new edition will you recommend it to undergraduate student ?
  5. I am thinking about recommending books about Operating Systems because they heard these terms iOS, watchOS, macOS all the time. But I can't find an easy one. Most books about Operating Systems are too thick and I believe they will study OS theory in college, so I just need some easy(interesting if possible) introduction material.
  
  BTW, I asked a related question here "[Do the most popular college books in the US include "The Communist Manifesto" & "The Republic"?](https://skeptics.stackexchange.com/questions/53799/do-the-most-popular-college-books-in-the-us-include-the-communist-manifesto)"
  
  --- update ---
  
  I found Cormen answered a similar question on quora ["What is the best introduction to computer science books?](https://www.quora.com/What-is-the-best-introduction-to-computer-science-books), to quote
  
  > At Dartmouth, we do not assign a textbook in our introductory course.
  > We use a set of lecture notes on the Web that Devin Balkcom, Hany
  > Farid, and I have written over the years. So, my answer is that I have
  > no answer.
  
  And Alan Kay answered this on quora ["What are the best books to understand computer science concepts?"](https://www.quora.com/What-are-the-best-books-to-understand-computer-science-concepts)
  
  > By far the best book for the general public — the one I always
  > recommend — is “The Pattern on the Stone” by Danny Hillis.
  
  I never heard of "The Pattern on the Stone" and I find it is also an old book.
  
  So I guess I have asked a difficult question.
  
  --- update 2023.2.12---
  
  I find this serial ["How Computer Works"](https://www.youtube.com/playlist?list=PLzdnOPI1iJNcsRwJhvksEo1tJqjIqWbN-) by <https://code.org/> is quite good. I have checked many videos there <https://www.youtube.com/@codeorg> and highly recommend them. It is a pity it only has an English version.
  
  **Tags:** self-learning, programming, secondary-education, undergraduate
  
  > **Comments:**
  > **username_1**: In my exp. Cormen is indeed the most used in the US for algo classes in the upper/final undergraduate year(s). So, I'd agree with your 'ebookfriendly' source on that.  
  > **username_1**: I'd also agree that more intro prog courses use Java than C in the US nowadays. But the choice for a 1st Java books is rather (more) varied. TBH the 'ebookfriendly' with its per-state rather than per-subject tops is rather useless other than for edutainment purposes.  
  > **username_0**: But it was from OpenSyllabus, ebookfriendly just quoted the data. So the bottom line is OpenSyllabus's data credible ?  
  > **username_2**: Re 'I would rather recommend "Code Complete"' That's a great book for junior software engineers, but I don't see how it would be effective for students still learning CS basics (as it assumes some familiarity with the fundamentals of CS and software development). Have you looked at Bentley's "Programming Pearls"?  
  > **username_0**: @username_2 update my question can you take a look ?  
  > **username_3**: Have you see these lists https://github.com/jobream/ComputerScience-Books and https://github.com/EbookFoundation/free-programming-books ?  
  > **username_0**: @Rusi I don't know these lists but when I check them I find there are too many books there. Do you have any recommendation ? Actually I am thinking about recommending books about Operating Systems. But I can't find an easy one. Most books about Operating Systems are too thick and I believe they will study OS theory in college, so I just need easy(interesting if possible) introduction material.  
  > **username_3**: It seems to me your requirement is somewhat self-contradictory.  OS is inherently an advanced or at least second level course. OTOH you want to teach school children.  You can give children some vague ideas of OS. Or you can expose *user-level* practices of Linux or Windows etc. Eg how to use a shell; how to boot shutdown and onwards. The internal structure of an OS seems rather out of range at this point [At least thats what I think!]  
  > **username_0**: @Rusi you are probably right. It is just that they heard all these terms, iOS watchOS macOS window10 window11 and asked me several times what are they exactly  
  > **username_3**: O like there are bestsellers "for dummies" I guess one could cook up "for children". Its just that I'm not the one who knows about this . My impression is that children learn much more operationally than conceptually -- you just need to show them what they can do with these xyzOS systems  
  > **username_0**: The "for dummies" is definitely not for them, these are high schoolers with high self-esteem lol  
  
  ---
  
  ## 5 answers
  
  ### Answer by username_6 on 2022-09-16. Score: 3
  
  In my experience, most professional software engineering books (Mythical Man-Month, Pragmatic Programmer, Clean Code, Code Complete) and college-level algorithms books (Sedgewick, Cormen, Skiena, Roughgarden, Kleinberg, Dasgupta, etc) are too heavy for high schoolers. Many of my graduate-level CS classmates weren't able to penetrate Cormen (1300+ pages!) and struggled with Dasgupta. Most of the business concerns and subtle design tradeoffs discussed in software engineering books aren't relevant to high school students because they're not in the industry and aren't designing, building or maintaining large-scale production applications or systems.
  
  High schoolers mostly want to have fun, make hands-on games and apps, work with robotics (LEGO Mindstorms, Arduino, Raspberry Pi) and explore the fundamentals and "greatest hits" of computing. There should be a balance between big, high-level concepts presented in a nutshell and plenty of relatively sandboxed hands-on projects that offer a strong fun-to-effort ratio. The goal for engagement is to reduce frustration and present content that feels relevant. Material should be challenging, but not overly so.
  
  In-depth advanced algorithm analysis, inner workings of operating systems (schedulers, memory models, etc) and deep tradeoffs in software engineering are out of scope. They'll learn about these things in their college and professional careers and on an as-needed basis.
  
  There's a good deal of tension teaching algorithms in general, because the topic is often seen as dry and impractical. Attitudes about algorithms have shifted over the past decade in their use in hiring, with potential transitive impacts on education. Algorithms aren't necessary for everyday professional software engineering work. There are high school level competitive programming teams througout the world focused on algorithms, but this is a select minority of students, not representative of a high school class curriculum.
  
  Given this context, I'd suggest one of a few approaches:
  
  1. Don't use a textbook at all and teach algorithms using online resources and practical problems. I'll admit I've generally only skimmed most of the 20+ textbooks I've been assigned throughout my computing education. I'm not sure they're necessary or relevant for most courses these days given the abundance of high-quality online options (assuming good curation). Consider [Khan Academy](https://www.khanacademy.org/computing/computer-science/algorithms) for starters.
  2. Use an algorithms textbook, but pick something short, accessible and practical. I agree that it's a good idea to steer clear of books older than a decade or so and try to avoid C++ and functional languages (Racket, Scheme, Haskell) in favor of Python or JS. Choose one with simple explanations, more code and less math. Here are a couple suggestions:
  
     * Algorithms for Dummies (mentioned in the comments). This book is well-written, easy to understand and focuses on real-world concerns. For topics that are difficult or theoretical, the author sticks to big takeaways and fostering an appreciation for the impact the algorithms have had on software.
     * Grokking Algorithms (mentioned in the original post). This book has fun illustrations, presents the material with a light, accessible tone and sticks to core topics, avoiding esoteric college-level concepts like B-trees, FFT, NP-Complete reductions, Master Theorem and so on.
  
     Both books use Python.
  3. If your curriculum permits it, sneak algorithms in the back door via games. I like [Invent Your Own Computer Games with Python](https://inventwithpython.com/invent4thed/) (and just about anything by Al Sweigart), with the caveat that the algorithms it covers (such as simple game AI) might leave gaps if you're expecting a comprehensive understanding of algorithm fundamentals. On the flip side, it's fun and the algorithms will feel immediately relevant and applicable.
  
  These books are either very affordable or available [for free](https://greenteapress.com/free_books.html) online.
  
  Sort of an aside, but while [Green Tea Press](https://greenteapress.com/) doesn't have a self-proclaimed algorithms book per se, it offers accessible books on a variety of adjacent subjects that teach algorithmic thinking and data structures. Check out Allen's [textbook manifesto](https://greenteapress.com/wp/textbook-manifesto/) while you're there.
  
  [CS Unplugged](https://www.csunplugged.org) is also worth mentioning for the concept in spite of its grade-school audience. I like the idea of going hands-on and offline with algorithm instruction when possible, although I haven't battle tested this much in my own teaching. Algorithms are particularly amenable to worked examples on paper, teaching students how to simulate the computer executing the algorithm step-by-step, think through the program flow and develop test cases to discover bugs.
  
  > **Comments:**
  > **username_0**: You mentioned quite some materials I don't know, thanks. I highly agree with words "The result is a 1000-page book with no personality."  When I find "JavaScript The Definitive Guide" has 700 pages, my first reaction is WTF ?! A question, you said "Attitudes about algorithms have shifted over the past decade in their use in hiring, with potential transitive impacts on education."  Can you further elaborate that ?  
  > **username_6**: Algorithm-based programming interviews have come under fire in recent years (too many citations possible, maybe search for "are programming interviews broken"), so if fewer companies wind up using them, then the education system may eventually adjust as well to de-emphasize algorithms in the curriculum.  
  > **username_0**: Here in China I know many big tech companies still like to ask algorithm questions and I also heard this is the case for google.  
  > **username_6**: Yeah, it's definitely still a thing, but possibly becoming less so. I'm speculating on the long run. Things tend to get more high-level over time. Assembly isn't taught as much as it used to be, for example. GPT-3, Copilot and so forth are a new high-level that will likely impact education eventually. Algorithms seem to be slowly drifting into the "not everybody needs to know this" category.  
  > **username_0**: I found Cormen answered a similar question on quora, "So, my answer is that I have no answer."(check my updated question). lol  
  > **username_0**: I also found ["code"](https://www.amazon.com/Code-Language-Computer-Hardware-Software-ebook/dp/B0B123P5GV/ref=sr_1_1?crid=1XMC1BO0DJI9B&keywords=code&qid=1663470936&s=digital-text&sprefix=c%2Cdigital-text%2C810&sr=1-1) just published the 2nd edition. Have you read code ? Would you recommend it ?  
  > **username_6**: I agree with Cormen on not using a textbook. Interesting that he doesn't recommend his own book, considered the bible of algorithms. I read about half of "Code" before I got pulled into other things (I have trouble finishing books). Fantastic book, but like Nand2Tetris, it deals with ultra-low level concepts that are certainly fascinating but don't pertain to day-to-day professional programming concerns. Aside from a comp architecture elective, one can get through CS college and a programming career without knowing much of anything about NAND gates.  
  > **username_0**: I found Alan Kay gave a similar comment about "Code" at quota [What are the best books to understand computer science concepts?](https://www.quora.com/What-are-the-best-books-to-understand-computer-science-concepts) "The Code book basically uses a very good approach for “principles” — I would take this path also — but I feel that it has way too many words and a few too many side trips for a starter book... Code violates this I think"  
  > **username_0**: Hi I am reading [how computer really works](https://www.howcomputersreallywork.com/) and find it fits my bill. After I finish it I will try to provide an answer to my own question. Initially, I wanted to read [How Computers Work: The Evolution of Technology](https://www.amazon.com/How-Computers-Work-Evolution-Technology/dp/078974984X) but found its latest version was published in 2014 so I gave it up.  
  > **username_0**: From the book title you can see I want to introduce some book to the highschoolers about "how computer works". lol That idea was formed partially through the discussion with you. I want a book about hardware, about OS, no need to go deep but give them these concepts.  
  > **username_0**: Hi I found this serial https://www.youtube.com/playlist?list=PLzdnOPI1iJNcsRwJhvksEo1tJqjIqWbN-  too bad it only has an English version.  
  > **username_4**: While I agree with the general sentiment expressed in this answer I object to "try to avoid C++ and functional languages (Racket, Scheme, Haskell) in favor of Python or JS". I believe that exposing your students to the broken and verbose nature of poorly designed languages is only ever going to cloud their appreciation of the beauty of algorithm design. So give them Haskell or Scheme but not what you had in mind.  
  > **username_6**: @username_4 That seems unrealistic. Few use Haskell or Scheme outside of stodgy academic circles so it's a disservice to students to push them into that world by default. JS and Py are far more popular and practical in virtually every domain, including algorithms. Few online judge sites support Scheme/Haskell, they're not used in most job interviews (or many jobs) and the algo textbooks are usually too dense or antiquated for HS. Even the author of SICP and the cornerstone of Scheme at MIT [defended switching from Scheme to Python](https://youtu.be/cblhgNUoX9M?t=3579). BTW, I code Haskell as a hobby.  
  > **username_4**: Couldn't disagree more. The switch to Python is akin to giving up the fight for a better software industry. Poul-Henning Kamp wrote why [The Software Industry Is Still the Problem](https://cacm.acm.org/magazines/2022/6/261171-the-software-industry-is-still-the-problem/abstract). We as educators have the single biggest responsibility to lead rather than follow industry's poor example.  
  > **username_0**: Hi, 5 months later I have an answer and added 3 books to my recommendation list, I would like to see your opinions.  
  
  ---
  
  ### Answer by username_7 on 2023-02-11. Score: 3
  
  While not exactly a textbook, ***Code: The Hidden Language of Computer Hardware and Software*** is one of the most important and influential books in my early times, when I was a high-schooler.
  
  Getting a top-down view on how a computer works early on is highly beneficial to one's later detailed study of computer architecture. This book explains various components of a computer in simple terms, like binary and 2's complement representation of numbers, logic gates, storage and computation units, and assembles a primitive computer from the ground-up. It covers basic topics from courses like *Digital Circuit Design*, *Introduction to Computer Systems*, *Computer Science: A Programmer's Perspective*, and serves as a perfect entry point for those interested in learning CS.
  
  > **Comments:**
  > **username_8**: I came here to post the exact same answer! It's an excellent grounding in how things actually work.  
  > **username_0**: I discussed with username_6 about the book, maybe you can check our discussion in his answer.  
  > **username_0**: Hi do you think it is important that high school students know what  a Digital Circuit is ?  
  > **username_7**: @username_0 It's the foundation of integrated circuits, and getting an idea of it helps with studying computers.  
  
  ---
  
  ### Answer by username_4 on 2023-02-08. Score: 2
  
  One book I'd recommend is C. Papadimitriou's [Logicomix](https://en.wikipedia.org/wiki/Logicomix). It's a graphic novel introducing aspiring students to one of the great challenges in CS: undecidability, and how it came about in maths. CS is more than writing python or $\langle$insert whatever language gets you a BS job these days$\rangle$.
  
  > **Comments:**
  > **username_0**: Funny you should say that because I just re-read this book a month ago and asked a question here https://skeptics.stackexchange.com/questions/54327/did-bertrand-russell-spend-360-pages-in-principia-mathematica-to-prove-1-1-2  
  > **username_0**: I first read this book in 2011 according to my Goodreads record. lol  
  
  ---
  
  ### Answer by username_5 on 2023-01-06. Score: 0
  
  The Innovators: How a Group of Hackers, Geniuses and Geeks Created the Digital Revolution by Walter Isaacson.
  Book Review:[Read Review here](https://www.goodreads.com/book/show/21856367-the-innovators)!
  
  
  ---
  
  ### Answer by username_0 on 2023-03-05. Score: 0
  
  I have been searching my own answer for the past several months, now I have two books added to the list,
  
  1. "[computer science distilled](https://code.energy/computer-science-distilled/)"
  2. "[How Computers Really Work](https://www.howcomputersreallywork.com/)", check here for its [table of contents](https://nostarch.com/how-computers-really-work)
  
  The "computer science distilled" has only 181 pages so it is an easier read, while "How Computers Really Work" covers the basic concepts of OS, which is one of the things I was looking for. They are both an easy read for my targeted audiences, which is an important factor when I think about my recommendations.
  
  Both books cover the basic of digital circuits, so I had a brief discussion with [Bob Brown](https://cseducators.stackexchange.com/users/3524/bob-brown) here [Explaining the Value of Knowledge of Digital Logic](https://cseducators.stackexchange.com/questions/3986/explaining-the-value-of-knowledge-of-digital-logic) and found out he also wrote a free introductory book for the similar purpose [here](https://professorbrown.net/concepts/)
  
  
  ---
  
  