More than ever before, today’s developers are open to considering and using multiple technologies to enable them to build solutions smoothly and deliver them to their customers quickly. There are an increasing number of choices available for developers in terms of programming styles. Our goal is to provide fantastic support for all programming styles within our tools to enable our customers to build great software.
Several trends are emerging within the area of software development. Below are some of the most important trends I’ve been thinking about recently. This list isn’t comprehensive of all software trends, but each one represents an area that Microsoft is currently or will be investing in to bring to our customers.
Cloud computing allows companies to leverage just the computing resources they need today, scale up to handle peak loads, and avoid the overhead of managing hardware. Cloud computing levels the playing field for small companies to compete against large, established companies at a reasonable and predictable cost. Windows Server, Windows Azure, SQL Azure, and services such as Windows Live, Office, and Xbox Live are now live in the cloud. Microsoft has committed to bringing the best cloud computing platform and services to the Windows ecosystem. The cloud is just one example of a virtualized computing platform, and the next generation of developer tools must enable developers to build software that deploys and performs well in cloud and other virtual environments.
The Web as a Platform
Moore’s Law, the prediction that CPU performance would double every eighteen months, is now fulfilled by adding more processor cores rather than by increased performance of a single core, bringing the power of multi-core processing to low-end machines. New trends in computing take advantage of inexpensive and widely-available desktop graphics processors for certain tasks. At the high end of processing ability, supercomputing centers are leveraging clusters to perform complex computational tasks. Today, a small handful of programmers have the skills to write code that performs well in multi-core and many-core environments. In the future, parallel libraries, debugging, profiling, and diagnostic tools will enable more developers to take advantage of parallel computing resources.
Proliferation of Devices
With the increasing availability of inexpensive devices that connect to the internet, we all want to access and interact with our data in ways that are appropriate to our devices’ capabilities. We expect to access our online identities and data easily and securely on all our devices. Today, Microsoft provides access to users’ data via Windows Live and Xbox LIVE. With the proliferation of devices has come a proliferation of user interface paradigms that enable natural and intuitive interaction with those devices. As touch-based, speech-based, and camera-based solutions become available and cost-effective, Microsoft is evolving software to take advantage of these capabilities to build intuitive user interfaces. Windows 7 provides great support for touch-enabled applications in the platform. Silverlight and WPF have embraced camera-based interactions and multi-touch, as has MFC. I expect user interface paradigms to continue to evolve and become more intuitive and powerful.
Agile Development Process
Agile development processes, including Scrum, test-driven development, and continuous integration are commonly used in the enterprise and smaller development shops, often in combination with other development practices. Within Microsoft, many teams have integrated elements of Agile development practices to their process. Visual Studio 2010 opens the door for Agile methodologies, offering support for some Agile processes such as unit testing and iteration planning. We will continue to support more Agile methodologies going forward as well.
Distributed development enables team members to work closely despite geographic separation from each other, bringing together worldwide talent to seamlessly work toward a common project or goal. The experience of a team working across time zones and borders should be as good as the experience for a single developer, but also includes supporting cloud-based development activities such as distributed code reviews, remote paired programming, developer/tester collaboration and resource sharing. Great distributed team development tools will enable developers to build the next generation of software, leveraging the worldwide talent pool.
These trends don’t represent a complete list of influential factors for all areas, but are some of the areas we feel can move software development forward. I welcome your perspective: which of these trends do you feel will be most important in the future? Are there trends you think should be included in this list? Leave a comment with your perspective.