top | item 3754823

(no title)

thelastnode | 14 years ago

Why?

While I have worked through a decent amount of CLRS myself, I think there are much better ways to learn how to solve algorithmic problems. For example, programming competition books like Programming Challenges[1] forces students to solve real-world-ish problems according to performance constraints - a time constraint, either artificial (e.g., problem statement requires execution within 2 seconds) or actual (e.g., choosing an algorithm that is too slow means the sun will burn out before the algorithm terminates).

Books and contests of this nature teach algorithmic thinking, which is far more important than the actual algorithms themselves. It also provides a context for implementing these algorithms, which means the student gets to see the more practical aspects as well: testing it on corner cases, fighting with the chosen implementation language, relying on compiler optimization, etc.

If the goal of the undergraduate program is to develop practitioners of computer science, or even graduates headed for academia, algorithmic thinking is essential. I don't think CLRS is necessarily the best way to teach that, and it certainly isn't the only way.

[1]: http://www.programming-challenges.com/pg.php?page=index

discuss

order

ek|14 years ago

It's possible that you're confusing programmers with computer scientists. Not all programmers are computer scientists, and vice-versa.

I understand that the title of the post is about books programmers recommend, but computer science extends far, far beyond programming and learning how to engineer solutions to real-world problems using algorithms.

The important parts to people doing research in algorithms are well-covered in CLRS, and that's part of why it's such an excellent book. It's full of rigorous proofs and a lot of theory, but that's because the point of the text is the design and analysis of algorithms themselves, rather than the application of them.

A university has an obligation to its undergraduate students majoring in computer science to teach them about computer science, and learning to think about designing algorithms, rather than merely learning about using them, is something that I would fully expect as an undergraduate majoring in computer science at any major university.

I suspect this is part of why more and more universities are offering degrees in Software Engineering, where the theoretical aspects of the field are not as important.

eshvk|14 years ago

True with a tiny caveat. Having worked through a lot of a "lesser" book: The algorithm design manual, what I have found missing in other books or contest driven practice is any practice of proofs of correctness. While, these are certainly probably completely practically useless in a SWE job, they do provide a good foundation for computer science undergrads to develop some mathematical maturity necessary to explore other branches of mathematics, say in grad school or at work in a more quantitatively demanding job.

dkersten|14 years ago

I second Programming Challenges. Its one of my all time favourites because it helped me in the past and is my go-to for sample programs when learning new languages.