Wednesday, July 4, 2007

C#, .NET, VB.NET, Vista, etc. So What is the Point?

What great user requirements are being met by the software and tech world being so insistent on constant change? Were there scads of users of software that were unable to get their tasks done on Win32 machines using native Win32 code? I don't recall having come across a single user that said, "I can't get anything done on computers, until they implement software that needs a separate 20MB download in order to work, or a total reinstallation of a new operating system, or written using a 'new' language that is just a rehashing of old language elements that were already found in C++, Object Pascal or Java."

Maybe if the software development world were smarter they would spend time perfecting what they have, instead of cranking out more complicated buggy crap that nobody needed in the first place. Given the speed with which software developers leap headlong into supposedly "new" technologies and languages, you'd think they had already mastered pre-existing technologies. Wake up call: most existing software is crap. And not just crap, but really bad, incredibly aromatic, pungent, decadent befouling crap that oozes out into the world to putrefy anything it touches. Those who dare to release such stuff into the world have no right to arrogantly demand that the world wait while they rewrite their crap in the latest and greatest "new" language or framework, or produce even fouler crap while they start from scratch learning another language or framework in which to write crap.

If this keeps up, at some point the rest of the world is going to say to hell with us, and they will stop upgrading. Already, many businesses have adopted just such a stance, insisting on running their Windows 95 boxes until they can't run anymore. Yes, you read that right. There ARE people that ran pre-2000 software right through the supposed Y2K Armageddon without anything happening to them. They learned as a result that the IT world is full of crap about this need to continually upgrade.

In fact, I will go so far as to say that this continual upgrading is one of the biggest rip-offs in the history of mankind. And here is the part that almost every software developer reading this will hate: if you write new software to the latest technology to come out of Redmond or Silicon Valley instead of fixing pre-existing software, you are an accessory to this crime. Why? Because it is the forced obsolescence of software that forces the rest of the world into this upgrade debacle.

I'll give you a perfect example, in fact it is the situation that got me annoyed enough to write this post. For years I've been successfully using Quicken to manage my budget and pay my bills online. It's been working fine for this purpose and there is no technical reason why it could not continue to fulfill this role for years to come, except for one thing. Even though I paid for it, and was not told at the time that it was time-limited software, it will now expire in April. Not because the hardware on which it depends is now obsolete or non-operative. Not because of any upgrade to my PC, or the operating system on which it depends. It is solely because the company that sells Quicken wants to sell me and all other users a new copy. This is amazing, but perfectly par for the course in the software world, where instantaneous obsolescence is such a part of the culture that it is now seen as a sellers' right.

I've been thinking a lot lately about my newsreader. This is a software project I've been working on over weekends and nights for a few years. Lately I've had to admit to myself that it is a hobby, because quite frankly, I don't think enough people would pay money for a newsreader for it to be worth the effort it takes to turn a functioning piece of software into a finished product that you can sell. Don't get me wrong. This newsreader works very well. It is intelligently multi-threaded, fast, and very solid. But the icons are just what I could find for free, several screens don't have that professional polish or consistency, some messages are not user friendly, etc. And the user-feedback from the worker threads is not as complete or informative as I'd like it to be. In addition, I never did write a help file or manual for it, nor choose a real product name. And so on.

The newsreader was written in Delphi, and it now comprises a lot of units and when all third-party components are included, over a million lines of code in a full build. This is a significant code base. If my goal was still a product that I would sell, I would keep it in Delphi and finish it up, no doubt about it. D2006 is by far and away the best tool to use for developing Windows software for 32-bit Windows. But the time I use to finish it up in Win32 does me little good when I go looking for a job. Most current Delphi jobs are either end-of-life maintenance, or conversions to C#, neither of which portends much promise for long-term Delphi usage. So I've been trying to figure out what language to learn/review in order to keep the paychecks coming in over the long-term. I've had constant employment doing Delphi only, since 2001, and Delphi mixed with C++ before that. But the future of Delphi jobs is uncertain. I need to find an alternative language, and perhaps write a significant piece of software in that language to prove it is not just a checkmark on a resume. I'm looking, therefore, to rewrite the newsreader in either C++ or C#. The advantage of C++/CLI would be that I can use native code for performance-sensitive activities and managed code for the GUI and other parts. I could then directly reuse lots of existing code samples in C++ that are so easy to find online. I was doing C++ for years before Delphi came out, and for several years since as well. It probably would not be too difficult to get back into it. Plus, with my background in economics and my work experience in the financial industry, I'd be well-placed to get a good job in the financial sector in Chicago, which is primarily C++ and Java country. On the other hand, a combination of Delphi and C# skills may be just the ticket to ride, what with all the Delphi-to-C# conversions currently under way, or destined to occur over the next few years as existing code bases drift into perceived obsolescence. I've not yet decided, so I've been looking into what it would take to write a newsreader in .NET 2.0 using C++ or C#.

Well, here is where it gets depressing. .NET 2.0 is definitely a step backward from Delphi when it comes to the extent and quality of the components that come in the box. A lot of .NET components don't have user-draw, and there are no .NET equivalents for several useful VCL components. In addition, there are literally thousands of useful free components for Delphi. No such thing exists for .NET. So, I either have to spend a lot of money, or I have to make do with the components that come with .NET 2.0. In addition, there is not a single feature that a newsreader needs that is not possible to write in native Win32 Delphi code, and .NET 2.0 does not offer anything in the user experience that was not just as easy or even easier to write using Win32 Delphi. Sure, a newsreader that I write in .NET 2.0 will probably eventually be better than the current Win32 version, simply because I've learned a few very useful things along the way about how to architect a good multi-threaded app. But it is inevitable that the first few versions will be worse, because they will not have yet been fully debugged through several iterations like the current Win32 version is. If I had end users, I would be doing them a huge disservice, arguably almost to the point of fraud, if I rewrote the app in .NET 2.0, because of the inevitable bugs that are a part of any software construction project. The first few versions of a complete rewrite can never be as solid as the next iteration of a previous architecture.

Read that last paragraph again. Think about the full implications for all the rewrites going on across the software development world in reaction to the introduction of .NET, and the massive disservice thereby being done to end-users. The first few .NET versions of software will be WORSE than the existing Win32 versions, even though they may be architecturally superior, because of the inevitable bugs. It is inevitable and anyone that doesn't think so is fooling themselves.

In conclusion, I will once again pose the question in the subject line. .NET and C# are nice and all, but what is the point? Are they really solving anything?

No comments: