I came across this short post “I am a great programmer, but a horrible algorithmist“:
“I do all the things a software craftsman does… I even have a degree in Computer Science from what I think is a great university. However, I feel I am a horrible algorithmist. Ask me to write a complex algorithm (even one that has been discovered), and I start to get sweaty palmed and nervous.”
My response to this is “I totally feel ya, and I’m an algorithmist!” Now I don’t actually consider myself a bad algorithmist, rather I realize that it is unrealistic to think that you should be able to rattle off Quicksort or FFT with ease. Most of the great algorithms out there are subtle, and many are powerful because they exploit non-obvious logic. So I don’t feel bad when I can’t recite their details.
Throughout each of our professional careers there are just a handful of algorithms that we will ever need to master. So I don’t feel that learning how to regurgitate random algorithms or blast them out as code is particularly good use of my time. What I try to do is learn about as many different algorithms as I can. I try to understand them, their relative strengths and weaknesses, on a high level. I do delve into the details from time to time because there’s good lessons there too, but if the details get too hairy I simply tell myself “I’ll learn the details when I have to.”