Friday, August 17, 2018

I have read many books on data structures and algorithms e.g. Introduction to Algorithms by Thomas H. Corman and Algorithm design manual by Steve S. Skiena, so when I come to know about this book, I thought, just another book on algorithms, but I was wrong. This is not just another book on algorithms but one of the most interesting books you will ever read on Algorithms and Data structure. Let's accept it, data structure and algorithms is interesting but at the same time they are very complex and hard to understand, especially, if not explained very well and that's where this book rocks. It explains things in very easy language and most importantly with a context, which helps to understand the topic better.
For example, when Aditya talked about array and linked list in the Grokking Algorithms, his examples of how a group of friends going for movie struggle to find the seat which is next to each other illustrates the problem faced by the array.

There are many such interesting and real-world examples, which makes the complex topic of algorithms and data structure easier to understand.

You will also appreciate his simple explanations like why quicksort is more used than merge sort?, something which I have thought before, but didn't understand, and that is just one example, the book is full of such examples on essential topics like an array, linked list, sorting algorithms, searching algorithms, recursion etc.

If his language and examples were not enough, the fine arts, paintings, and diagrams in the book will surely hook you.

The book has around 400 images and they are unique. They go nicely with the text and help you to visualize how an algorithm is working or how a data structure is working.

What I liked

Well, to be honest, I like the whole book, from Introduction to end. This is also one of the few books which I have read from start to end in last few years, the other two being, Elegant Objects by Yegor Bugayenko and Clean Architecture by Uncle Bob Martin. Anyway, here is my list of things which I liked, in fact, loved in Grokking algorithms:

1. Easy to understand language.

2. Interesting pictures which help to visualize the working of algorithms and data structures.

3. Thought to provoke use cases e.g when you have to design an app to keep track of your expense where you need to add and remove items more regularly and viewing it once or twice in a month, which data structure will you use?

4. Contemporary examples make it even more interesting. For example, how Facebook stores username so that they can allow you to log in and handle signups? Array or linked list or a hybrid data structure which is made of an array and linked list.

5. Size of the book, yes, it's not overwhelming so more chances that you will read it and come back again.

These were some of the points which I like but overall Grokking Algorithms is a very readable book with lots of good pictures which make this difficult topic relatively easy to understand.

But, if you are someone who prefers active learning like online courses then you can combine this book with Data Structures and Algorithms: Deep Dive Using Java course from Udemy, which covers a lot more data structure than Grokking Algorithm and effectively complement the book.

What would have made this book even better

As contrary to many of you thinking, the book is surely not a replacement of classic titles such as Introduction to Algorithms by Thomas H. Cormen because it's not comprehensive and doesn't cover most of the data structure e.g. tree, trie, etc.

At best, its an introductory book on data structure and algorithms which makes the somewhat dry topic of data structure and algorithms more interesting. Following are some things which I missed in this book:

1. The book is kinda light on data structures, which is a counterpart of algorithms because algorithms work on data structure and its the choice of a data structure which affect algorithms, would have been better if Aditya provided some more content on an essential data structure like a binary tree, binary search tree, trie etc.

2. Even though the book covers dynamic programming and greedy algorithms and explains some advanced algorithms e.g. k-nearest neighbors, it still doesn't cover key algorithms like encoding and encryption algorithms, map-reduce etc.

He tries to somewhat make for it in the last chapter about what next, where he provides a brief overview of 10 more algorithms that weren’t covered in the main content.

To be honest, the book delivers what it says but once you start loving a book, you start expecting more from it and hopefully, Aditya will take note of it and the second edition would be a little bit more comprehensive than the first edition.

That's all about Grokking Algorithms: An illustrated guide for programmers and other curious people. In short, I highly recommend this book to programmers, developers, software engineers, students, computer science graduates, and all other curious people, as the title suggests.

It's interesting to read, teaches complex concepts in easy-to-follow language, problem-solving, and focus on concept than implementations which means even if you don't code you can understand how a particular algorithm works and how to choose a particular data structure.

It's chapter on the array and the linked list is one of the best I have ever read and I strongly recommend all programmers, particularly those who have just started their career to read that. It's also not costly and worth of every penny spent. So, if you want to do just one thing right now, just go and read the Grokking Algorithm.

5 comments
:

Anonymous
said...

Hey bro, I have just completed some basic Java programming . Any advise on what could be done next.(I have done some basic problems like palindromes, display passwords using scanner class, reverse string ,for loops etc.)

Hello @Anonymous, you can still focus on Algorithms and Coding, try solving problems given in leadCode.com or Algorithm design manual book. If you want to work on application side then try creating simple program using Object oriented analysis and design e.g. designing a vending machine, coffee machine, traffic controllers etc.