We are living in an era where most of the things that we do are getting automated through software. Even though, there is definite trend towards pre-packaged software modules and platforms, there is always a place for custom software development and integration projects. In the Enterprise world, .NET and Java EE are the natural platforms of choice for custom software development and deployments. With Agile software development methods, continuous delivery and Domain-Driven Design dominating the scene, there is a need for standardization and communication about software artifacts in a “platform-agnostic” manner. In this context, software design patterns becomes a primary tool for such communications.
You have in your hands a book that encompasses more than four decades of collective wisdom amassed by these two authors, as part of their continuous pursuit of knowledge and excellence, in the software engineering and technology consulting arena. What is more significant is the fact that these knowledge representations are a direct reflection of a practitioner’s mindset; some of those have been undertaken for our organization under our supervision! This is more than a reference book and should be looked at as a handbook for developers who are aspiring to take their skills to the next level and design state-of-the-art systems independently. This is undoubtedly a book that helps unfold many underlying principles that further educate and help one appreciate the various programming paradigms that are in vogue, as I write this foreword.
We have been continuously disrupting and pushing computing limits way beyond CPUs and GPUs over the past five decades. It is quite amazing to see the ground the authors have covered, in terms of contemplating the evolution of software design, patterns and idioms, to help developers create scalable and consistent code. More than coverage, their focus has been on certain aspects of design that help you create well structured (leveraging GoF patterns), scalable (through concurrent and parallel programming) and reliable (through functional and reactive programming) code with some of the .NET platform tools that transcend conventional imperative programming techniques.
At the core, the book deals with how pattern-based software development helps one to write better code. The authors have deliberately crafted the book to convey how various development patterns that are part of different catalogues can be put to use in a coordinated manner to write good quality code in .NET. The book covers how one can use GoF, POSA, DDD, POEAA, and EIP catalogue in the C# programming language.
Praseed and Shine are part of UST Global’s Technology Consulting group and have been collaborating professionally for the last ten years. They truly complement each other when it comes to software design and development. Their command over computer science first principles, ability to learn new technologies, appetite for challenges, and passion for software design is truly commendable. This makes their technology leadership invaluable to any professional organization.
Leveraging the core platform features (in this case, .NET) in tandem with industry-standard best practices (in this case, proven design pattern catalogues and idioms) is the need of the hour and becomes a clear differentiator when it comes to delivering high quality, scalable, and consistent code. This clearly is any developer’s best hedge in the present day's highly volatile technology landscape. I believe the authors have tried their best in articulating this with anecdotes and detailed code samples, and I hope that, after reading this book, you will feel the same way.
Arun Narayanan
COO, UST Global