I was listening to
.NET Rocks Live! today and enjoying it as usual.
Rocky Lhotka was talking about the Visual Studio 2005 Whitehorse designer functionality. The subject of the
class designer and UML came up.
There was a general dissing of UML which seemed somewhat unfair. My experiences with UML haven't all been peaches and cream (the term use case still sends a shiver up my spine), but a lot of the UML can be incredibly useful. The subject of UML and modeling languages in general will probably be the subject of a future post, but this post is about the difficulty in keeping up with software development knowledge.
The aforementioned UML dissing got me thinking about the various times I had a poor opinion of a technology simply from being un-informed. Two technology memories from the dim dark past came to mind. One was the proposed introduction of delegates into the Java language by Microsoft and the other was my first exposure to C++ templates.
Back in the last millennium, Microsoft proposed the addition of delegates to the Java language owned by Sun (this was before they "kissed" and made up). Sun's experts roundly derided the proposal. Microsoft's version of the truth can be found
here while Sun's can be found
here. Now at the time I was heavily into the Java flavored koolaid, read all the opinions on introducing delegates on Java sites and thought yeah ... can't let those scumbags Microsoft sully the language with their proprietary extensions. Years later when learning C# and .NET, I was exposed to delegates in more detail and actually found them to be a great language addition. My original opinion of the Microsoft Java delegates proposal was simply uninformed.
Around the same time, C++ compilers with support for templates started to become available. Consistent template support on the various compilers was patchy and they had a reputation for producing bloated executables (well bloated given the typical executable size at the time). In addition, I simply didn't understand what templates were all about. Rather than spending the time to get a basic understanding the technology, I just continued programming as before. Years later (again!), I worked on a project that required the use of C++ templates. It wasn't long before that ah-hah moment occurred with respect to understanding of what templates were all about.
So what's the point of this post? It's that you can't form accurate opinions on the many and varied software technologies that exist today, without spending some time getting to know the technology details. It's tough to find the time to research all the interesting nooks and crannies of software technology. Then there's the continual industry changes and the fact that competing software technologies actually feed off each other in the change process. Where would Java be without the work done on previous virtual machine technologies (such as Smalltalk)? What about the influence of Java on the .NET platform? How much was the Visual Studio 2005 class designer influenced by UML class diagrams?
Finally a shout out to Carl/Rory: Love your work, but hey UML ain't that bad!
(Though I would prefer first class support for property and event concepts in class models, so am looking forward to VS2005)