{ End Bracket }

What is ALT .NET?

Jeremy D. Miller

Last year David Laribee coined the term "ALT .NET" to describe a coalescing community of like-minded individuals within the larger world of the Microsoft® .NET Framework who felt a growing frustration that Microsoft tooling, guidance, and .NET culture at large did not reflect or support an important set of core values. In October 2007, some hundred-odd souls descended upon Austin, Texas, for the first ALT .NET Open Spaces event, turning the blogosphere buzzword into something more tangible and kicking off the formation of a real community.

So what is ALT .NET? And how does it differ from the .NET that we already know and love? What are these values that many of us think are missing? What are these alternative tools, techniques, and practices that ALT .NET'ers are espousing? Let's first examine the original tenets of being an ALT .NET developer.

  1. You're the type of developer who uses whatever works while keeping an eye out for a better way. One of the common topics at the ALT .NET event was closing gaps between requirements, testing, and code. There's still fat in the way we develop software that can be eliminated.
  2. You reach outside the mainstream to adopt the best of any community: Open Source, Agile, Java, Ruby. In no way does Microsoft or the .NET community have a monopoly on good software development. For instance, Agile processes and Design Patterns started with Smalltalk. Likewise, Inversion of Control tools and techniques originated in Java. And two fundamental Ruby on Rails principles—Don't Repeat Yourself and Convention over Configuration—are ones that we can adopt in .NET.
  3. You're not content with the status quo. Things can always be more elegant, more mutable, and of higher quality. We're all experimenting with techniques to more closely connect the coding and testing to the business domain. For example, Behavior Driven Development (BDD) refines and extends Test Driven Development (TDD) by specifying the intended behavior of the code in a more readable way than classic xUnit testing. And language-oriented programming has the potential to raise the abstraction layer up to the level of the domain logic.
  4. You realize that tools are great, but they only take you so far. It's the principles and knowledge that really matter. The best tools are those that embed the knowledge and encourage the principles (for example, ReSharper). Furthermore, you feel that the most important qualities of a solution are maintainability and sustainability. Maintainable code means good design. Good design arises from the skillful application of design knowledge. The .NET community has been placing too much focus on learning API and framework details and not enough emphasis on design and coding fundamentals.

Part of the catalyst for the raising of the ALT .NET banner was a demonstration of a beta of the new Entity Framework in March 2007. I, along with several others, was disappointed at certain elements of the Entity Framework, specifically the lack of "Persistence Ignorance" and the tight coupling to the database. At that time, the Entity Framework did not appear suitable for TDD, Domain Driven Design, or Continuous Design—all things that I consider valuable for maintainable development.

On the other hand, the new Model View Controller (MVC) Framework for ASP.NET development is exciting because it explicitly supports and enables the values I feel are important for successful software development. The MVC Framework clearly reflects the values of maintainability and testability with an emphasis on Separation of Concerns and testability throughout the design of the Framework.

It's easy to be cynical or apathetic about the state of development. However, instead of lamenting that Johnny can't code and complaining that it's hard to find good developers to hire, perhaps we should admit our main problem: we're terrible at growing strong developers.

Many developers would be happy to use Object/Relational Mapping and TDD if they just knew where to start. Likewise, folks already practicing these techniques want to get better by interacting with other practitioners. My chief hope for the ALT .NET movement is that it creates a community that assists both groups, helping them all become strong developers. To that end, the Altnetpedia Web site (altnetpedia.com) has just opened for business with the beginning of a list of resources for learning how to apply these techniques in .NET. The altnetconf message board (tech.groups.yahoo.com/group/altdotnet) is already up and going strong as a place for .NET practitioners to discuss development topics. Stop by!

Jeremy D. Miller is the Development Manager for BayerSoftware in Austin, TX.