My story started when I joined an Algorithms group, it seemed interesting, by that moment I haven't really been involved in computer science topics —I still suck, but not that much; that day I joined a huge room with around 10 Sr/Leads Software Engineers yelling "That's not O(n), that does is O(n)" I still remember my face, I was not understanding ANYTHING.
A friend of mine told me "There's a book which is brain friendly for beginners and it explains all of this algorithms stuff", that book was Grooking algorithms, An illustrated guide for programmers and other curious people By Aditya Y. Bhargava.
I belonged to "other curious people" group —since I wasn't a programmer at all—
when I gave a quick look to the book then, I thought "There are pictures on it! yei!" by that moment I was not aware of more complex algorithms books and I haven't had realized the amazing book I was holding.
I can not say that book taught me algorithms, on the other hand, I would say that book opened my mind to understand some technical topics such as: data structures, recursion, Big O, sorting and search algorithms, just enough to comprehend the basis before read some more complex algorithms books —that I have not read yet.
This book will not, not, NOT, NOT, NAT, teach you deeply anything, this book will give you a general idea of various computer science topics. This is definitely a book for beginners/starters, actually the book says that is for:
- Hobbyist coders
- Computer science grads
- Physics/math/other grads interested in programming (And look at me, I am a psychologist and I have learnt a lot form that book)
After meeting so many talented Software Engineers I would conclude that if you are looking for formal learning, this is not your option, but if you are pursuing to start learning, this is the less painful way, you'll get hurt but not brutally
Let's assume you are a beginner, if you have ever studied a degree related to software, you should probably have coursed some data structure assignment. Have you ever thought about the insertion complexity on an array or a list? You can find it here, as well as stacks —push and pop— and queues. But wait! Graphs and hash tables too? For a beginner book? Are you serious? Yes! those are also covered in the book too, but please keep in mind that you won't become an expert (for now).
In order to rate complexity, a bit of Big O notation topic is explained, I remember how worried I was since I did not know what a Logarithm was, but this was explained so simple, i.e. the exponential reverse operation, I was one step closer to understand "Log (n)" complexity! well not... But at least I knew what a logarithm was, later in the future (I mean now) that helped me to figure out merge sort complexity.
At the end of each chapter you will find a quick recap, just 4-6 points to not forget. What I did was write those on "post its" and put them in my desk so I was able to remember the topics easier.
Whether you are willing to apply to a company like Google, Facebook or Amazon, keep in mind that they consider algorithms a very serious business on their DNA. By reading this book, I believe you will not be able to succeed an interview with them for now, but it might be a nice way to start your algorithmish professional trail.
If you are as stubborn as me, you would like to insert a for loop into a recursive function, did you remember how did you understand recursive functions? Does it was as painful as it was for me? Maybe not, this book teaches recursive function with boxes, the approach is smooth.
At the very beginning you touch base on how to implement binary/simple search and of course sorting algorithms (Quick sort, merge sort, selection sort) with +400 didactic pictures.
But not everything is so simple, now let's put it harder, the last chapters get complicated, by that time I did not ever heard about NP-complete problems, and when I make interviews there are many people that does not understand or ever heard about it like me. The book brings some examples of NP-complete problems, such as the traveling salesperson and scheduling problems. I have met people that think these problems can be solved easily, but turns out that they are not, there's actually many strategies to choose a solution for those problems and finding an algorithm to find the best way to do it is not quiet easy.
Also, dynamic programming is difficult to understand too, but as the NP-complete problems, this book only explains you the general idea and invite you to keep learning about those topics once you have conquered the basics.
The more you learn, the less you know. At the time I finished the book, that was all what I was able to think, since I realized there are tons of information to know but for now I could see that algorithms are fun and amazing <3.
Special thanks to Sinuje Valencia a.k.a. "Sier" great friend, kotlin lover, and code force of nature. He lend me this book several times and have been one of the best teachers I have ever imagine I could learn form.
Also, Mario Morales, a passionate master on CS for helping me with edition, your continuous eagerness to learn have motivated me so much. The best teachers always teach form their heart, both of them have left a mark my in my professional trail.