With all of the buzz words, trendy terms, and desire to do the "next big thing," it is difficult in the software development world to avoid being caught up in the rush. Therefore, I always appreciate "contrarian" articles and blog entries that help to remind me of reality and somewhat control my enthusiasm for new things just because they are new. I have no use for argumentative posts with no substance, but appreciate the article or blog entry that shows well thought-out contrarian points of view and makes me question some of my own software development biases and perceptions.
One of the earliest articles I recall that did this for me was the SoftwareReality.com classic 101 EJB Damnations. Looking back now, it would be easy to dismiss this article as "obvious," but those of us who were fighting with EJB development and deployment at that time recall what the environment was like. Articles such as this one were largely dismissed and authors of such articles were largely abused. Similarly, Rod Johnson's One-on-One J2EE Design and Development was a major contrarian perspective in the "everyone must do EJB" environment.
What is interesting about that latter example is that the author of One-on-One J2EE Design and Development would turn that work into the Spring Framework, which is now more closely associated with the mainstream than with any type of contrarian point of view. Both of the examples I cited here required the authors to invest significant effort into learning problems of early EJB through hard-earned experience and then to articulate these successfully. Another characteristic of such works is that they often place the author in a position of easy ridicule from those who have "drunk the Kool-Aid" for whatever is popular at the time and enjoy bashing anyone with a different opinion.
I am not saying the mainstream is always wrong and contrarians are always right. Rather, I am saying that the mainstream can be wrong at times and contrarian points of view can help all of us to improve our skills, the tools we use, and our ability to satisfy customer needs. We should encourage diverse points of view so that we can either strengthen our current understanding when it is correct or realign our understanding when it is not quite on the mark. Therefore, I like to read articles that challenge my assumptions and preconceptions in addition to those that support my opinions and experiences.
The following are some of the articles (in no particular order) that have had the most effect on me in terms of challenging assumptions (or strengthening my own contrarian points of view). In several cases, I may not be in 100% agreement with the author, but I think the point they make is worth considering and should not be quickly dismissed.
101 EJB Damnations
Perils of the Singleton
Annotations: Don't Mess with Java
The Perils of Pair Programming
Why Extends is Evil
Why Getter and Setter Methods are Evil
The Myth of Self-Describing XML