Over the last few months, I have written about some of the changes occurring in the development landscape. Some of the other writers in TechRepublic's Programming and Development space have also been approaching the same topic with hands-on articles, such as Tony Patton's recent piece on Silverlight 2.0, and Peter Mikhalenko's continuing articles on various Java APIs. Today, I want to touch on the concept of reflexivity.
Reflexivity, in a nutshell, is the idea that when many people believe something is going to happen, they unwittingly cause it to happen. The idea originated in economics, and I first stumbled across it in a piece about stock prices. In the stock market, when companies fear that a crash may be coming, they take certain measures (such as cutting back orders of stock or laying off employees) that play a significant role in creating a stock market crash.
We all know who the 800 lb. gorillas in IT are: IBM, Oracle, Microsoft, Sun Microsystems (which is slimming down to be a 500 lb. gorilla), and so on. Now, how many of these gorillas are really involved in what programmers do? Or, you might think about where the tools and languages you use originate. It's a pretty short list. If you are a Java developer, your language comes from Sun, and your tools are either Eclipse (originally an IBM AlphaWorks project), JDeveloper (Oracle), or NetBeans (Sun). PHP developers seem to stick with text editors of some variety or another, by and large. This leaves nearly 100% of Windows desktop application developers, and probably 30% - 60% of Web developers using one tool: Microsoft Visual Studio. Talk about an 800 lb. gorilla!
Microsoft has conclusively proven through The Great ActiveX Debacle that it is incapable of ramming anything down the throats of developers that developers have no use for. Even UAC isn't enough to get programmers to start following the guidelines and guidance that Microsoft has been giving for more than five years. A huge number of apps are still being maintained in classic ASP and VB6, despite the huge advantages in moving to .NET; heck, .NET 1.1 seems to be the dominant version. Windows Vista is still struggling against the success of Windows XP. So, clearly, just because Microsoft thinks something should happen does not mean that it will.
Microsoft is not completely powerless either. When Microsoft decided that ODBC was the way to connect to databases, it happened. When Microsoft got serious about entering Web development, it went from a provable 0% market share to probably 30% - 60%, depending upon who you ask. When Microsoft released VB3 around the same time Borland released Delphi 1, it was able to reverse what should have and could have been Borland's ultimate triumph into the beginning of the end for Borland as a development tools company. Microsoft was an early AJAX pioneer (Outlook Web Access is still quite slick), and it pushed hard for Web services, and we live in the world of AJAX and Web services today.
I believe that when Microsoft thinks things should change in a particular way, it happens, providing that none of the alternatives are exceedingly better. In other words, people find it much easier to go along with Microsoft's vision that the vision needs to be pretty murky for people to resist it. Largely, Microsoft's vision has been good, despite frequent botches on the implementation end.
Right now, Microsoft has a particular vision. There are others with it as well, but Microsoft is the only player pushing this combination of changes. And what is this vision? It can be broken down into the following pieces.Multithreading: Microsoft's analysis of the CPU situation is that clock speeds on a per-core basis are not going up very much, but the core count per physical CPU is continuing to rise to keep up with Moore's Law. Microsoft is placing huge bets on development tools for multithreaded development -- some in the C/C++ world and some in the .NET arena. When mobile devices get multi-core CPUs, these tools (especially the .NET tools) should seamlessly transition to those platforms as well. Microsoft has been on a massive hiring spree, managing to snag lifelong academics with specialties in parallel computing and the mainframe world and getting them working on research. Functional languages: F# is just the beginning. LINQ brings many trademark techniques of functional programming into VB.NET and C#. IronPython and IronRuby are both efforts to productize research and development of dynamic languages with heavy functional tendencies. The push for functional languages and their techniques ties closely to the multithreading angle, since functional languages lend themselves especially well to multithreading. Look for a big push on F# in the near future; its lazy evaluation makes it a perfect target for automagical parallel processing without programmer intervention. Microsoft has been hiring heavily in this area as well. Mobile computing: Microsoft has nearly wiped Palm off the map. Microsoft has also signaled that it envisions a world in which a significant portion of "real work" occurs on mobile computing devices. Looking at Microsoft's research into Human/Computing Interaction (HCI) shows that the majority of the company's curiosity is around finding newer and better ways of interacting with alternative form factors, primarily mobile devices, but also non-mobile devices such as Microsoft Surface, the giant table computer. Microsoft has been hiring here too.
When we think of major bets that Microsoft is making, we think of things like the aborted Yahoo! acquisition, Windows Vista, MSN vs. Google, and so on. The reality is, those are just sideshows. The real game is being played for the hearts and minds of developers, same as it always was. The x86 dominated due to the software than ran on it and not on its own technical strength. Ditto for the Windows operating system on the client side and Windows Server and *Nix in the server rooms.
Remember "embrace and extend?" That refers to programming, not networking or hardware. What about the famous Steve Ballmer "monkey boy" dance? He was chanting "developers, developers, developers!" not "networking engineers and system administrators!" Let's get some perspective folks. We're the programmers. At the end of the day, the entire IT industry must be focused around catering to us, and we ultimately (and hopefully) serve the end user. It's simple, really -- we're the only ones who are trying to directly meet the end users' goals. Everything else simply supports that. A PC without software is useless. A network without bits flowing over it is useless. But we can write software for any platform that can communicate over any network and, for a while, we didn't need networks. It is development in software that drives the deployment of new hardware and new networks, not the availability of enabling new software. The user doesn't care if you are using a PowerPC or an x86 CPU -- they care about running the apps they want. Ditto for networking technologies.
Microsoft's really big bets are in development tools and not the OS or the hardware. What bets are Microsoft making on the OS front? The company's only bet is, "Users will stick with Windows." In hardware, the company still sells mice and keyboards, and it will work with any hardware vendor if there is money in it. But development? Microsoft has been doing so much hiring that it is pushing for the H-1B vis pool to be expanded. Take a look at Microsoft Research's Web site, and you will get an idea of that the company is working on. Very little of it has to do with traditional desktop computing or even traditional client/server computing. A lot of it is about mobile computing, multithreading, and functional programming languages. Microsoft is betting that developers are going to transition away from both Web applications and traditional client/server applications in favor of RIAs. At that time, Microsoft expects that the paradigm will be, "major, parallel processing on the server, traditional desktop app loads (possibly with parallel processing) on the client side, in a mobile computing form factor." It is not that Microsoft has given up on the desktop, but I think the company takes its domination in that arena for granted now.
Bill Gates is just about out. Jim Allchin is out. Paul Allen is out. Steve Ballmer could very well decide he's through at any moment too. Ray Ozzie and Craig Mundie are carrying the torch, by and large. The question is not, "Do they know the vision?" but rather "Does Microsoft carry enough weight to make this happen?" And the answer to that question is, "quite possibly." While Microsoft has lost an awful lot of credibility lately, particularly with regards to Windows Vista, it is the largest employer of truly brilliant people in the industry, and the only player in the industry left with any kind of substantial R&D budget. If any innovation is going to happen -- that is, if it happens at a mature, established company and not a startup -- it will most likely happen at Microsoft.
Microsoft is trying very hard to be the cause and beneficiary of reflexivity, but can the company create enough demand in the minds of developers so that its vision transitions to a state of self-fulfilling prophesy? Only time will tell.
J.JaDisclosure of Justin's industry affiliations: Justin James has a working arrangement with Microsoft to write an article for MSDN Magazine.
Justin James is the Lead Architect for Conigent.