Externally indexed torrent
If you are the original uploader, contact staff to have it moved to your account
Textbook in PDF format
Good software design is essential for the success of your project, but designing software is hard to do. You need to have a deep understanding of the consequences of design decisions and a good overview of available design alternatives. With this book, experienced C developers will get a thorough, practical, and unparalleled overview of software design with this modern language.
C trainer and consultant Klaus Iglberger explains how you can manage dependencies and abstractions, improve changeability and extensibility of software entities, and apply and implement modern design patterns to help you take advantage of today's possibilities. Software design is the most essential aspect of a software project because it impacts the software's most important properties: maintainability, changeability, and extensibility.
Why I Wrote This Book:
By the time I was really digging into the language (that was a few years after the first C standard had been released), I had read pretty much every C book there was. But despite the fact that many of these books were great and definitely paved the way for my current career as a C trainer and consultant, they were too focused on the little details and the implementation specifics, and too far away from the bigger picture of maintainable software.
At the time, very few books truly focused on the bigger picture, dealing with the development of large software systems. Among these were John Lakos’s Large Scale C Software Design, a great but literally heavy introduction to dependency management, and the so-called Gang of Four book, which is the classic book on software design patterns. Unfortunately, over the years, this situation hasn’t really changed: most books, talks, blogs, etc., primarily focus on language mechanics and features—the small details and specifics. Very few, and in my opinion way too few, new releases focus on maintainable software, changeability, extensibility, and testability. And if they try to, they unfortunately quickly fall back into the common habit of explaining language mechanics and demonstrating features.
Learn how to evaluate your code with respect to software design
Understand what software design is, including design goals such as changeability and extensibility
Explore the advantages and disadvantages of each design approach
Learn how design patterns help solve problems and express intent
Choose the right form of a design pattern to get the most out of its advantages