I was reading a blog post the other day — well, it was more of a rant, actually — about the evils of using regions in your .NET code. The guy had joined a team that used regions as one of their programming conventions, and he refused (rudely, I thought) to abide by the team’s policy. I thought some of the authors reasons were valid, but some not so much. What bothered me about the post was that he not only told why he didn’t use regions, but also why no one else on the planet ever should, and that if you do, you are a “bad programmer“.
This took me back to my early days in programming. I had been working in ColdFusion for a while and the guys at Allaire and then Macromedia had started to add some semi-object-oriented constructs to the CF language. Up to this point, I had only worked with procedural languages and had no education in OOP, so I was trying to teach myself how to use the new constructs AND how to program in an object-oriented way while still trying to earn a living.
The CF programming community is not large, and there are some real “rock stars” there — opinion leaders that everyone looks to for help and advice. They spend a significant amount of time blogging and answering questions on the forums, and I sought their advice many times. Many of these gurus are very nice and patient with self-taught programmers, thank goodness.
There were a few, however, that I called “zealots”. To these guys, regardless of language used (CF, Java, C++, etc.), there is a “right” way programming, and God help anyone who does things differently or disagrees with their “orthodox” way.
Contrary to what every good teacher has said to me, the zealots believe there ARE stupid questions. Look through any forum site where programmers go to seek advice. You won’t have to view too many threads before you come across a question asked by a programmer who is trying to solve a problem but is being attacked because the very premise of the question offends a zealot in some way.
So after getting flamed a few times with my own “stupid” questions, I became afraid to ask anything. Not the best way to learn, right? I resorted to “lurking” in the forums and studying 3-inch-thick books. And doing. Lots of doing.
And one thing I learned is that the “zealots” are wrong. There is best practice, of course, that we should all strive to follow, and there are plenty of great and helpful design patterns. But these are tools that have to be applied in the right situations, and ignored when another way works better. What works for one person or team or project may be the wrong approach for another. I believe practicality trumps orthodoxy.
The “regions” rant I mentioned earlier doesn’t have anything to do with design patterns, but it is still a good lesson here, because it is an example of how people’s brains function differently from each other. In my case, I am much more effective if I can hide portions of the code that are not directly and immediately being worked on. I can focus so much better if it isn’t showing. I also find it easier to dive back into a class when I come back to it after several weeks or months and it is structurally organized into functional regions.
Zealots like the blogger writing that rant can only see the way they think, and their way is the “right” way, dammit. So if I do something different, I must be a “bad programmer”.