Many of the issues mentioned in this chapter are subtle, and you may not find them until well into your build-test-release development cycle. The ideal approach is to prevent these types of bugs from appearing by ensuring that you have a good understanding of the new VB .NET language concepts and of the underlying .NET Framework classes that your application uses. At the very least, developers should take note of the debugging challenges mentioned in Chapter 1 and learn those design and programming concepts that are necessary for their development responsibilities.
As you find code or design errors, decide whether any of the bugs are unusual or tricky enough to catch other developers. If so, try writing about each of your discoveries in a short document so that your colleagues and others in your organization can learn from your experiences. Whereas explicit knowledge is definable and usually documented, this tacit knowledge normally lives only in developers' heads and in their day-to-day practices. It shows itself only through the practice in which it is used, in this case inside streams of code. Codifying such knowledge is not a panacea. Describing certain programming techniques can be as difficult as describing how to ride a bicycle. But even an attempt to pass this information on to other developers is better than leaving them to walk through the same minefields.
Finally, be wary of the new VB .NET language, no matter how wonderful Microsoft claims it to be. You will need to unlearn some of your VB.Classic habits as well as learn some new VB .NET habits. Much of the folklore that built up around VB.Classic is no longer useful, and this unlearning can be more difficult and dangerous than understanding the new concepts. To paraphrase a somewhat cynical conclusion drawn by Chris Hoare during his 1980 Turing Award lecture, there are at least three ways of designing a software language. You can make it
So simple that there are obviously no deficiencies ”VB.Classic
So complicated that there are no obvious deficiencies ”C++
Look simple yet be complicated enough to conceal obvious deficiencies ” VB .NET