Grokking Algorithms An Illustrated Guide For Programmers and Other Curious People by Aditya Y. Bhargava
My rating: 4 of 5 stars
Dear Readers!
These past few weeks have been busy, as I was able to finish a very good online course on Arm Cortex M based microcontroller and now I’m happy to announce that the pages of the book titled Grokking Algorithms from A.Y. Bhargava ran out, and as such I had to put it down. Some variety really helps to move on, hence the parallel(ish) completion of two separate things this time. Anyway, as usually, I’m posting my review of this book here that you can also find on Goodreads. Please enjoy.
When you’re thinking about picking up this book, do not think about a hardcore algorithms book, but instead think about it like a gentle introduction to some of the most common algorithms and problems they are associated with. Being a gentle introduction, it doesn’t bombard you with tons of code on every page, but instead it tries to make you understand the working principles of the more common algorithms (and data structures) with different drawings. There will always be code examples written in python, but mostly only after there has been enough discussion about the inner workings of the current topic of interest.
The topics themselves start from the very basics, like the Big O notation and its relation to some data structures, recursion, call stack and common sort algorithms. Things then become more interesting, as hash tables, basic graph theory, breadth-first search, Dijkstra’s and greedy algorithms, dynamic programming, and k-nearest neighbors get into the center of discussion. The author also never forgets to mention real world uses for the aforementioned topics, and in fact, all those things are introduced through them. Finally, the last chapter deals only with some algorithm related recommendations for certain areas of interest without any discussions.
All in all, despite the easy-peasy looking presentation, this book will actually give you usable background knowledge for quite some common areas of problems in the programming world, so don’t be fooled by the looks. On the other hand, don’t expect to be able to directly handle real programming problems either, as the code snippets included are only for demonstration purposes at most (no full-blown implementations are included).
My only complaint about this book, is that in my opinion it is shorter than it could’ve been. Some of the topics mentioned in the last chapter could’ve easily been expanded into new chapters, but hey, one cannot get everything done.
To sum this all up, I’d say that if you are an experienced programmer, then this book is probably not for you, but if you are just starting out with programming or algorithms, you should pick this book up. It will quickly dispel the illusion that some topics can only be discussed only much later in your programming education and career, like search engines and recommendation systems. This book will make these topics seem accessible even to novices and encourage them to go further down into the proverbial rabbit hole.
Thanks for reading.