Archive for March, 2009

18 Mar 2009

The State of ALT.NET

26 Comments Uncategorized

Over the past 6 months I have been trying to really quantify what it means to be using ALT.NET practices. And I can honestly say that I still honestly don’t know what it means to be an ALT.NETer. But I have come to a number of conclusions about the state of the ALT.NET community, that I wanted to share.

(1) The ALT.NET Community is fractured among itself.

There are too many different ways of out there of what it means to be a true ALT.NETer. There is the Test Driven Design crowd, there is the Domain Driven Design crowd, and to many other Driven Design paradigms to mention right now. Each advocate will stand up and say that their way is the only way to develop a true ALT.NET application, and all other ways are an abomination to software development.

From this point forward…

We need to understand that it doesn’t matter what paradigm you choose to follow or even if it has a name, just that you choose a way to design your application before you start coding. And as long as the way you choose to code is robust, easy to maintain, and easy for another developer to pick up where you left off — you are doing it right.

(2) Take the religious zealotry out of ALT.NET

This sort of goes back to #1, but I feel that it needs to be called out directly. There are too many people out there preaching about how their brand of ALT.NET is the only path to salvation from the drudgery of everyday .NET programming. I have heard from a number of people that you don’t have a true ALT.NET application unless you are using an IoC library, nHibernate, and separate your domain model in to a separate project library away from your data access layer. These types of strict requirements and zealotry for one type of component set the bar way to high for any average developer to say they are following the ALT.NET principals.

From this point forward…

It is an acceptable practice to use what ever makes the most sense for your project and your team. For example if you need IoC container and it makes your life easier as a developer to build the framework of your application you should use it, on the flip side if your application is pretty static and there is no need to have these swappable containers you should feel free to not use IoC containers until your application requirements dictate they are needed.

(3) Craftsmanship with out Engineering is no way to program software.

There seems to be a very strong focus on craftsmanship over standard engineering processes in the ALT.NET community. It seems like each week there is a new hot craftsmanship feature from some other language that is trying to be replicated in .NET. Lately it has been the focus of fluent API’s and the duck typing features that dynamic languages like Ruby have built in to their frameworks. This constant change and focus on new hot must have craftsmanship features really detracts from good solid software engineering principals that should be the focus of the ALT.NET education process.

K. Scott Allen had a really good analogy of this focus on craftsmanship over solid engineering of your code. He called it the Aluminum Wiring in side your software. In his article he talked about how the shortage of copper in the US during the 60′s and 70′s caused home construction to use Aluminum wiring over Copper wiring in houses, and how the use of Aluminum caused oxidization, corrosion, and overheating of the houses electrical system. He then went on to ask if all these new craftsmanship features are going to cause the same problems in software development and he specifically called out:

  • Mock objects
  • Fluent APIs
  • Declarative programming

I believe K. Scott is not to far from the truth, because we are sacrificing good engineering practices for what really amounts to programmer candy, just like the US construction industry sacrificed good engineering materials to save a few dollars.  It didn’t pay off for the home owners in the long run, and I surmise that this focus on craftsmanship will not pay off for the software in the long run either.

From this point forward…

We need to focus on good software engineering over the latest fad in software programming.  Currently the latest fad is making C# work like Ruby.  But it is just that a fad, that will quickly fade away when something new comes along.  It is basically the programmers equivalent of the rise and fall of Paris Hilton in the media.  Ruby is a nice language and has its niche purposes on the web, however there is a reason why Ruby doesn’t run mission critical applications (ex. financial systems) like C#, C++, or Java does, it simply doesn’t scale all that well.  Only time will tell if it will be around for the long haul or fade way in to the abyss of languages that grace this earth for only a short time.  But either way we shouldn’t be making business critical changes to the way we engineer software applications based on the craftsmanship of the newest language to hit the streets.

Conclusion

My conclusion is a short one on the state of ALT.NET. From everything I have learned over the past 6 months and the immersion in the tools that have come from the ALT.NET community, I have really come to one conclusion that seems to sum them all up.

ALT.NET started with some really down to earth goals of educating .NET developers about alternatives to developing software, by taking principals from other languages and frameworks and integrating them in to the .NET developers thought process. However this simple mission statement has seemed to have morphed into zealotry for design practices and certain tools and an obsession to always change the .NET framework to work more like the latest fad instead of forging out the best practices from other languages and frameworks. The state of ALT.NET is that it is broken, because it seems to be governed by a disorganized committee of bloggers with their own agendas. ALT.NET needs a hero, and that hero just needs to set down some commandments that all other ALT.NET conversations are governed by. See Update Below This is the only way the ALT.NET movement is going to survive the test of time.

This isn’t going to be an easy task, but I am willing to work with anybody who wants to form a working group to explorer the creation of these ALT.NET Commandments. If you are interested please click the Contact link above and maybe we can get something moving to help ALT.NET survive the test of time.

Update: Lee Drumond pointed out something that I didn’t consider about what I said above, and it probably should be rephrased so it is not taken the wrong way.  I had said:

ALT.NET needs a hero, and that hero just needs to set down some commandments that all other ALT.NET conversations are governed by… I am willing to work with anybody who wants to form a working group to explore the creation of these ALT.NET Commandments.

This should have actually went something like this…  ALT.NET needs a commitee thats sole focus is on advancing the principals of ALT.NET forward and breaking down the bariers in corporations through education.  Once corporations see the benifits of ALT.NET, developers will be finacially modivated to learn the ALT.NET ways, to keep and advance their own careers.  If the movement is not organized, it is nothing more than a social group that may gain a couple followers here and there, and really piss off others, just like any social group would.

By the way nothing I have said here is anything new to the ALT.NET community, it has all been said and repeated many times over in different ways and different formats.  Unfortunately it is usually met with the same reactions, as Jeremy has commented below, and very little retrospective seems to be happening.  Everything just moves forward as the status quo, as if there is nothing wrong with the fact that the same concerns are voiced over and over again.

10 Mar 2009

100 Million Lines of Code in Your Car

1 Comment Uncategorized

I was reading over on DevTopic today about how 100 Million Lines of Code is pretty common in cars today.  We have come a really long way since 1977 when the first micro-chip was introduced in to the Oldsmobile Toronado, but what I really want to share with you guys is what I found at the end of the post.  I laughed out loud, when I read this because believe it or not this is starting to happen in cars and it has nothing to do with Microsoft.  Just the ever growing source code base that runs modern cars, and the ever growing chance for one of those lines to have a bug it in.

If GM had developed technology like Microsoft, we would all be driving cars with the following characteristics:

  1. For no reason whatsoever, your car would crash twice a day.
  2. Every time they repainted the lines in the road, you would have to buy a new car.
  3. Occasionally your car would die on the freeway for no reason. You would have to pull to the side of the road, close all of the windows, shut off the car, restart it, and reopen the windows before you could continue. For some reason you would simply accept this.
  4. Occasionally, executing a maneuver such as a left turn would cause your car to shut down and refuse to restart, in which case you would have to reinstall the engine.
  5. Macintosh would make a car that was powered by the sun, was reliable, five times as fast and twice as easy to drive — but would run on only five percent of the roads.
  6. The oil, water temperature, and alternator warning lights would all be replaced by a single “This Car Has Performed An Illegal Operation” warning light.
  7. The airbag system would ask “Are you sure?” before deploying.
  8. Occasionally, for no reason whatsoever, your car would lock you out and refuse to let you in until you simultaneously lifted the door handle, turned the key and grabbed hold of the radio antenna.
  9. Every time a new car was introduced car buyers would have to learn how to drive all over again because none of the controls would operate in the same manner as the old car.
  10. You’d have to press the “Start” button to turn the engine off.

Believe it or not #1 from above is happening to a friend of mine on his 5 Series BMW.  And well we are all accepting #10 as a great feature on new cars.  In fact my new 2009 Acura TL, that I just bought, has a button like the one pictured below.

Acura Start Button

Isn’t it ironic how we laughed at these 10 statments a number of years ago?

03 Mar 2009

ASP.NET MVC 1.0 Release Candidate 2

2 Comments Uncategorized

Final Cover PhotoPhil Haack has announced the availability of ASP.NET MVC 1.0 Release Candidate 2.

You can download the new version from Microsoft. Source code and samples are also available on the ASP.NET CodePlex workspace.

Overall, this new version doesn’t have many changes in the area of development and tooling, but there has been improvement for deploying ASP.NET MVC applications.  The setup process now requires .NET 3.5 SP1 to be installed, where in the past it was optional because the additional assemblies where included with the install.

Don’t worry though /bin deployment is still supported, they are not taking a runtime dependency on SP1 other than our existing dependency on System.Web.Routing.dll and System.Web.Abstractions.dll. Thus you can still bin deploy your application to a hosting provider who has .NET 3.5 installed without SP1 by following these instructions.

They are also adding an option to the installer that enables installing on a server that does not have Visual Studio at all on the machine, which is useful for production servers and hosting providers.  To do a server install you just need to run the following command to install MVC on your server.

msiexec /i AspNetMvc-setup.msi /q /l*v .mvc.log MVC_SERVER_INSTALL="YES"

Also because of the latest breaking changes from Beta to RC 1 & 2, we are taking the time between now and the final release of the MVC Framework to work on the book and make sure all the loose ends are tied up.

I also got noticed today that our final cover design is done.  So we are in the final stretch of this book.  The cover hasn’t been uploaded to Amazon yet, but if you are interested in pre-ordering a copy just click on the cover image to your right and it will take you to the Amazon page where you can place your order.