Far be it from me to put words in Phil's mouth, but I hope that folks recognize that his post about favoring composition over inheritance is not specifically about that one best practice (the comments seem to indicate this is being missed). It's pretty clear to me that the thrust of that post is around a philosophical approach that he thinks the ALT.NET community should make.
Two things stand out from Phil's post in this respect: 1) don't appeal to authority, and 2) don't organize yourself around a set of technical principles (best practices), but rather organize yourself around the non-technical values of independent thinking and desire to improve. I hope that everyone can agree that these latter two values are good ones that should indeed be encouraged.
That said, should a community like ALT.NET eschew forming a more formal consensus on technical best practices? I tend to think not. While independent, critical thinking is valuable, it is not the summit of perfection. The summit of perfection, in the realm of ideas at least, is conformance with truth (what actually is versus what I think is), and independent thinking at odds with what is true is not only not valuable in itself, it can be downright detrimental.
For instance, what if you independently and critically think that security and privacy are not important aspects of the online banking application you are tasked with building? Is that kind of independent, critical thinking valuable in itself? Or will it potentially lead to great harm? Independent, critical thinking is valuable only in as much as it deepens one's understanding of and conformance to truth.
So I think that there is value in a community such as ALT.NET expending the effort to define principles through critical thinking and argumentation that it will hold up as ideals, i.e., things that seemed to be most in accord with the truth as we know it. This is where things like patterns and best practices come into play; it is the shared, accumulated wisdom of the technical community.
Now what about the broader idea of eschewing appealing to authority? Far be it from me to claim to be an authority in logic, but it seems to me that all appeals to authority are not invalid (the wikipedia article Phil links to discusses this to some degree but does not go far enough, in my estimation). The valid reasons for appealing to authority are discussed at the bottom of that article: 1) not enough time and 2) concern at one's ability to make the other understand the reasoning underlying the truth being expressed.
In terms of logic, it is not a fallacy to appeal to an authority on a topic that is accepted by all those involved in an argument. We're talking about presuppositions here, and without them, we'd never get anywhere in our search for truth. If you always have to argue from first principles (if you even acknowledge those), you simply get stuck in a quagmire. In terms of the topic at hand, if folks accept (as they generally do) that the GoF et al are authorities on the subject of OOD, then it is valid, logically speaking, to appeal to their authority to establish the principle that you should favor composition over inheritance.
The thing to watch out for in appeals to authority is 1) thinking that the authority is incapable of being wrong and 2) ensuring that the parties involved accept the authority. With the latter, you simply cannot argue (or at least the argument won't carry weight) from authority if the authority is not accepted. With the former, unless it is a presupposition shared by those involved that the authority is indeed infallible, you should keep in mind that even if you buy into the authority's credentials, it is still possible that the authority can be wrong.
So I would nuance what Phil says and say that if the ALT.NET community agrees that GoF is an authority, it is valid to appeal to them, while remaining open to criticism of the concepts involved (even those backed by an authority). The authority adds logical weight; it does not impose absolute authority.
We just don't have time to argue everything from first principles. Others who are generally acknowledged to be qualified have already taken the time to research, think about, and propose some good patterns and practices, and unless there is good reason to object, there is no need to rehash those. Instead, I'd suggest that the community focus on spreading knowledge of these patterns and practices all the while refining them, functioning essentially as a group in the way that Phil recommends individuals function--thinking critically and always working to improve. Doing this will help ensure that the community does not fall into a quagmire of unnecessary argumentation, and it will ensure that the patterns and practices that they agree upon can be continuously refined and enhanced as new technologies emerge and greater wisdom is gained over time.
Further, it gives the group a purpose that has meaning. After all, if the group's message is only "think for yourself and be all that you can be," there isn't much of substance to say after that. On the other hand, because it is a technical community that espouses that philosophy, it should take that philosophy on itself (as a group, not just the individuals in it). I would suggest this includes establishing greater consensus on best practices and patterns and then spreading the word about them to others. Be better together. :)
You see, it is not about setting down an infallible manifesto and excluding those who disagree, which is I think more than anything what Phil is concerned about. However, it also isn't about best practices just being true for you but not for me (best practices relativism?). Put another way, I suggest ALT.NET should favor thoughtful adherence to best patterns and practices, not blind adherence.
The opinions expressed herein are solely my own personal opinions, founded or unfounded, rational or not, and you can quote me on that.
Thanks to the good folks at dasBlog!
Copyright © 2017 J. Ambrose Little