4
$\begingroup$

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

$\endgroup$
11
  • $\begingroup$ 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. $\endgroup$
    – Fizz
    Sep 14 at 12:11
  • 3
    $\begingroup$ 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. $\endgroup$
    – Fizz
    Sep 14 at 12:17
  • $\begingroup$ But it was from OpenSyllabus, ebookfriendly just quoted the data. So the bottom line is OpenSyllabus's data credible ? $\endgroup$ Sep 14 at 13:55
  • $\begingroup$ 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"? $\endgroup$
    – njuffa
    Sep 15 at 22:08
  • 2
    $\begingroup$ 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 $\endgroup$
    – Rusi
    Sep 16 at 13:17

1 Answer 1

2
$\begingroup$

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.

$\endgroup$
10
  • $\begingroup$ 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 ? $\endgroup$ Sep 17 at 5:04
  • $\begingroup$ 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. $\endgroup$
    – ggorlen
    Sep 17 at 5:30
  • $\begingroup$ 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. $\endgroup$ Sep 17 at 6:24
  • $\begingroup$ 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. $\endgroup$
    – ggorlen
    Sep 17 at 6:41
  • $\begingroup$ I found Cormen answered a similar question on quora, "So, my answer is that I have no answer."(check my updated question). lol $\endgroup$ Sep 18 at 3:14

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.