4

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 & 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? and Some real practical example to teach object-oriented concepts and programming (in python)

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. 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 "njuffa" 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" 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"?"

--- update ---

I found Cormen answered a similar question on quora "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?"

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" 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.

Qiulang 邱朗
  • 828
  • 3
  • 14
  • 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. – Fizz Sep 14 '22 at 12:11
  • 3
    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. – Fizz Sep 14 '22 at 12:17
  • But it was from OpenSyllabus, ebookfriendly just quoted the data. So the bottom line is OpenSyllabus's data credible ? – Qiulang 邱朗 Sep 14 '22 at 13:55
  • 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"? – njuffa Sep 15 '22 at 22:08
  • @njuffa update my question can you take a look ? – Qiulang 邱朗 Sep 16 '22 at 03:56
  • Have you see these lists https://github.com/jobream/ComputerScience-Books and https://github.com/EbookFoundation/free-programming-books ? – Rusi Sep 16 '22 at 04:53
  • @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. – Qiulang 邱朗 Sep 16 '22 at 06:43
  • 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!] – Rusi Sep 16 '22 at 12:33
  • @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 – Qiulang 邱朗 Sep 16 '22 at 12:44
  • 2
    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 – Rusi Sep 16 '22 at 13:17
  • The "for dummies" is definitely not for them, these are high schoolers with high self-esteem lol – Qiulang 邱朗 Sep 17 '22 at 03:30

5 Answers5

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 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 (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 online.

Sort of an aside, but while Green Tea Press 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 while you're there.

CS Unplugged 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.

ggorlen
  • 573
  • 2
  • 8
  • 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 ? – Qiulang 邱朗 Sep 17 '22 at 05:04
  • 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. – ggorlen Sep 17 '22 at 05:30
  • 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. – Qiulang 邱朗 Sep 17 '22 at 06:24
  • 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. – ggorlen Sep 17 '22 at 06:41
  • I found Cormen answered a similar question on quora, "So, my answer is that I have no answer."(check my updated question). lol – Qiulang 邱朗 Sep 18 '22 at 03:14
  • 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 ? – Qiulang 邱朗 Sep 18 '22 at 03:16
  • 1
    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. – ggorlen Sep 18 '22 at 03:34
  • 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" – Qiulang 邱朗 Sep 19 '22 at 02:20
  • 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. – Qiulang 邱朗 Oct 24 '22 at 02:50
  • 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. – Qiulang 邱朗 Oct 24 '22 at 02:58
  • Hi I found this serial https://www.youtube.com/playlist?list=PLzdnOPI1iJNcsRwJhvksEo1tJqjIqWbN- too bad it only has an English version. – Qiulang 邱朗 Feb 12 '23 at 05:16
  • 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. – Kai Feb 15 '23 at 11:50
  • 2
    @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. – ggorlen Feb 15 '23 at 16:35
  • 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. – Kai Feb 16 '23 at 10:57
  • Hi, 5 months later I have an answer and added 3 books to my recommendation list, I would like to see your opinions. – Qiulang 邱朗 Mar 05 '23 at 02:21
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.

iBug
  • 133
  • 6
2

One book I'd recommend is C. Papadimitriou's 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$.

Kai
  • 206
  • 3
  • 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 – Qiulang 邱朗 Feb 08 '23 at 09:37
  • I first read this book in 2011 according to my Goodreads record. lol – Qiulang 邱朗 Feb 08 '23 at 09:46
0

The Innovators: How a Group of Hackers, Geniuses and Geeks Created the Digital Revolution by Walter Isaacson. Book Review:Read Review here!

Manoov
  • 31
  • 5
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"
  2. "How Computers Really Work", check here for its table of contents

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 here Explaining the Value of Knowledge of Digital Logic and found out he also wrote a free introductory book for the similar purpose here

Qiulang 邱朗
  • 828
  • 3
  • 14