There are some people who always have to be on the bleeding edge of technology, such as for Visual Studio and the .NET Framework. But this is not the case for most developers, and that goes double for development teams that have to deliver solutions according to a schedule, however unreasonable that schedule might be.

Keeping up with every single release takes a great deal of time and effort. It is easy to skip a version, then two, and before you know it the articles and screenshots no longer make sense, and the assumptions about things make even plain English inscrutable.

It is important to get back on track by understanding what you are missing and where to look when ramping up. The latest version of the Microsoft development platform enables new things to be done, but there are also things that cannot, or can no longer, be done with it. There is nothing quite as frustrating as finishing a project and realizing that your favorite deployment mechanism is no longer supported (hint hint).

The very best reason to move to Visual Studio 2012 without delay is that Visual Studio 2012, like Visual Studio 2010 before it, allows you to target the version of the .NET Framework that you want instead of only the one that ships with Visual Studio. To this point, David Yack, CTO of Colorado Technology Consultants (a Colorado-based Microsoft consulting firm), said, “I think it is important to separate moving to Visual Studio 2012 and moving to .NET 4.5; we have moved to Visual Studio 2012 as fast as possible. Moving to .NET 4.5 has been slower, because unless you need a feature it offers, there really is not the same motivation.”

The freedom to target different framework versions allows his firm to take advantage of the little changes that make for better productivity. He maintains that even faster startup or small feature changes in the editor make it worth moving as early as projects and schedules permit.

Some organizations require following the “first service pack rule” to ensure stability before adopting anything new, but even those organizations can tamp down the learning curve by starting familiarization early. If you go this route, Yack suggested that you have a couple people on the team lead the way and use it for a couple of weeks, so when the rest of the team jumps in, they are not all learning and can have people on the team to ask how to do specific tasks. The ability to install and try out multiple versions of Visual Studio side by side makes it fairly inexpensive to take this approach.
#!
C++ renaissance
When Microsoft first starting hinting at the developer technologies in the wave that would accompany the release of Windows 8, there were some mysterious statements at the time concerning C++. The promise was that C++ would become a first-class citizen in the family of languages in Visual Studio, along with Visual Basic and C#. For a decade, the tools have improved for Visual Basic and C# in a relentless and often competitive drive between the teams that support each language. The reality is that in Visual Studio 2012, much of the ground has been made up with C++ because Microsoft wanted to widen the scope of potential developers for Windows 8 applications, and make sure that great performance was attainable.

VS 2012To understand just how far C++ has come from behind, I discussed the current situation with Kate Gregory of Gregory Consulting. She is the author of “C++ AMP: Accelerated Massive Parallelism with Microsoft Visual C++,” as well as a number of C++ and Visual Studio courses available online at Pluralsight.com. When asked why her company is using Visual Studio 2012, she said, “Most of our new development at the moment is in C++, native code, not .NET. And for these projects, Visual Studio 2012 brings us a number of very important C++ 11 features, along with C++ AMP and support for developing apps that target the Windows 8 store, Windows RT and Windows Phone 8.”

She explained that C++ 11 is like a whole new language, an evolution of C++ that has made the resulting language readable, safe, easy to use and indisputably the fastest at runtime. Knowing that I would be slow to believe that C++ is now easy, she emphasized that pointers and many of the harder artifacts of old-style C and C++ are no longer parts of the picture.

The claims of better performance with C++ have always rung true because there is the tradition of C++ being closer to the metal with fewer layers of abstraction between the programmer and the hardware. By all accounts, this is still true today, but the real story is the performance gains to be realized with C++ AMP, which Gregory pointed out “can speed up parts of your application up to 100x by moving the parallel work into the GPU.”

AMP stands for Accelerated Massive Parallelism, and it lets you perform lightning-fast calculations for workloads that fit the proper profile that allows the Graphics Processing Unit (GPU) to be efficiently loaded up with waves of the calculations.

The GPU in modern computers has enabled fantastically realistic experiences. This is because physics calculations, lighting effects and rendering tasks fit well into the kinds of tasks that the GPU does well. Another area that has successfully used the GPU is cryptography. For example, if you want to crack encryption, you have to run all potential possibilities through the same calculation. Ultimately, if you have many repetitive calculations that can be loaded and unloaded en masse, then the really high-performance improvements described are attainable if you are willing to use C++.

Aside from the performance boosts, the biggest updates for C++ developers are the features in the Visual Studio IDE that have made C# and VB.NET development so easy over the last decade. C++ projects can now be jump-started thanks to project and item templates. Once the project is created, it can load asynchronously for faster startup. IntelliSense has become a must-have feature, with Microsoft bringing this time-saver to virtually every editing interface. That includes C++, which compliments the list functionality for objects so that developers can easily choose relevant members from objects.

There are other features as well, from Architecture Explorer to unit-testing with C++, and it all adds up to C++ developers really being caught up in a single version. Gregory summed up our conversation by saying, “A native developer who stays on older versions of Visual Studio is missing all of these great capabilities.”

Building blocks, from NuGet to design patterns
Developers who have been using Visual Studio over the years are accustomed to building applications from component parts like a Lego sculpture. Controls, libraries and frameworks each joined the ranks of the pieces that could be brought into a project to form the solution. This capability, though, also brought a drawback in the form of the extra work required to get the proper libraries installed or in place so that they can be leveraged.

This is a world familiar to Java programmers and one that Microsoft developers do not enjoy navigating. To help solve this problem, NuGet was introduced in 2010 to provide package management for .NET libraries. Approximately a year earlier, Microsoft announced the Web Platform Installer to solve this same kind of problem for Web components, including Internet Information Server.

NuGet is a more broadly targeted package manager developed by the Web Platform team at Microsoft that allows third-party libraries to be registered for easy deployment, and it has been quickly adopted by a wide audience. For prior versions of Visual Studio, NuGet is easily installed by going to visualstudiogallery.msdn.microsoft.com. With Visual Studio 2012, you can even skip this step, since NuGet is already integrated. I normally see this integration in the context menu presented when right-clicking on the project node in Solution Explorer and choosing “Manage NuGet Packages…” (see Figure 1).

Beyond package management, there has also been the shift toward design patterns. Years ago, developers built client-server applications that evolved into three- or even n-tier applications. These days, the concept of design patterns allows developers to find the right size for the architecture of their solutions without changing the way they do all their development. The evolution of MVC is a prime example of this transition to using patterns to emulate and implement well-understood solutions to complex problems.

The Microsoft Patterns and Practices group has regularly released tools and frameworks that have implemented useful design patterns so that developers do not have to convert everything they do while still benefiting from the right solution for complex problems. This will likely be even more critical in the future as we try to leverage the raw power that even basic systems provide due to their multi-processor and multicore nature.
#!
Team Foundation Server
No conversation about productivity gains with Visual Studio 2012 would be complete without talking about Team Foundation Server (TFS). For many development teams, the capabilities in TFS have motivated them to keep pace with new versions of Visual Studio, especially when managing larger projects with teams of technical resources. For additional insight, I turned to Richard Hundhausen, who is a Microsoft Visual Studio ALM MVP, a Professional Scrum Trainer, and the author of “Professional Scrum Development with Microsoft Visual Studio 2012.”

I asked him where TFS stands relative to other developer collaboration tools in the space. He said, “The ALM tools in Visual Studio 2010 were enough to move Microsoft to the upper-right leader’s quadrant in Gartner’s 2012 ALM Magic Quadrant report. Visual Studio 2012 adds to this capability in many ways, especially for Scrum teams. We use and recommend Visual Studio 2012 for Scrum teams doing any kind of .NET development, or using tools that can integrate with Team Foundation Server 2012, such as Eclipse.”

TFS is a powerful set of tools that has replaced Visual SourceSafe as the Microsoft source-control offering. Leveraging TFS as your organization’s source control is a good way to get your feet wet with it, but beware ignoring the rest of its capabilities. Hundhausen pointed out that he sees too many teams doing Scrum and using Visual Studio 2012, but not together. “They may use TFS for source control and automated builds, but are still using whiteboards or sticky notes to plan and track their work,” he said. “While this is perfectly fine, they are missing the boat when it comes to traceability, auditing, and reporting requirements.”

Visual Studio 2010 started the process of Web-enabling the team development functions that Visual Studio 2012 has taken much further. Figure 2 shows the Team Web Access interface that is part of TFS 2012. New to this version are greatly improved interfaces for the project-manager role, including replacing the spreadsheet interface from 2010 for managing product backlog and iteration backlog by project. Hundhausen finds the Web-based agile-project-management tool improvements to be the handiest aspect to Visual Studio 2012 because “They allow a Scrum Team to visually manage their Product Backlog, Sprint Backlog, and tasks using drag-and-drop.”

Though Hundhausen admitted that it took a while to get used to the IDE, the functionality of Visual Studio is greatly improved. “Everything just feels faster,” he said. “The new testing experience is slick and can run tests continuously. It can even run tests from your favorite framework (NUnit, xUnit, MbUnit, etc.).”

John Alexander, managing partner of AJI Software and co-host of “The AJI Report” podcast, {http://ajisoftware.com/podcast} is also a proponent of the advantages to development teams to be gained by leveraging TFS. He stated, “The productivity gains from TFS have long allowed our teams to be faster at generating quality code. Team Foundation Server 2012 adds to this geometrically with the multitude of enhancements that enable us to communicate status and progress to both our clients and within development teams faster than ever before.”

Hundhausen summed it up by saying, “If the team is already using TFS, an upgrade to 2012 is a no-brainer, especially for Scrum teams. The Team Explorer window is more integrated and cares about the context of your work, allowing a busy, multi-tasking developer to suspend work, put out a fire, and resume right where he or she left off.”
#!
Windows 8
Windows 8 introduces its own type of application supported by the new WinRT platform, which strangely enough is hard to refer to since the official marketing name has become unavailable due to it being trademarked by a company in Germany. (For that reason we do not call them Metro-style applications anymore.)

Many now call them WinRT or Win 8-style applications rather than use the term Modern UI that Microsoft seems to be pushing of late. Some Microsoft employees have even referred to them as Windows Store apps, but that seems to add more confusion since technically .NET applications can also be listed in the Windows Store (though some will only be listed as links to download websites and not directly installable like WinRT apps). There are .NET for Windows Store apps that are required to use a limited set of classes to qualify for installation directly from the Windows Store. There are big parts of the .NET Framework unavailable in this case, as even data access via ADO.NET is not available if you choose this path.

Even if you do not plan to build WinRT apps, this is a topic that bears paying attention to because a great deal of the innovation described here is the result of Microsoft betting big that WinRT applications will help them disrupt and capture the tablet and app market. Alexander said, “Several of our clients are interested in building apps for WinRT, so Visual Studio 2012 is required equipment.”

This move is also pushing the emphasis on asynchronicity in the .NET Framework 4.5, because one imperative to Microsoft’s plan is responsive user interfaces, and that requires anything taking too long to be able to be run as a callback. This helps keep the interface responsive. For now, WinRT applications are the only option, aside from browser interfaces with the editions of Windows 8 that run on the ARM processor. But they are also limited to only running on Windows 8, meaning that they represent yet another option for developers, but not a unifying option.

As we will see in the next section, there are new features in version .NET Framework 4.5 that help ameliorate this aspect. According to Microsoft, sales of Windows 8 in the first month are promising, and the Surface system has piqued interest in some circles, but it is hard to really know how this bet by Microsoft will play out in the market.

New .NET features
Each new version of Visual Studio has introduced a new version of the .NET Framework starting in 2001. The difference in the case of Visual Studio 2012 is that the .NET Framework version it provides (4.5) is not side-by-side compatible with the version that came before. Technically, .NET 4.5 is an upgrade to .NET 4.0, so while they are functionally consistent for the vast majority of situations, there are some things that are not the same at the base level.

Portable Class Libraries allow code to be shared across platform implementations. For example, if you want to build an application and provide interfaces to both Windows Phone and WinRT, the Portable Class limits the types to those that are common across the targets. This is limiting on one hand, but protects you at the outset from expecting something that will not be available.

Parallel programming has taken another step forward with .NET 4.5. First introduced with .NET 4.0, the Task Parallel Library (TPL) recognizes that systems today are multi-processor and multicore, but it is intensely difficult for a developer to take advantage of this without becoming an expert on threading. The improvements in parallel processing are the source of the Async capabilities that are a major theme for WinRT applications’ ability to ensure that the UI is always responsive.

Windows Presentation Foundation (WPF) got some love in the form of a new Ribbon control, the ability to bind data to static properties, and data-binding custom types that implement the ICustomTypeProvider interface. There are other changes that are clearly just fixing past oversights, like the ability to check if the data context of an item container is disconnected.

Windows Communication Foundation (WCF) also got contract-first support (allowing developers to define how systems will be called, then generating content from that), simplified configuration files, and WebSocket support for bidirectional Web communications over HTTP and HTTPS. Overall, WCF got about twice the attention that WPF did in this latest Framework version.

Core .NET Framework classes got some minor tweaks as well. They vary between incremental updates to controllability, such as being able to set the default culture for an application domain, to deep system-performance improvements such as better background garbage collection for servers. In this regard, .NET 4.5 does feel like a service pack for .NET 4.0, and given the version number and fact that they are not side by side, that seems about right.
#!
Installer dilemma
Developers who provide installation packages to their users have historically had the ability to choose between using one of the various commercial installer packages—such as those available from InstallShield and Nullsoft—versus taking advantage of the setup projects available in prior versions of Visual Studio. Things have changed now that Visual Studio 2012 no longer provides the ability to choose this latter option, because the setup project templates have been removed.

There is another alternative for those of us who have depended on setup projects: WiX, which stands for Windows Installer XML. WiX is a SourceForge project that lets you create your own Windows Installer package. For the latest version of this open-source tool, check out wixtoolset.org. WiX looks more attractive once you are aware of the fact that the field of commercial installer packages has narrowed since Symantec withdrew Wise from the market in 2010.

The good, the bad and the ugly
There is a great deal of good stuff for developers that should drive them to use this latest version of Visual Studio and the version of the .NET Framework that comes with it. As we have seen, the story is not all roses due to the need to adjust to the loss of the setup project, though that is not enough to dissuade most from moving up to this latest edition of Visual Studio. More than a few people have expressed distaste over the new interface in terms of the colors and the use of all caps in the menus.

Colorado Technology Consultants’ Yack said, “The ALL CAPITAL letters in the menu and the lack of most of the color on the icons takes some getting used to, but the ability to simply search for a command you are looking for using Quick Launch makes it easier to find things that have moved around.”

There will be foibles in any new version of a popular software product, but there just is not an option to sit on the sidelines in this case. Visual Studio 2012 brings too much to the table for developers and development teams to ignore it.