I've been on the road the past five weeks; the gypsy taxi drivers at La Guardia are starting to recognize me which is a clear sign that I've been back east far too many times of late. Happily, I'm home for a while which means that I can try to resume a rhythm. It usually takes me a day or two to get back in that rhythm, and having a long weekend did help me reboot.
Bill Gates recently waxed philosophic about the future of software, wherein he highlighted the importance of web services and voice recognition. I concur with him on the former topic, but am far less enamored of his predictions regarding speech-directed interfaces. Microsoft has poured a lot of money into speech recognition, but don't forget that IBM already holds a number of key patents in this space, some of which it has placed in the open source community. My skepticism comes from the observation that a lot of this technology is already mature (ever managed a flight by phone on United Airlines?) and that the two remaining really hard problems (extraction of conversion in a noisy environment and semantic understanding) are both, IMHO, still deeply wicked problems whose solution is a long way out. Furthermore, simply slapping a voice interface on top of a bad user interface does not a paradigm shift make.
One of my trips this past month led me to a summit with a number of other senior Rationalites, one of whom made the observation that to speak of a system as software-intensive is rather redundant: virtually all interesting human-made systems are already software-intensive. Indeed, most of the world's health care systems, transportation systems, war-fighting systems, financial systems, and so on involve a considerable amount of software, some parts of which operate totally autonomously and others of which involve a human in the loop whose actions and reasoning are augmented by software. It used to be the case - perhaps as recent as two or three decades ago, a mere generation in time - that what we defined as the scope of software was quite narrow. That time is long past: software now touches virtually every part of modern civilization, and as such the field has grown larger and more fragmented.
There are some common threads among all the domains of software and the SWEBOK has attempted to codify some of those concepts and best practices - but I won't get into my opinion of that effort here.
Stepping back from the daily blocking and tackling that developers do in any one of these specific domains, I'd also observe that in the context of that fragmentation, some sectors of software are quite vibrant (games, robotics, mobile devices, in-car electronics, military systems, to name a few) while others are at a plateau (many enterprise systems, for example; the problems therein are mostly ones of execution, with some sparks of deep innovation on the fringes of and spaces in between systems) and some are in the process of commoditization (operating systems, personal productivity tools, tools for the individual developer). In light of recent announcements by SAP and salesforce.com another of my colleagues, Gary Cernosek, recently raised an intriguing question: what is the emerging platform for application development? I agree with Gary that the important war is not being fought between Windows or Linux (Windows is fighting a losing battle), Java or .NET (Microsoft has publicly acknowledged the decline of innovation in .NET) or even Eclipse or Visual Studio. Rather, what SAP, salesforce.com, AutoSAR, DoDAF, and many others are showing is that the real action is beginning to swirl around domain-specific application platforms or frameworks. In the case of SAP, it's NetWeaver; similarly, Oracle is pushing its packaged solution in the form of Fusion.