t this past week's sold-out Professional Developer's Conference (PDC) in Los Angeles, Calif., Microsoft delivered a huge range of announcements, demos of new features and hardware, upgrades to existing product lines, and a new cloud computing strategy called "Azure," promoted as nothing less than a new "tier" for developers and organizations to target.
The week began with Monday's keynote by Ray Ozzie, Microsoft's new chief software architect. With a full house of paying developers, Ray opted to target his entire keynote toward Azure. Over nearly two hours, the only developer involvement he discussed was to "push this button to deploy in the cloud." The audience provided some weak applause, but most didn't get the keynote content they really wanted until the next day, when Steven Sinofsky, senior vice president for Windows and Windows Live Engineering, and Scott Guthrie, corporate vice president of Microsoft's .NET Developer Division, took the stage.
Sinofsky and Guthrie presented Windows 7 by demonstrating a pre-beta version of the upcoming operating system, including its multi-touch capabilities, discussed the upcoming Visual Studio version 10—partially rebuilt in WPF, and showed Silverlight 2.0 and the upcoming Live Services versions of Office. This keynote felt more like the PDC, with developers applauding enthusiastically for most of the announcements and demos.
Four Themes to Follow Up On
As usual, most of the good information surfaced in the sessions. While there was far too much detail to cover comprehensively in one article, PDC presented four overarching stories that definitely should be on your radar:
As single-processor performance improvements diminish, Microsoft has a new focus on programming for multi-core processors, which require developers to take a proactive role in improving the performance of applications running on them. Microsoft's Task Parallel Library (see Rod Stephens' article series for more information) enables them to do that today, but Visual Studio 10 takes concurrency support much further, building in comprehensive performance analysis and debugging support for concurrent programs. This support lets you see which threads are executing on which cores, zoom in on individual threads, and even jump to the code that was executing at a selected point on a specific core. Microsoft also has extended Linq for concurrent queries in a form called Parallel Linq (PLinq).
Windows 7 itself supports up to 256 processors, so obviously Microsoft believes that multi-core support is important going forward. Despite this new help, parallelization and concurrent programming remain tough challenges, but at least tools that can help are beginning to appear. Still, we're a long way from simply telling the compiler to optimize everything for multiple processors. Exploring this is well worth your time.
WPF was everywhere at the PDC, from Windows 7 to Microsoft Surface to Silverlight to Office Live. It's clear that Microsoft's strategy going forward is to continue to focus on and expand WPF. Nearly every demo used WPF, not Windows Forms, as the underlying UI. To support this, Visual Studio 10 contains a much-enhanced XAML visual editor, and for both designers and developer/designers, Microsoft committed to continue improving Expression Blend. Developers who haven't yet started exploring WPF and XAML should start—today.
User and Computer Environmental Interaction
Although touch-sensitive screens have been around for a long time, they're really just now beginning to reach the mainstream. Microsoft's table-top "Surface" product had a large presence at the show, with numerous setups around the convention hall where attendees could play with the existing applications, as well as a hands-on lab. Beyond Surface, which is proprietary and expensive, Windows 7 gains multi-touch capabilities, and at least one vendor is already selling multi-touch-capable hardware at more reasonable prices.
It's worth noting that not all touch-sensing mechanisms are equivalent. Surface uses several cameras, while most touch screens use electronics to sense touch. Surface is also capable of recognizing objects placed on the table.
Beyond touch, computers are beginning to gain other methods of interacting with the environment. Many mobile phones have had GPS capability for some time; that feature's beginning to move into laptops and netbooks. Light sensors measure the intensity of ambient light and can adjust your screen accordingly. In one of the more popular sessions, "Windows 7: The Sensor and Location Platform: Building Context-Aware Applications," Microsoft's Dan Polivy, lead program manager, demonstrated how a WPF UI could interact with the light sensor, adapting to the ambient light levels to help keep a laptop screen readable—even in bright sunlight.
Accelerometers measure acceleration in any direction, giving Wii-like capabilities to handheld controllers, and helping computers determine location even when a GPS signal is unavailable. Obviously, having your computer recognize where it is provides a huge number of programming possibilities, not only integrating it with mapping, but also helping adjust time zones automatically, or find nearby businesses. Because of location-based computing's tie-in with advertising, you can expect this to be ubiquitous in the future. Windows 7, as you probably guessed from the session title, gives you access to all sorts of sensor values through a C++ API that—while not yet integrated with .NET—is accessible to .NET developers through a wrapper.
Despite Microsoft's best efforts to rename cloud computing as "Software + Services," they have finally given in and introduced "Azure Services" as their entry into cloud computing. Azure is an enormous effort to get developers and businesses to use Microsoft as their cloud-based host. Typically, Microsoft has made it easy for developers to opt into Azure; in fact, they made it free (for a limited time) for PDC attendees. You can write and test your program locally, then deploy it to Azure, which runs on thousands of Microsoft servers at datacenters around the world, making it not only instantly available to the entire Web, but also instantly scalable to an essentially unlimited audience. Azure includes several main parts: Microsoft .NET Services, SQL Services, Live Services, SharePoint Services, and Dynamics CRM Services. You can try Azure now by downloading the SDK and registering.
Azure, similar to other cloud-computing entrants, doesn't address some of cloud computing's main problems, which are legal, not technical. These involve not just security and reliability—vendors are quick to assure you that your data's secure with them and that they can reliably provide near 24/7 accessibility—they also include various rights and privileges associated with data and the metadata that applications generate. Still, big questions remain around who can do what when your programs run on someone else's hardware and your data resides in someone else's database. For example, can the host search your data? If so, what can they search for? Because the host has access to both your code and your competitor's code, can they collect metadata about the performance of that code? Can they collect information on who's accessing your programs and use that to target your users with advertisements? Can they sell such results? If a breach occurs, and a customer sues your organization, does the host share responsibility? If a customer goes out of business, what happens to the data? Who owns it? If there's a payment dispute, what are your legal rights to the data already stored in the cloud? These and other questions will continue to "cloud" the entire issue until they work their way through the court system.
None of these questions, of course, detract from the technical achievement of Azure, which is considerable.
In a welcome strategy shift, rather than handing out DVDs full of code, Microsoft provided each attendee with a small-form 160 gigabyte portable hard drive packed full of all the goodies. In addition to a pre-beta of Windows 7, attendees got early access to new VB and C# versions, a pre-beta copy of Visual Studio 10, access to Azure, with code and examples, the Windows Sensor and Location APIs, and more. Here's a more complete list.
New .NET Language Features—and Detente
The big language news is that the Dynamic Language Runtime (DLR), which supports dynamic languages such as IronRuby and IronPython, is built into the .NET Framework 3.5. Those languages become "first-class" languages within .NET. Even better, that both C# and VB are being retooled to take advantage of the DLR. C# gets all the "VB-like" features that it hasn't had before, such as optional and named arguments, an "immediate" window where developers can write and execute code without compiling a complete test app, and a new type called "Dynamic" that lets the compiler determine type at runtime.
Both languages gain interoperability with dynamic languages. For example, you can create a Python engine in code, pass some arguments out to an existing Python library, and consume the results.
Perhaps Microsoft's most important language announcement was that, going forward, C# and VB will "co-evolve," meaning that whenever they add new capabilities to one of the languages, they will also add the same capabilities (although not necessarily in the same way) to the other.
It'll be nice to finally end that war.