Saturday, 16 January 2010

Have we missed anything

My last post caused a bit of a stir. Most of the comments were against my opinion which is more than fair enough and I respect that. I am now going to try and turn a negative into a.............not so negative.

Maybe part of the reason why we have so many similar frameworks and tools is because developers are too eager to jump in and start writing code. Writing an IoC container for example is challenging and has a well defined problem space that allows the developer get cracking on the code ASAP.

I want to ask the following question to anybody who is reading this:

What tooling or frameworks are we still missing?

I have often seen posts from devs asking for new project ideas. Does anyone have an opinion on this?

The main cause for tooling is to automate or solve a problem. Productivity is another driving force for new tools or frameworks.

Perhaps it is better to think of this question by identifying the problem first. The solution comes next.

If we cannot answer this question then are we saying that we are happy with our current toolset?

Another worrying thought is that perhaps .NET developers leave these innovations up to Microsoft and more recently JetBrains.

I have a funny feeling that this post will not generate as many comments as my last!

Friday, 8 January 2010

Go FUBUMVC Yourself

Time for yet another cathartic post (troll like rant) that few will read and lets me vent my frustrations at this whole, crazy mixed up open source world of .NET. Maybe this can spark some debate or maybe it cannot. Quite probably it just lets me throw some mud at the wall and see what sticks.

Let me get to the meat of the problem straight away and declare the following confrontational statement:

We need another MVC framework like we need a hole in the head.

After my work with horn, I have a fairly good idea about the number of IOC (castle Windsor, StructureMap, Autofac, Ninject) frameworks, mocking frameworks (Moq, Rhino Mocks, Moles) and build engines (Nant, PSake, Phantom) that .NET has. I know because I have wrestled with most, not to mention the countless ways there are to get your source control from the remote SCM and build it. Each .NET OSS project lives in a vacuum with total disregard or care about the other OSS projects it carries as dependencies in its shared lib folder.

It now seems that we need several different MVC frameworks, Monorail, ASP.NET MVC, VICI MVC, Openrasta et al. Of course each one is better than the rest. Each one expresses separation of concerns more than the others. Each one adheres to the now infamous SOLID principals more so than the rest. Please, give me an ounce of credit; this is just another lazy way for you to fan your programming feathers by copying an existing paradigm and putting your own slant on it. Any developer will testify that if we write something once, discard it and start again on the same problem, you will get a better solution. This is especially true if you have the source code from your original attempt or somebody else’s attempt to later chastise. Then after we have put our own slant on it we smugly declare how our new code has:

  • Better Separation of Concerns

  • Is more true to SOLID

  • 1000 times More testable than the rest

  • 100000x more mockable because we put an interface round x

  • We use compositon over inheritance more. Big Yawn to this one

  • Looser coupling by a magnitude of 400000xyz (xyz is the unit for measuring loose coupling don’t you know)


If I had the inclination, I would love to draw up a comparison table on each category (IoC, mocking etc.) to see just how different each one is.

What exactly does all this choice give us? Or for FUBUMVC I ask the question:

Why the hell should I care? How is the front controller pattern going to make me more productive? If so how?

It seems we have a 100 different can openers each with their own ornate carving on the handle.

What about if we had a common project folder like we have in rails? Then convention over configuration is much easier because we can start guaranteeing where things are. This will never happen while we have the arrogance and snobbery that abounds in .NET OSS.

It will never happen in .NET while these OSS snobs rip up old ideas and replace them with more of the same but hey, it is 10 times more SOLID than the other guy and soooooooooo much more testable.

My wish for .NET is that we have rails in .NET. One only has to look at the number of generators and rake commands that are available in a rails directory to know that if everyone pushes in the same direction then we can actually build something of use. Again this will never happen. This could be possible with Ironruby but it will never get buy in from these OSS craftsmen snobs.

It will never happen because .NET OSS is steeped in arrogance and exhibits a holier than thou attitude I find tedious.

I will further ask this question:

Where is the innovation?


What gives me the right to ask this or for that matter write this post? I would say that with horn we at least tried to do something game changing and provide a common way for people to get their open source binaries and thus smooth adoption. We faced multiple hurdles with the multiple ways that .NET OSS chooses to bury it’s head in the sand and ignore the rest of the OSS landscape. We had to battle with git, svn, nant, msbuild, psake et al.

When we started developing horn, I read blog posts from people who stated that we were wrong and they were going to create a gem like experience for .NET. There was ngems, rocks and other failed attempts. Where are they now? How far did you get? Not very is the answer. I persevered with horn because it was an extremely difficult problem to solve. At the time I and others were looking for an outlet to do some coding that was and is more challenging than our day jobs. We chose something extremely difficult and did not go down the same old tired route of an IOC container, a mocking framework or God help me, another web MVC framework that is not too dissimilar than the rest.

.NET is a dead platform. The vast majority of .NET shops have a laughable approach to development. This leaves us with ALT.NET which has turned into a bunch of arrogant prima donnas bleating about their craftsmanship and how their approach is better than the rest.

This constant division and lack of new ideas is boring in the extreme.

You can stay in your boring little vacuum and have your sycophantic twitter followers stroke your enlarged ego all you want. I for one do not buy into it.

One only has to watch the pandering and kowtowing attitude to anybody in the same virtual vicinity of Ayende, to feel nauseous. You know who you are and please get a life. Don’t be a sheep.

My last plea is this:

Stop looking at existing paradigms and come up with your own.