Until now, we have been inundated with a melee of material in the areas of software architecture, design, and "professional" principles. The need for design material seems to be always at its peak when either a new language or technology appears in the market. When Java first entered the market, you could hear the squalls of developers as they flooded into the local bookstores to pick up the latest copy of Learn Java in 10 Minutes. Not only was Java a new language but it was also a new platform, and it was the language for developing rich Internet applications. Not only were developers challenged with a new syntax but they also had to learn the new semantics of this new development medium. For those new to object-oriented technologies, it meant an even greater learning curve. Everything in Java is an object, and it takes another level of discipline to design robust and reusable applications even after mastering the syntax and its base libraries. Having been programming in Java since its inception, I hope I have come to appreciate the things I would like to see in any new technology material offered. This is especially true in the area of architecture and design. This book is the culmination of many of the "do's and don'ts" I would have liked to have had when I was not only learning .NET but trying to master it, as well.
Before returning to Microsoft as a .NET solutions architect and having embraced Java at one point, I truly have tried to hold myself impartial to the technology and language wars that insued between the two giants of Sun and Microsoft. I never prescribed to becoming truly biased in any one direction. Java definitely has its strengths and before .NET, had become my favorite object-oriented language for many reasons. I loved its syntax, threading model, type system, and especially the base class libraries. From someone coming over from C/C++ and Visual Basic, Java was it. No longer did you have to struggle with the C runtime and the myriad of functionality-overlapped external libraries. But Java wasn't perfect, as we all soon found out. "Write once, run everywhere" wasn't quite as seamless as first promised. Developing a custom Java GUI was not straightforward, and there were too many vendor options for code generation. Object orientation also became more mainstream and, with it, the need for design disciplines.
The Microsoft platforms have their strengths, as well. Visual Basic provides a fast development cycle when building rich GUI applications. As Visual Basic matured, it was becoming harder and harder to justify the need to develop specialized code, such as COM components using a lower level language such as C++. Visual Basic (VB) gave you this with much less effort unless, of course, you were writing a commercial product and needed extremely specialized behavior or a very small .DLL footprint. Using VB, business applications could be brought to production in weeks instead of months. Anyone who has done any GUI development in Java versus VB will understand exactly what I'm referring to. From the development viewpoint, I loved Java but it was too painful putting together GUI applications using AWT, Swing, or whatever third-party library I was using. The third parties made it easier as Java matured but you found yourself indicted with almost too many options. Choose one and you risk adopting a technology that becomes either unsupported or unmarketable. That seems to always be the problem when the inventor of the language doesn't also provide the most popular development environment for the language created. This is the case with Java.