Helped You ?
There are countless books in computer science (and related domains), but it is sometimes hard to pick the right one, the one which provides an easy access to a domain, but at the same time helps you to embrace it.
Algorithms is a typical case, but not the only one: a good professor will not teach you more advanced algorithms, or more efficient ones. A good professor will make complicated things less complicated. An excellent one will turn them into simple things. A bad one will not only turn things even more complicated, but will also hinder any further reflexion, because he’ll convince you that this is not something for you (ie. you are probably too limited for that).
Books are more or less like professors: there are countless of badly written ones, but at the end very few excellent ones.
The motivation behind reading books can vary:
- beginners wanting to teach themselves
- computer science students who want a good complement
- experienced programmers who want to refresh a little bit their memory
- experienced programmers who are willing to be interviewed for a new job (Google et al. are famous for asking algorithm-related questions)
Let’s review what I enjoyed reading in the past few years.
My Personal List
Yes, this list is personal, non-exhaustive, with probably some questionable choices. Some people may want to complete it, or will disagree with several ones, but hey, I think it’s a good start anyway.
The C programming language by Brian Kernighan and Dennis Ritchie. Probably the most controversial one, but this book was the first C-language-related book I read, at a time Internet was not mainstream, and it was a great pleasure to switch from a gfa-basic/assembly developer to a C developer in only few weeks. I would probably not recommend the book nowadays, but I am really grateful for the (possibly imperfect) first C “professor” I had, and this book is one of the main reasons why I am writing C today.
Applied Cryptography by Bruce Schneier was also my first cryptography-related book and even if I’m still (very) far from being an expert in this field, it really helped me a lot understanding many of the concepts behind it. I would really recommend this book to anyone interested by cryptography (and I would say that everybody should be interested by cryptography, and not only programmers)
Algorithms by Robert Sedgewick and Kevin Wayne is without hesitation the best algorithm book I have ever read, and I would gladly recommend it to anyone – and by anyone I really mean anyone: beginners, students, confirmed developers… I was first a bit disappointed by the rather basic level of the first chapter (quickly reviewing fundamental concepts, including for loops, etc.), but this is a key point of this book: the progression is uniform, and before you even realize it, more complex things appear. I have been studying algorithms during my college years, and I must admit that some of them totally flew over my head ; including Dijkstra’s algorithm, something I painfully implemented the first time when I was still a student (and I did not really understand the underlying concepts at that time, I must admit – this was bruteforce coding for me). In Algorithms, Dijkstra is not something which appears from the void, but is within a logical difficulty progression – and this book taught me how simple Dijkstra’s algorithm was. Yes, really simple: a direct graph search through a priority queue, with edge relaxation – after reading few chapters, I guarantee that this is a really simple thing do to. More generally, very intimidating algorithms many developers are afraid to check out are explained in such way that not only it makes your fears disappear, but gives you the trust to explore further domains (did you know that red-black-trees were not as crazy as they seemed ?). Ah, and a last note: algorithms in this books are written in Java, but are easily adaptable to other languages (in my case, C and C++)
Hacker’s Delight by Henry S. Warren is a delicious book for bit-fiddling fans and more generally hackers (and by hackers I do not mean script kiddies trying to deface the NSA website, but hackers). Have you ever wondered how to count the number of leading ones in an integer without spending your time in a loop ? Or how to divide an integer number without actually using the division operation (slow) but only the multiply one ? This book is not only a collection of good recipes, it also explains the maths behind them. I strongly recommend this book to all advanced programmers, but also to anyone wanting to dive inside the numbers behind our computers.
Programming Pearls by Jon Bentley is a really enjoyable book on algorithms – and beyond algorithms – with personal and very insightful war stories, entertaining remarks, and more. I really recommend this little gem, which will teach you how simple and powerful a markov chain can be, for example. Oh, and Jon Bentley is also the author of the excellent long common strings data compression (which can be viewed as a “low frequency” compression algorithm, compared to classical “high frequency” algorithms such as zlib, which basically means that it can be piped to a secondary compression, with a combined ratio)
IPv6 Théorie et Pratique by G6 association is a French (yes, sorry guys) book which taught me everything on IPv6 at a time IPv6 was really not mainstream (well, it is still not mainstream today, cough cough cough…). It is very unfortunate O’Reilly France disappeared, but at least this book is still online, and I would recommend it too.
What About Videos ?
Oh yes, some videos can also be extremely helpful.
For a very good and non-experts oriented introduction to cryptography, I would strongly recommend the Gambling with Secrets series, and the RSA Encryption one. These small entertaining videos are really great (even for non-developers)
An excellent algorithm course by Robert Sedgewick and Kevin Wayne which is a good complement to the Algorithms book. Robert Sedgewick is an excellent professor, and the courses videos are intended for anyone (including beginners). Do not hesitate to enroll to this course, one more time: this is really worth it.
TL;DR: No, really, sometimes reading is the shortest path!