> False Starts -- Algorithms textbooks generally present important algorithms as a fait accompli, obscuring the ideas involved in designing them and the subtle reasons why other approaches fail.
I really really like this idea. It is fairly common that I'm working on an algorithm and I have pieces of it and can see goal line, but can't quite figure out to get there.
Learning to see patterns and generalize solutions from past failures is incredibly useful.
One of my favorite technical books. The sections on dynamic programming and heuristics were a revelation for me working on some of my first non trivial algorithms.
Algorithms taught by Skiena was one of two CS courses I took at Stony Brook (the other was formal logic) as they were cross listed with MAT. It was an enjoyable class, i think Skiena has really nailed down how to teach CS. This book covers more than can be taught in a semester so it was a great way for me to get a wide breadth of basic algorithmic knowledge. I think its treatment of simulated annealing stuck with me most.
The Algorithm Design Manual is very 'fluffy'. I never understood why so many people like it.
If you enjoy hand-waving and hate rigour, it's a nice read. But if you don't like computer science in the first place, why don't you pick a good novel or a book about giraffes?
I love it since it has actual C code for implementing the ideas. You get the intuition for the algorithms, how that intuition translates into pseudocode, and how that pseudocode becomes real C code.
Another lesson that it uniquely provides is that in day to day life you don't use these algorithms. You create new algorithms using the ideas behind the famous ones as a guide. An algorithms book or class that doesn't teach you that problem-solving mindset is basically useless.
It really depends on what you're looking for. If you're trying to build a solid understanding of algorithmic patterns, the Algorithm Design Manual is a quite good choice, and not hand-wavy nor lacking in rigor in any meaningful way.
If you are trying to prove properties of particular algorithms or you already have a specific algorithm in mind that you're considering using and need to analyze its complexity, then this would not be the best choice.
You shouldn't dismiss/denigrate the book because it doesn't fit with your personal use case.
The whole 'lacking rigor' idea here is a common pitfall for programmers—seems predicated on the false idea that coding is this one dimensional activity with a hard side and a fluffy side, and the fluffy side is largely comprised of deceptions for the weak or timid. I bet there's a strong correlation between folks who prefer (e.g.) Cormen to Skiena and those who insist on using terminal windows and vi/emacs for every task—and yet the correlation you might hope to find with the quality/depth/interest of their work fails to hold.
I always feel kind of bad when I see programmers taking on this attitude (often times it manifests as they're trying to freak out more novice programmers and display their supposed superiority), and unnecessarily hampering themselves. It's one aspect of our culture I'd really like to see die out before it spreads to the next generation.
I love it for the wonderful, engaging "war stories" and practical approach. It's not as theoretical as CLRS but much more practical, approachable, and readable, making it likely a better choice for most programmers.
It's the only book where author actually tries to make you understand the topic rather than mastrubating on it's academic background and a bunch of pseudomath.
You don't have to "hate rigor" in order to like non-technical treatments of a subject.
One reason I like the book is it gives a high-level overview of what algorithms are available to solve a problem, and a sense of which is most appropriate to my problem. If I need rigor after that, I can go to an appropriate source.
The majority of people reading algorithm books are looking to brush up for technical interviews or to supplement a bootcamp education, not because they are CS postgrads or genuinely love algorithms.
It's a good reference for anyone who is researching how to approach a given problem. One can switch off to a different text later on if they need to, and one of the nice features of Skiena is that he provides links at times to source code and further reading.
Ideally you'd know all the basics and use something like Kao's Encyclopedia of Algorithms to lookup the rest, but that thing is big enough to beat a man to death with. Skiena is a lot more approachable.
I didn't go to university thus I do not have a CS degree. This book was incredibly helpful in teaching me the basics of algorithms. I found it approachable but technical enough.
Personally I've found the best thing is to see a lot of problems. The more problems you've solved, the more reference points you have for solving future ones.
But these have to be problems that you've personally solved.
That's why fluffy algorithm books are a waste of time. Books cannot do the thinking for you.
This was my textbook for an Algorithms course in school. I recently had to crack it open again to brush up on algorithms before a tech interview; I think it helped.
10 years ago being 2008 - and the second edition also appears to be the most recent edition too; age of the edition though appears to have no impact on its value.
[+] [-] jnordwick|8 years ago|reply
I really really like this idea. It is fairly common that I'm working on an algorithm and I have pieces of it and can see goal line, but can't quite figure out to get there.
Learning to see patterns and generalize solutions from past failures is incredibly useful.
[+] [-] epberry|8 years ago|reply
[+] [-] danharaj|8 years ago|reply
[+] [-] eru|8 years ago|reply
If you enjoy hand-waving and hate rigour, it's a nice read. But if you don't like computer science in the first place, why don't you pick a good novel or a book about giraffes?
https://www.mccaughan.org.uk/g/books/alg-design.html puts a similar objection in a much more sympathetic tone that I can manage.
I am quite enjoying the lecture notes on http ://jeffe.cs.illinois.edu/teaching/algorithms/ recently, but there are for a more advanced course.
[+] [-] cf|8 years ago|reply
Another lesson that it uniquely provides is that in day to day life you don't use these algorithms. You create new algorithms using the ideas behind the famous ones as a guide. An algorithms book or class that doesn't teach you that problem-solving mindset is basically useless.
[+] [-] westoncb|8 years ago|reply
If you are trying to prove properties of particular algorithms or you already have a specific algorithm in mind that you're considering using and need to analyze its complexity, then this would not be the best choice.
You shouldn't dismiss/denigrate the book because it doesn't fit with your personal use case.
The whole 'lacking rigor' idea here is a common pitfall for programmers—seems predicated on the false idea that coding is this one dimensional activity with a hard side and a fluffy side, and the fluffy side is largely comprised of deceptions for the weak or timid. I bet there's a strong correlation between folks who prefer (e.g.) Cormen to Skiena and those who insist on using terminal windows and vi/emacs for every task—and yet the correlation you might hope to find with the quality/depth/interest of their work fails to hold.
I always feel kind of bad when I see programmers taking on this attitude (often times it manifests as they're trying to freak out more novice programmers and display their supposed superiority), and unnecessarily hampering themselves. It's one aspect of our culture I'd really like to see die out before it spreads to the next generation.
[+] [-] aardvark291|8 years ago|reply
[+] [-] wetpaws|8 years ago|reply
[+] [-] dmlorenzetti|8 years ago|reply
One reason I like the book is it gives a high-level overview of what algorithms are available to solve a problem, and a sense of which is most appropriate to my problem. If I need rigor after that, I can go to an appropriate source.
[+] [-] Apocryphon|8 years ago|reply
[+] [-] justin66|8 years ago|reply
It's a good reference for anyone who is researching how to approach a given problem. One can switch off to a different text later on if they need to, and one of the nice features of Skiena is that he provides links at times to source code and further reading.
Ideally you'd know all the basics and use something like Kao's Encyclopedia of Algorithms to lookup the rest, but that thing is big enough to beat a man to death with. Skiena is a lot more approachable.
[+] [-] ryanmarsh|8 years ago|reply
[+] [-] shahbaby|8 years ago|reply
Personally I've found the best thing is to see a lot of problems. The more problems you've solved, the more reference points you have for solving future ones.
But these have to be problems that you've personally solved.
That's why fluffy algorithm books are a waste of time. Books cannot do the thinking for you.
[+] [-] nagVenkat|8 years ago|reply
[+] [-] fuball63|8 years ago|reply
[+] [-] loverofthings|8 years ago|reply
[+] [-] V2hLe0ThslzRaV2|8 years ago|reply
SOURCE: The Algorithm Design Manual 2nd ed. 2008 Edition https://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena...