Tag Archives: Rant

The year of Windows 2000 on the desktop?

Every now and then, I am forced to fire up an old virtual machine I keep lying around. It’s a Windows 2000 installation, with some of the tools of days gone by, and lots of software that doesn’t run anymore on modern systems. It offers better compatibility than Wine or Dosbox, so I use it whenever I have to break out into Windows land on my Linux boxen. I like having to boot up that VM.

And boy am I ever so glad that I bought that full Windows license back then, instead of just using the pre-installed one. From my point of view, Windows 2000 was — and, with all the service packs installed, still is — the perfect desktop operating system. That little VM takes up as much as 10 GB on my drive, including multiple development environments, office software, games and whatnot. Still less than a default Windows 7 installation without any applications. Windows 2000 runs happily on as little as 512 MB of virtual RAM, without any swapping. Applications start up fast, no lag, no waiting for some pretty animations to finish. Double-click on an icon, and the program is just there, waiting for input.

Granted, my software selection doesn’t exactly classify as usual. The programs I run are mostly old or non-standard. So what? Software doesn’t rust. Delphi 7 is just as usable as it was back then. Picture Publisher 8, an image manipulation program from the late 90s, still has some features I can’t find in modern software, barring the real big (as in expensive) ones. Ruby layer, anyone? Or have a look at SoftMaker Office, an inexpensive, nifty little piece of code that opens my Word and Excel documents way better than, say, LibreOffice, and it’s small and fast. And it looks like Office 2000 with nicer icons, doesn’t contain Clippy, and has a more logical (to me) menu structure, and very good support for the newer file formats. Win-win-win. And, like the others, it works well, stable, and fast. And all this software doesn’t need online activation to work. Don’t have an internet connection? No problem, everything still works. It’s not free? So what, I don’t mind paying for good software.

Now compare that to current standard software: The Office 2010 installation I’m forced to use at work, for example. I still can’t get over the feeling that lots of features were removed from the newer MS Office versions. Need an example? Making a chart used to be so simple. Now? I still haven’t figured out how to use the first column of a selection as the X axis values. Lots of manual adjusting, sure, it works. But it used to be as simple as clicking on a checkbox in a wizard, and you were done. SoftMaker and LibreOffice can do this, no problem at all.

And what has happened to help systems in general? You know, there used to be a time where you pressed F1 and in a split second there was a new window containing lots of text that explained how to use the feature you’re stuck with. There used to be printed manuals going into detail, sometimes even explaining the reason behind some design decisions. There were examples or even step-by-step tutorials. Nowadays, if the F1 key works at all, you see a “please wait…” message indicating that some HTML files are being downloaded from some server. If you’re as lucky as me, the files have been moved somewhere else by now, and you have to do a manual search at the newer location to find some cobbled-together, preliminary stuff of little actual help.

Maybe it’s me. Maybe I’m on the verge of becoming a grumpy old guy sitting on his front porch telling kids to get off his lawn. But I can’t shake this feeling that, for all the technological advancements, lots of things used to be better 15 years ago. I’m not against newer technologies, as long as they make things better. And that’s where a lot goes wrong today.

Is an online help system really better than offline help? Oh yeah, you always get the newest information, cool. But. If I install a C++ compiler I expect the documentation to match the libraries installed. If my libraries don’t change, their documentation shouldn’t need to change that fast, either. Give me an update system to keep things current, sure. But don’t make me depend on an always-on uplink. This is one of the many things that Linux distros get right. The desktop not crashing and breaking things all the time is one of the many things they don’t.

So far the system of my dreams would be Windows 2000, but still supported with security updates so I can hook it up to the net, with a fast, responsive, stable web browser, a usable, fast, stable office suite, development environment, and everything with a complete offline help system that’s actually helpful. Something like what we had about 10-15 years ago, just on a modern PC.

One can dream. Or use a VM.

How we reduced our codebase by n kloc by switching programming languages

You’ve seen them before. Those stories of companies that switched from their early design language to some other, did a complete re-write of their money maker, and ended up with a much smaller code base. And as with scientific studies, especially in the field of nutrition, you can find an example for every combination that shows the new approach is “better”. So Rust delivers shorter code than Python, Go leads to a significant reduction in code size compared to Ruby and so on. Oh, and the new code is always faster, more stable and easier to maintain.

My problem with that? Stay with one language and just re-write your code. The results will be (mostly) the same.

The code replaced in those stories usually “grew in an organic fashion”, that is, it was cobbled together haphazardly. It works? Ship it! No time for refactorings. No time for getting rid of that ugly-yet-working-timer or the Thread.Sleep() loop. If you take such a piece of code and just clean it up, it will shrink and become more robust just by you taking the time to plan a little more ahead. You have a better understanding of the requirements. You have all those nagging thoughts still edged into your brain: If only I could do this part in that way. Would be oh so much better, but I can’t, because of that fubar over there that would have to be fixed first. And so on. By writing your code anew, you can address all those little points with the bosses’ blessings instead of slipping in a tiny refactoring under the radar now and then.

The verdict? I reduced a codebase of 250 kloc down to 69 kloc by staying in C#. From 79 kloc in Java down to 23 kloc, still Java. The language used does play a part in this, and the C# base, for example, might have come down to 10 kloc of Lisp or Python. But always keep in mind that there is a difference between essential and accidental complexity.