The possible Windows advantage or how to make Windows 9.x better !
While Windows is facing over consumerization because of mobile devices, there is one aspect of Windows which should not be overlooked. Windows is at the core of business computing. I started programming back in the day when a simple PC cost $2000 to $3000 and most software was quite expensive. Now we see low cost PC’s and mobile devices so cheap than consumers are dictating the market, rather the businesses. Personally I think it is time to recognize this and to concentrate on bringing Windows back to its original state, an operating system for businesses. Why ?
So if Microsoft wants to produce an operating system for consumers, fine, but Windows 9.x really needs to be the operating system for businesses. Windows 8.1 is the operating system for consumers, but 9.x needs to remember its roots. This means more than simply something trivial like the old fashioned start menu. It means the core of Windows and how software is developed.
Consumer mobile devices, some even with free operating systems, are causing software to be turned into cheap or free apps, with low profit margins. It costs money to develop software and even more to develop good software. Businesses though don’t need cheap apps. They need quality software, which does the job intended for it. While businesses can ill afford having to keep updating their computers every few years and worse buy new software, surely they are willing to pay to keep what they have running well and to be well maintained. Why ?
There is more to the bottom line for a business than simply cheap software. Businesses want something that works, works well and lasts so they don’t have to keep reinventing how they do their work. The time it takes to retrain employees on how to do their job (using computers) costs money and once something works, you know the old saying “if it isn’t broken, don’t fix it”. Computers today often do some serious work and even some lives may depend upon it, so businesses need reliable software, so forcing the software industry to keep “reinventing the wheel” every few years, is a big mistake, a very big mistake. Why can I say this ?
The lessons from being a custom software developer
When I started programming in the late 1980’s and early 1990’s, I wrote custom software for local businesses. I have written software for local “mom and pop” operations (ie. video rental stores) to large corporations and manufacturers. I have written accounting software, manufacturing job tracking software, engineering software and quality control software. I recognized how expensive it was for a business to pay me to write custom software (even though I charged very low prices compared to my peers). I did something as a software developer that likely very few if any developers would ever consider doing today. I built the software they wanted at my own expense and when finished, they only paid me if they liked it and wanted to keep it. If they didn’t like it, I simply took the software back and they paid nothing. I never had one customer not want to pay me for the software. Why ? Because it did the job they required so well, that they literally had to have it.
Now the software I wrote, was a big investment up front for my customers. But I was planning on longevity of the software. If they only used the software for one or two years then it may not have been a good deal for them. But if they used it for many years, then it was a very good deal. My job was to help them maintain the software so it could grow with their needs. For example, one early customer had an application I wrote which they literally depended upon. It was written first in GWBasic, then later ported to QuickBasic 4.1 (so translation not too difficult) and when DOS went out of fashion, they used the DOS app for a few years until it was necessary to port the app to 16 bit Windows. I did this using Visual Basic, but instead of rewriting the app so it looked totally different, I did some tricks to make it emulate the old DOS app in look and feel, but with a few new Windows like features added. It was not a console app, but a real GUI app, but it worked so closely to what they had been using with the DOS app, that retraining was almost nill for the customer. I later created a 32 bit version of the app using Visual Basic.
Amazingly, the customer is still using this app today and he has commented to me that it works better than anything else on the market for his needs. So my app, while going through some changes over time, has lasted a significantly long time and that has made it a good investment for my customer.
One of the things I appreciate most about Windows is the decent backward compatibility is has. I understand that some things simply must change, but backward compatibility allows end users to make the choice of whether they want to stick with something that works or not.
The change to a tool developer
For nearly fourteen years now I have moved away from end user software to being a developer of tools for programmers. I built a commercial product (a GUI engine) for use with the PowerBasic compiler. So why BASIC ? Because many programmers have a long, long history with Basic, like myself. Much of the code they wrote 10, 15 or even 20 years ago still works, with little translation needed. Some of my best customers actually came from a DOS Basic programming background and they found it hard to make the transition to Windows. I designed my early tools to make it easier to make the transition from DOS to 32 bit Windows. I also made sure my customers had features which would be easily learned, knowing their background.
I also did something probably underheard of by most programmers. When my first generation of GUI tools were designed, Windows ME/2000 was the current Windows platform and in short order soon Windows XP became the primary Windows platform. Now I had a Windows ME and later and XP computer, but instead of developing on them, I chose to pull out an old PC with Windows 95 on it and it was my core development system for many years. Why would I develop on Windows 95, when most programmers were using the latest Windows XP ? I used a reversed system of development. I developed on the older platform, but tested on the more current. It allows me to see how well the software worked on the older platform. It allows me to test in real time how to leverage a newer platform, while maintaining backward compatibility on an older one. Because backward compatibility require calling WIN32 API’s at times dynamically (load a DLL using LoadLibrary and then get the address of a procedure if available and call it via pointer), it taught me a lot of how to overcome the differences between Windows platforms. The amazing thing though was that I was surprised to see how much of the WIN32 API remained unchanged over many different versions of Windows. Some of my best code used core API’s which have existed since Windows 95 and have remained unchanged even in Windows 8.0.
By developing my software this way, I guaranteed to my customers (who were software developers themselves) that the software they write will run on a wider range of Windows PC’s. This was very important since their customer base often needed this. Today, my core development PC is a Vista Home Basic PC, which I upgraded to 2 gigabytes memory and a slightly newer dual core CPU. I have Windows XP, Windows 7 and Windows 8.1 PC’s as well, but they are not my primary development systems. As computers become more powerful, I still though concentrate on backward compatibility and low system resource requirements. I have even for fun tried testing some of my software on a very, very old Windows 95 laptop and it worked better than I expected (I wasn’t expecting it would work at all, but it did, albeit very slowly). I even have some customers who prefer to use Linux with Wine and my tools have shown themselevs quite compatible with Wine.
So what does it all have to do with Windows 9.x ?
Backward compatibility has been one of Windows key secrets. Please read this article by Joel Spolsky ( http://www.joelonsoftware.com/articles/APIWar.html ) and you will better appreciate how much effort Microsoft put into backward compatibility. True they have broken to some degree with this concept in recent years, but if Microsoft would like to see the next version of Windows get praises from the business world, then they should seriously consider this path. So how could they do this ?
Go back and add new features to the core WIN32 API, but in a way that developers need not learn something new to use them. For example, the core system controls (ie. treeview, listview, listbox) should be reworked so they better support touch when it is available. Go back and rework any programming technologies which are still being used to develop software for businesses and make them available to developers ar reasonable prices. This will better allow longer maintainance of key business software. For example, bring back classic Visual Basic and improve it. It could be done and it could bring in a new generation of Basic programmers. Make classic visual basic theme ready and add better support for low level access to the operating system. Things like adding threads or subclassing to a VB app should be built into the language. Add native support for ownerdraw to Visual Basic.
But what about object oriented programming ? It will still be there for current programmers, but there is mounting evidence the OOP is not the panacea it has been touted to be. If you find this statement hard to believe, read my article about it ( http://cwsof.com/blog/?p=612 )
There are thousands, if not millions, of programmers who are still trying to maintain quality software using older technologies, which is vital for many businesses. There are many programmers who have spent a great deal of time learning technologies, like Silverlight ( http://www.microsoft.com/silverlight/ ), MFC, WPF, ATL. Microsoft needs to make Windows 9.x more friendly to not only newer versions of these technologies, but even older ones. This will make moving older software to the next version of Windows easier. Why should a business stick with Windows XP, if Windows 9.0 handles Windows XP better than Windows XP does, without the need for virtualization. If Microsoft could make Windows 9.x a better XP than even the original XP, then they would have something there.
Imagine a new version of Windows, where Microsoft could say, not many new features, but it runs your XP apps better than APP with more choices and is more reliable and more stable than XP !
Imagine Microsoft telling its business customers that their legacy software is still important to them and that Windows 9.x simply makes it better, rather than break it.
Is this really possible ?
Absolutely ! You see, I have been advanced WIN32 programmers for nearly 14 years now and know what the operating really can do and how it is very possible to make software (even an operating system) more dynamic and intelligent. True it would require some core changes to the operating system, but Windows was designed for such customization. I have found so many ways in the WIN32 to customize Windows apps and to build more dynamic apps. Much of it has been there since Windows 95, amazingly.
While consumers may be willing to waste money and buy the latest technology (and throw away the old) every few years, businesses are more rational and desire more longevity of their software. Even if Microsoft has to break off the consumer version of Windows from a business version, by concentrating on the needs of business and the importance of backward compatibility, then Windows 9.x could be a real success. Remember, that with very new piece of software or new technology, it also comes with its own share of bugs. Why not go back and make the existing core of Windows, simply better, more stable and more reliable.
Also, here is a little secret. In the era of mobile devices, there is a little secret which some may not have shared with you. Us old timers fully appreciate why a scripting language simply can never compare to a native language. The closer a programming language is to the operating system and the hardware, the better the performance. Watch this video on Channel 9 of a talk by a Microsoft C++ expert, Herb Sutter ( http://channel9.msdn.com/posts/C-and-Beyond-2011-Herb-Sutter-Why-C ) as he discusses the power of native coding. It doesn’t matter what languages you current use to appreciate this talk. I am a BASIC programmer, but I enjoyed it a great deal. Despite the compiler I use being BASIC, it is more akin to C (not C++) in nature. it is very low level. Yes, I work with things like threads, pointers, subclassing, superclassing, writing custom controls, etc, just like some C programmers. The video discusses why native coding is so important.
Native coders, especially on Windows, can produce applications which require minimal resources and are fast. The Windows operating system is a rich environment, with so much untapped power, it would likely surprise you. Microsoft kept changing technologies so fast, that few programmers likely have had the time to see much they could push the limits of the operating system. Just when classic Visual Basic programmers were learning how to tap into these deep resources (there were a lot of books about using the WIN32 API from Visual Basic), then the language came to an abrupt death. My biggest complaint about Visual Basic was that there were a lot of things I wanted to do with it, it was not designed for. But after spend nearly a decade and a half learning how to tap into the Windows API, I better realize how mucy untapped power there is in Windows.
Now many programmers today likely don’t think highly of classic Visual Basic programmers, but one thing you have to say about them. They were an energetic bunch, always looking for ways to push their favorite language to the limits. Many a hobby programmer used Visual Basic to make the jump to professional programmer and likely did things wity Visual Basic, that even Microsoft did not expect. I get the impression that Microsoft never viewed classic Visual Basic as a professional language, which may explain why they so easily gave it up. But to their surprise, it was used to write some very important business software, some of which is likely still be used today.
A good programmer is not one who constantly wants to throw away their favorite languages, just for the sake of the latest technology. A good programmer is one who used his experience to find ways to push his favorite language to the maximum. It takes time to gain experience and if every few years new technology makes what we have obsolete, then we will have less experienced programmers. Remember the old saying, “better to be the master of one trade than to be a jack of all trades, but master of none”. The same applies to programming.
So if I had one desire as a programmer, it would a new version of Windows (and developer tools) which was based on this concept. If Windows 9.x were to take this course, I would venture to say that businesses would not leave Windows for a very long time.