Operating Systems are Rude 5
Have you ever started typing in a password for one of the many resources that require one and right in the middle, the focus is snatched away by another program? It’s particularly troublesome while the operating system is starting up. Talk about a security risk. What if the thing that stole focus from my email password prompt was going to broadcast my keystrokes somewhere else? It should be illegal to steal focus while the user is typing into any text box. It’s just sheer rudeness, and I’m tired of it. Here I am trying to get something productive done and the operating system that is supposed to be helping me do my job is interrupting me with stuff I don’t care about.
I can answer the prompt telling me that my monitor is past due for a recalibration after I type in my email password. Why steal my focus from what I’m typing in right now while a new window is popping up in the background? Shouldn’t that stay in the background? I’ll start a few things at once knowing they’ll take some time to finish up, but that doesn’t mean I want them to jump in front of me when they are ready. I’m a grown a** man, I can decide for myself what and when I want to do things on my own computer. Tell my why it’s so important to grab my attention while I’m typing in a URL?
Listen Microsoft, Apple, Linux, and any other wannabe contenders out there: I want a polite operating system. Get out of my way and let me do my job the way I want to do it. If an application doesn’t need my attention at the moment, don’t grab it. If an application does need me to do something, let me finish what I’m doing in the application right now. Make it illegal to steal focus if I’m typing in a text box—especially if it is a password box. How hard can it be? Heck, I don’t mind you flashing the application button on the task bar until I address the need, but don’t allow any application to usurp control whenever it wants to. Only allow applications to request control.
Lastly, make sure that your scheduling system will make sure there are enough resources for me to continue typing in what I’m typing in without background processes interrupting me. Why should an application ignore keystrokes just because another application is loading in a butt-load of libraries? Why should I have to restart typing in my passwords because the operating system can’t keep up with me and simply ignores the keys I’m typing in? It’s the 21st century for crying out loud. These annoyances should be a thing of the past.
Sure it’s cheap for me to complain, and it’s cheap for you to say “build it yourself if you don’t like the way we do things”. But there is a free market economy. We specialize in different things. I do application work, but if you want to pay me to do operating system work I’ll be happy to take on the challenge. If Apple OS X is a polite operating system let me know, when I upgrade my machines I’ll switch. But to date, I haven’t run across one single operating system that can behave properly in this regard.
Why I Hate Writing Microsoft Programs
First off, I don‘t dislike Microsoft for religious reasons or claim that the only true software is open source. I dislike Microsoft because they have made my life difficult on many occasions when it could have been easy. The one area where Microsoft is the most painful to use is when you write software. The first problem is the horrendous API documentation and how to articles. Before I provide anechdotal evidence, let me provide something to contrast against.
As a Java developer, there are a couple things I have come to appreciate about the Java‘s contributions to the world. The first is the first rate JavaDoc tool. If Sun did nothing else right, they spent the right amount of time to flesh out the JavaDocs for the core API, and even provided links to tutorials to help you understand how things are supposed to work together. Second, the Java community as a whole has contributed excellent articles on how to solve different problems with Java. I‘d love to see another community surrounding a language match the level of quality of the articles. As a result of all these rich resources, developing Java programs is far less of a pain than any language supported by Microsoft.
As a Visual C++ developer, there are a couple of things that I have come to loath about Microsoft‘s contributions to the world. The first is the abysmal API documentation, which has gotten worse with the advent of the .NET framework. The descriptions are barely useable and there is no clear idea of how to use some of the parts of the API. It might be forgivable if the remainder of the Microsoft community (including magazines and such) picked up the slack, but rarely can you find what you need and everyone wants money. You can‘t even evaluate if the magazine will be good for you without spending money on it. The second is the lagging IDE technology. Things that I take for granted in any Java IDE like refactoring tools are not to be found in Visual Studio (unless you pay for a third party plugin or a new version finally includes limited support for it). You can‘t really build anything without the IDE, but it is a pain when you do something as simple as rename a method to clean up the class signature.
One of the first events that really helped me to dislike programming Microsoft programs was when I had an assignment to add features to the print dialog. I searched the IDE help for how to do this, and all I could find was that it was “possible” but that was it. I had a coworker look through his several hundred dollar thick reference guides and they gave the same answer as the online help. I searched the internet and came up with the same answer. Eventually, I ended up just creating a new dialog box with just the controlls I needed and secretly controlled the printer settings behind the scenes. The printer settings are set by the dialog box which is required by Microsoft to exist — but you can instantiate it without making it visible. After I created the custom print dialog with just the controls we needed I finally found the answer I originally needed, sort of. It turns out you need to copy the Print Dialog resource descriptor from the API source code included with Visual Studio into your project and manually edit it with a text editor to add the controls you need. There were no instructions on how to edit the resource file, but at least there was some description of the process. Events like this repeated themselves ad nauseum .
Another event that solidified the fact that I didn‘t want to do .NET programming and spend time learning C# had to do with a copy of Visual Studio 2003 given to me by my company. Despite the fact that this IDE is supposed to be Microsoft‘s cutting edge offering, they didn‘t learn a thing from the success of Java. Java‘s success has nothing to do with the language! It has everything to do with the community surrounding it, and the attention vendors pay to making our lives easier. Visual Studio 2003 had zero refactoring tools. None, zilch, nada. The open source community did help in some respects by providing NANT and NUnit, but no refactoring plugins. Eventually JetBrains created one, and perhaps Microsoft has licensed it for the next version of Visual Studio. I asked the Microsoft rep about it the response was, “No, it doesn‘t have anything like that… but don‘t you think that being able to display a screen on the desktop or on the web with the same code is a useful thing?” I couldn‘t believe it. How many people do that? You either develop for the web or you develop for the desktop. Worse, despite the cool factor that might have, it doesn‘t make my life easier for what I do each and every day. Refactoring tools are useful even when there is no UI and you are writing a library.
There are some very clever things that Microsoft has done, but they are lost in a sea of irrelevant features and horrendous documentation. The documentation problem is made worse by the community of money grubbing publications filled with articles that are no better than what Microsoft provides. Will things get better? Not if they continue to stick their heads in the sand when truly useful innovations come around. Is Java the bees knees? No, but it is a useful tool if only for the fact that you can find a real solution somewhere on the web without having to shell out money just to look at it. For the record, I‘d really like someone to implement something as elegant as Microsoft‘s web service solution in Java. Of course, you lose that very elegance if you don‘t use the overpriced and underpowerd Visual Studio….
