Jim Newkirk and I have been doing xUnit.net for 7 years now (and for Jim, NUnit for many years before that). You could say that open source is part of our blood, and when we left Microsoft, we made sure that open source would continue to be part of our daily efforts at Tier 3.
Fast forward 15 months: Tier 3 has been acquired (and is now the CenturyLink Cloud Development Center), and our first major open source effort Iron Foundry has been accepted into the Cloud Foundry Incubator project. Lots of great developers are working to ensure that you can write .NET code against a Platform-as-a-Service stack that doesn't lock you into a specific vendor.
Disclosure: I was offered a free electronic copy of this book in exchange for this book review. The publisher had no input on the review.
Parallel processing is one of the most challenging problems for the modern developer. The first time you start creating threads, you open yourself up to a whole host of problems, including deadlocks and data corruption. The ASP.NET team went to great lengths to hide all the difficulties of multi-threading by presenting a programming model that allows developers to reap the benefits of multi-threading without sweating most of the details. Similarly, the Task Parallel Library – introduced in .NET 4, and greatly improved in .NET 4.5 – attempts to bring that same level of abstraction without diving deep into the threading details.
They say that writing a book is a hard way to make an easy living. This is especially true for technical books, which tend to have a short shelf life.
For me, the process was made easier by having three great seasoned authors to work with. We updated all the existing chapters of this 4th edition to cover ASP.NET MVC 4, and we've added three new chapters covering Membership & Security, Web API, and the building of the NuGet Gallery site using MVC. I like to think of this book as my Microsoft swan song. :)
It's an unexpected journey that brought me here. In 2004, my friend Peter left Denver for Seattle, to take a job at the patterns & practices group, and my parting words to him included: "If you guys are hiring, let me know." I'd just bounced out of a startup that we spent 2 years trying to make succeed, and was doing contract work for a friend. I'd also just gotten separated, and I was looking for a change. Microsoft felt like this mythical place where all software developers should want to work at some point in their lives, and it was my time. Six months later, he called, I interviewed, and away I went.
I'd never been much of a big company person. I still don't think of myself that way, despite 7.5 years at Microsoft. I had my share of complaints about the residual effects of working in a big company (the review system being the by-far worst of it, especially since it's something more fit for 20th century manufacturing than 21st century software development). Some of it, though, has to be attributed to the fact that Microsoft isn't a big company... it's a dozen big companies. And it's not a dozen big companies, but thousands of small companies. As an individual contributor in particular it's easy to pretend that the company is your project, or your group, and ignore the other 90 thousand people.
I count myself lucky that I worked on three amazing teams at Microsoft. Throughout my time at p&p, CodePlex, and ASP.NET, I made several life-long friendships with terrific people like Peter, Scott, Jim, Jonathan, Sarah, Jedidja, and Matthew (and many more than I could list here). I got to pair with Ward Cunningham. I got to work with luminaries like Henrik Nielsen. I got invited to speak all over the world, and met tens of thousands of inspired and inspiring people in the process.
There's no question that Microsoft changed my life for the better.
Leaving Microsoft was one of the hardest career decisions I've ever had to make. Despite all my nitpickings of the company over time, I believe that Microsoft is in the best position that it's ever been during my career there. Xbox, Kinect, Surface, Windows 8, Windows Azure... the engine is firing on all cylinders right now. The team over at ASP.NET is filled with some of the smartest, nicest people I've ever worked with. Despite all that's good about it, though, it's time for me to get back to my roots, and do big things with a small group of friends.
On the question of xUnit.net...
Jim and I have been working (with executive support) to get xUnit.net moved over into the Outercurve Foundation. We are continuing to work on version 2 while we let the legal stuff unfold. The primary benefit to the community will be our ability to accept outside contributions to the code without the excessive legal overhead that prevented it when it was a Microsoft-owned project.
We have lots of plans for v2, and our commitment to xUnit.net has never been stronger than it is today.
Norway is a great place to visit, and the Norwegian Developers Conference was one of the best conferences I've ever been to (it's no coincidence, I think, that my two favorite conferences are both in northern Europe: NDC and Oredev).
Update: The Web API team is planning to add this to v2. Please visit the Wiki and give feedback!
While there is no batching standard built into the HTTP protocol, there is a standard for MIME encoding HTTP request and response messages ("application/https" with "msgtype=request" and "msgtype=response", respectively). ASP.NET Web API has built-in support for both MIME multipart as well as encoded request and response messages, so we have all the building blocks we need to make a simple batch request handler.
I know we left off in part 3 with a problem, but we're not going to solve it yet, because we still need to build some foundation helper classes that will make it easier to do that. In particular, there are some good practices we can codify around the creation and conversion of tasks that led us to write the TaskHelpers class that we use today in ASP.NET Web Stack.