
* Introduction to Algorithms, by Cormen et al (aka "CLRS")
* Any of Robert Sedgewick's books on Algorithms ("Algorithms is C++", "Algorithms in Java", etc)
* The Art of Computer Programming by Knuth.
* If you want a more math-focused approach, Knuth has another book called "Concrete Mathematics" which might be worth your time.
* If you want something fun and accessible check out "9 Algorithms that Changed the Future" by MacCormick
I guess for the same reasons people want to bash the current interviewing institution in place.
Personally, I go with "it is what it is, deal with it if you want THAT job"
Back to the context, I think I find CLRS much more approachable than TAOCP. It relies on pseudo-code and fairly simple mathematical symbology to formalise the algorithms it is treating.
With TAOCP I have tried by can't get past the language of the imaginary CPU which it uses.
Also, there are other simply excellent texts on Algorithms which I personally found much more useful than TAOCP (in decreasing order of "easiness")
- Python Algorithms
- The Algorithm Design Manual
- CLRS
- Algorithms in Java (somehow I found CLRS easier to follow than this)
- And then I found this recently, "Algorithms on Strings,Trees and Sequences: Computer Science and Computational Biology" (one should have at least gone through the first two recommendations before starting with this one to make it easier to read this one)
Disclaimer : I have a growing interest in learning Algorithms due to the requirements of interviews, however I have come to believe that the knowledge will go a long way.
I had a visceral reaction against CLRS when I saw the standard pseudo-code the book uses. But as I tried implementing some algorithms in C, I found that the algorithms were so precise and detailed that there was no better way to represent it (apart from giving the C code directly).
I've heard claims that CLRS' pseudo-code could be presented in a higher level manner - but it defeats the purpose of an Algorithms text. Algorithms should be correct, fast and consume the least memory possible - this requires you to think about low level memory management, cost of comparisons etc.
However, the density and detail of CLRS forced me to look for other books which presents the topic in a better manner. Vazirani is an excellent choice in this regard. The language is clear and easy to understand, and it gives a better high-level picture than CLRS. I remember reading Chain Matrix Multiplication (page 184, 6.5) in Vazirani and being overwhelmed by the simplicity of the presentation compared to the dry formalisms used in CLRS.
From my experience, I recommend using CLRS as an aid for rigorous study and Vazirani for less rigorous, but very effective learning. Also take a look at Sedgewick's Algorithms in Java series - http://www.cs.princeton.edu/~rs/ (he has C and C++ series, but Java is what I've used). It is more detailed than Vazirani but at the same time more approachable than CLRS.
Now, if by "hacker" you just mean "developer" or "software engineer," then one could be a little bit more detailed, but there's still a lot of different areas to explore.
That said, if you want suggestions for books, articles, links, etc:
I'd suggest you start out by reading some books / articles that give a bit of the history of "hackerdom" and some insight into the hacker mindset. Some possibilities that come to mind:
Hackers & Painters by our very own Paul "pg" Graham
Hackers: Heroes of the Computer Revolution by Steven Levy
The Soul of a New Machine by Tracy Kidder
Cyberpunk: Outlaws and Hackers on the Computer Frontier by Katie Hafner & John Markoff
Artificial Life: A Report from the Frontier Where Computers Meet Biology by Steven Levy
Godel, Escher, Bach: An Eternal Golden Braid by Douglas Hofstadter
Most or all of Paul Graham's essays. http://paulgraham.com/articles.html
Read some of Edgar W Dijkstra's works: http://www.cs.utexas.edu/~EWD/
Couple that with a good book on the C language, some basic "theory of computing" stuff and a good algorithms book. I actually like Java as a good language to explore a lot of different things, since it has great library and tool support, plenty of community support, plenty of docs and books, etc. Learning some Java so you can play with cool libraries like Mahout, OpenNLP, etc. isn't the worst idea in the world. And, of course, learning a Lisp of some sort. This is still on my personal TODO list as well, and I've been dabbling in Clojure... but I don't think you'd go wrong with Common Lisp or Scheme either.
Other book recommendations:
Code: The Hidden Language of Computer Hardware and Software by Charles Petzold
The Annotated Turing: A Guided Tour Through Alan Turing's Historic Paper on Computability and the Turing Machine by Charles Petzold
Structure and Interpretation of Computer Programs by Harold Abelson and Gerald Sussman
Hacker's Delight by Henry S. Warren
Operating System Concepts by Abraham Silberschatz
Introduction to Algorithms by Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest and Clifford Stein
One (or more) of the Algorithms in FOO series by Robert Sedgewick. There are Algorithms in C, Algorithms in C++ and Algorithms in Java to pick from. Each is a multi-part series. The Java one goes up to at least 5 parts, I can't recall offhand if the series numbering is identical across languages.
I also find that most hackers have an affinity for F/OSS software. If you don't already, I'd suggest running Linux or BSD as your operating system. Learn the standard command line tools, learn at least one of (Emacs|Vim).
Read The Cathedral & The Bazaar if you haven't yet.
Also consider some of esr's various rants, some of Stallman's stuff, etc., for context if nothing else.
Edit: Also, expect somebody in this discussion to recommend reading The Art of Computer Programming by Don Knuth. I'll just say that TAoCP is more reference material than tutorial, and isn't something you'd normally just "read" as in "read cover to cover." It's a great reference to have around for when you need to dig into the deep details of implementing an algorithms, and need the mathematical stuff, etc. But it's not something you necessarily want to start with.
There's SO many more places you can go though, than all this. The stuff mentioned above is good foundation stuff for a lot of paths you might want to explore, but don't limit yourself. Buy and Arduino and start doing some hardware hacking, read chemistry books and biology books, whatever floats your boat. Like ChuckMcM says below, curiosity is huge. If you're curious and don't limit yourself, you'll be a hacker.