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?