Marty's Blog

Best Practices -- As opposed to?

Occasionally, in my line of work, I am often asked by customers and clients whether our AppDev learning series cover “Best Practices”. Don’t get me wrong, I’m well aware of Microsoft’s use of the term “Best Practices” which has been written on around every product it sells. But think about it… to me, it seems a loaded question. It is like the classic, “have you stopped beating your wife/husband?” I mean, really… What is the alternative to teaching “Best Practices?”… “Worst Practices?”

Ok, this leads me to question the whole purpose of the “Best Practices” movement; and I'm not alone here (Ted Neward, Tim Berry, Dan North). It seems to me this term implies there are cookie cutter solutions to all developers’ problems. It is equating programming to a cooking recipe; follow these simple steps and your application will be totally secure… or super-efficient… or crash proof… or waterproof. I don’t believe that this Nirvana exists. Compared to other IT disciplines like networking infrastructure, programming clearly provides the widest range of possible solutions to any one problem. How many ways are there to add a user to Active Directory? How many ways are there to sort an array?

Being a programmer is more about having the right tool belt. It's about having the knowledge of many different ways to solve a given problem. Solving issues from the macro level, “Is this something that requires Web Services?”, “Is this something that requires C# or C++?” and the micro level, “Is this better solved by using collections, linked lists or arrays?”, “Should I use a local variable or should I use a global?” If a developer is restricted or bound to one set of solutions and cannot (or does not) take into account the many unique variables that surround the current project, that developer (or perhaps the company that hired the developer) is in trouble.

A quote I like from Alvin Toffler goes, “The illiterate of the 21st century will not be those who cannot read or write, but those who cannot learn, unlearn, and relearn.” Developers must constantly evolve and increase the size of their developer’s belt. Each problem should be analyzed and provided its own unique solution—and keep in mind, solutions today may not be good solutions of tomorrow.

Learn… and relearn my friend…