|I am describing a book, that is mostly written for Computer Science students but is also a great guide for beginner and intermediate developers who want to digg deeper when it comes to building efficient algorithms and improving their understanding of various data structures and their application in real-life projects.|
Algorithms and Data Structures is one of those books that should be present on a developer's desk as reference material, especially if the developer just started working with the fundamental Computer Science concepts. Although the main targeted audience are Computer Science students, it is also a good guide for beginner and intermediate developers who want to set the foundation for their development knowledge.
The book authors tried to emphasize the fact that the aim of this publication is not to teach readers how to write programs but rather how to build efficient computation algorithms and structures that will later be implemented in the context of various software products.
Today, I can see that there are more and more beginner developers who jump right into code and don't bother learning the fundamentals that cover the core of any system - how exactly data is stored and manipulated, how these processes can be optimized and what data structures are the most efficient, depending on the situation. This is not one of the best trends and usually these developers never reach the real level of a professional, being stuck in the "code monkey" stage. In my opinion, a professional developer is well aware that any algorithm can possible be optimized to some level and eventually this should be done. A professional developer should not only be aware of the presence of collections like lists, queues and stacks but also of the way those work and the ways the data is accessed inside those collections.
This book does a great job explaining these concepts (in addition, covering hash tables and binary trees) with real-world examples and easy-to-follow code samples. Speaking about code, all samples are written in Java, but are structured in such a way that if you have prior experience with another programming language (e.g. C# or C++) it will be fairly easy to make those code snippets work by recreating the algorithm using your language of choice. As I mentioned before, the book doesn't focus on code, however, at the end of it there is a section dedicated to object-oriented practices and their implementation in Java.
There are practice questions at the end of each chapter, that will let you experiment with the newly accumulated knowledge by building your own algorithms and programs to solve specific tasks, and this is a great way to make sure that you understood the material well enough to move on to the next chapter instead of just thinking that you remember the definition.
There is some mathematical material present - in order to properly understand a lot of concepts described, the reader should know math at least at the Calculus level. Of course, you can follow some examples without focusing much on the mathematical background, but it will certainly help in the long run to fully comprehend the structural flow.
Overall, this is a great introductory book that will guide the reader step-by-step thorugh the basic concepts of algorithms and data structures in understandable terms and samples. Highly recommend it as a complementary resource to existing Computer Science materials as well as a standalone must-have guide.