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

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

$\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, 2022 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, 2022 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, 2022 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, 2022 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, 2022 at 13:17

5 Answers 5

3
$\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$
15
  • $\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, 2022 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, 2022 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, 2022 at 6:24
  • 1
    $\begingroup$ 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. $\endgroup$
    – ggorlen
    Sep 18, 2022 at 3:34
  • 2
    $\begingroup$ @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. BTW, I code Haskell as a hobby. $\endgroup$
    – ggorlen
    Feb 15 at 16:35
3
$\begingroup$

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.

$\endgroup$
4
  • $\begingroup$ I came here to post the exact same answer! It's an excellent grounding in how things actually work. $\endgroup$ Feb 11 at 10:15
  • $\begingroup$ I discussed with ggorlen about the book, maybe you can check our discussion in his answer. $\endgroup$ Feb 11 at 11:42
  • 1
    $\begingroup$ Hi do you think it is important that high school students know what a Digital Circuit is ? $\endgroup$ Feb 12 at 4:46
  • $\begingroup$ @Qiulang邱朗 It's the foundation of integrated circuits, and getting an idea of it helps with studying computers. $\endgroup$
    – iBug
    Feb 12 at 4:58
2
$\begingroup$

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

$\endgroup$
2
0
$\begingroup$

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

$\endgroup$
0
$\begingroup$

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

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

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