Could you provide your thoughts regarding the book Philosophy of Software Design? After reading it, I encountered several points that were hard for me to accept, apart from generic advice such as ‘consider before coding.’ Here are some of my critiques: 1. The explanation of complexity seems lacking. The focus on dependencies is relevant, but I felt obscurity was merely a hidden dependency. The author overlooks critical distinctions between accidental and essential complexity, which are vital to understanding. 2. I believe that overly intricate modules lead to increased software maintenance issues. My experience as an Android developer exposed me to an unhelpful mindset that required excessive duplication of code just to modify trivial implementation details. I favor a hierarchical structure that permits simplification while allowing for in-depth exploration. 3. The suggestion that general-purpose modules should be more complex doesn’t align with my experience. For example, ffmpeg provides both abstraction and depth for customization without steep complexity, contrary to the author’s stance. 4. The concept of comment-driven development presents challenges; it presupposes all developers will keep comments updated and relevant. Meanwhile, test-driven development fosters accountability. 5. The chapter regarding software trends seems outdated. What do you all think?
P.S. I feel compelled to mention my recommended reading/viewing list: Grokking Simplicity focuses on functional design, Growing Object-Oriented Software, Guided by Tests critiques comment-driven development effectively, and Out of the Tar Pit offers superior insights into complexity than what’s presented in this book.