I was talking to Stu
this weekend a bit about the recent release of .NET 3.0
and all the things it professes to do. They've added some huge features to .NET and they even offer some free online training on it
But here's the deal: I do most of my work in .NET 1.1 right now. Financial institutions are slow to adopt new technology and there really wasn't any super-pressing need to convert to .NET 2.0 when it was released. Granted, we'll be moving to .NET 2.0 soon and do some work with it for internal tools, but production work still gets done in .NET 1.1.
For the .NET 2.0 stuff, it was pretty easy for me to grasp. They added a few new programming constructs, a few of the things I commonly do in ASP.NET are easier, and the rest of the stuff, for the most part, felt like they just solidified a good existing framework.
For .NET 3.0, it's a new situation. There are whole gigantic architectural additions that have been added. Windows Presentation Foundation, Windows Workflow Foundation, Windows Communication Foundation... valuable stuff, but not trivial in size. Reading through some of the doc and examples, it doesn't look like it's super trivial in implementation in many cases, either.
I know a lot of pretty decent developers, but some fairly key .NET 1.1 concepts still escape them. Databinding is a concept I hear a lot of confusion over. Reflection is another one that stymies folks. Academically, they sort of "get it," but when the rubber meets the road, it's still pretty confusing to them.
Which brings us to the question: Is .NET becoming too complicated? Previously these large foundation-style blocks seemed to live as "Application Blocks" that the Pattens and Practices group put out. (Which, in my opinion, many times were far, far more complex than the 80% case will need.) You could fairly safely ignore these huge blocks and still be pretty sure you could write a good .NET app. Now they're part of the framework, so they're a lot harder to ignore. Was that a good decision?
Back in college, we wrote some simple Windows apps in C++. As such, I had a peripheral interest in seeing how the various class libraries grew up. I can still read the code I wrote for those apps. It makes sense. Have you written a Windows app in C++ recently? Tried to read the code for it?
I'm afraid that's what's happening to .NET. New features needed? Sure. I mean, who can question the value of a whole workflow foundation built right into the framework? But the complexity of these things will be such that you'll have a difficult time finding anyone competent in all of it. Developers will be forced to specialize because there won't be enough time in the day to keep up with all of the latest developments.
The people I feel afraid for are the developers coming out of school today. Or the developers who will hit the job market five years from now. I've been in on .NET from the ground floor, so there's a lot of background knowledge I take for granted that I've gained as I've worked in it and been present for these latest developments. I can't imagine what it will be like coming in at square one right now, trying to write a "Hello World" app in C# and then figuring out where to go from there.
The learning curve is only getting steeper, and it's just like what happened with C++. They're great new features, but are they worth it?