For a contracting job I am working on, I have been using Telerik’s Web controls and it has brought to the forefront of my mind the problem with a great many of the glitzy toolkits. Most toolkits (especially the ever-plentiful GUI variety) make hard things hard and easy things impossible. Case in point: my work with Telerik. Databinding, sorting, and client-side events were still a major pain but I still can’t get the windows in the window control to stop hiding the other dialogs.
It seems that in the rush to say “we have more features”, many of these projects forget that most of these features quickly become a tangled mess to the control set’s user. On the PHP side of the world, I have written some basic grid classes of my own. They are not nearly as featureful as Telerik’s, but they are much easier to use. No ASPX or long-winded declarations, just declare an instance of the class, pass in some values (column names and such) and a MySQL result resource and BANG! you have a grid. Any other functionality can be easily added on or the whole darn control can be inherited and extended to the specific use–and herein lies the problem with the big commercial solution. With Telerik, I get a big monolithic blob. It either works for me or it doesn’t and it tries to do it all. If the feature set were minimalist, covering the most painful aspects of building such a grid, I could readily build it up, through inheritance or scripting, into just what I need for my project. As it is, I just try to push my way through. This isn’t a commercial vs. open source argument. It is the idea of providing a minimalist starting place and building or starting with a palace and trying to strip it down to a garage. It is also the same reason that I favor Gentoo over Fedora: it gives me a minimal system and the tools I need to build the system I want. With Fedora you get everything and the kitchen sink–and if you don’t want that much, you have to scale it down.
Here is the upshot: it is easier to take something small, but extensible, and build up then to take something static and monolithic and scale it down.
A great many Linux/Mac/BSD enthusiasts declaim what is wrong with Windows and how their OS of choice addresses these issues. I, obviously, share something in common with these people because my system of choice is, for now, Gentoo Linux. What I fail to hear from any of them is this: what can be done to make Windows a good system. No, base it off of BSD is not a valid answer. Because that is not making Windows a good system, that is rebranding BSD. So, as someone who rides both sides of the fence, here is my list of things that would make Windows a much more comfortable system to use.
- Stability. “Windows XP is pretty good!” is the cry I typically hear right about now and it is correct. It is pretty good, but it still falls far short of what it could and should be. When a program hangs in Linux, I run kill -9 on it and it’s dead. Under KDE, if you try to close an unresponsive program you will get a popup asking whether you want to terminate the program. If you do, the program dies–immediately. Under Windows, the computer still locks up as a whole (whereas it doesn’t on Linux) and you have to try pretty hard to end a runaway process. “Do you wish to end this process?” Yes. “Are you sure?” YES. “Do you wish to end this process?” YES! YES! YES! PLEASE KILL THE DARN PROCESS!
- Shell. “It’s the 20th century. Who wants to use the shell?” Well, I for one still like the shell. It has been pretty well proven that if you know the keys that the keyboard is still faster and, for those repetitive tasks, nothing beats the shell for scripting. Various attempts have been made at GUI scripting (Apple’s pre-OSX AppleScript, Windows “offers” a little with VBA, and KDE offers DCOP), but none of them offer the ease and flexibility of shell scripting. The closest Windows has come to a shell interface is offering a DOS shell (before the killing of DOS) and a DOS emulator (after the DoDOS). I have taken to installing bash and Cygwin on every Windows box that I use consistently to handle this deficiency. The Windows PowerShell is mostly a bash clone (with some neat .NET interop features which are wickedly cool, going so far as to allow command line scripting with business objects stored in DLLs) and would do quite well. I would like to have seen PowerShell about ten years ago and packaged with the system by default. The existence of the DOS shell doesn’t hurt Windows usability and I don’t see why packaging PowerShell in its place should.
- Virtual Desktops. This handy dandy little tool comes on virtually every Linux desktop system and it is something that quickly integrated itself in my workflow. I use four desktops and usually sort my windows into them by task. I would really like to see genuine virtual desktops available in Windows. Even Mac has only provided half-hearted support for this feature and both have “borrowed” from the Linux/UNIX tradition. “What kind of crooks are you? If you’re gonna steal, steal!” (unsourced; you’ll have to figure out where it came from).
- Package management. Apt, Portage, Ports, and RPMs all offer an integrated way to manage software. With Windows, you see a plethora of installment packages each of which functions in its own special little way and uninstalls in its own special little way. It would be nice to coalesce these functions into one API and one stop. As a side note, it would also be nice to be able to grab Microsoft’s free downloads from within this system by default. For example, as a developer I require (yes, require) .NET 2.0 and 1.1 and I plan to install the 3.0 SDK soon. When installing SQL Server Express 2005, I had to go out and manually fetch MSXML 6. Why on earth isn’t it packaged with SQL Server or, at least, grabbed and installed automagically? Speaking of user friendliness…
My point here is explicitly not that Windows should morph into Linux or Mac. Rather, it should at least learn some real lessons about what is good in those systems and incorporate it into Windows.