ASP .Net MVC 3: Microsoft did something right for a change!

In the beginning there was ASP .Net
From the very first time I tried ASP .Net I had problems with it. ASP .Net forms a clever abstraction around html and tries to fool you into believing that you are still programming windows forms. ASP .Net 1 allowed you to place controls in exactly the same way you would have done in winforms. There was a grid and you put your controls on it. The resulting HTML output was a mess. The mess seemed to pile up with ASP .Net 2.0, where aspx markup was for some reason markup built on top of html to abstract it away, creating a whole subset of new problems.

ASP .Net's control design meant that anything remotely complicated became nearly impossible. Even though a GridView was essentially an html table, getting special things to happen in the grid meant modifying strange settings in the property dialogs, googling like a mad man and occasionally just giving up. Worse still was the fact that ASP .Net controls did not play nice with custom Javascript, and that they did not use and elements by default. Every second case was a corner case and you had to break things to make them work. The gridview was not the only irritating control, but it is a good example of a bad one.

But why Microsoft?
Why did Microsoft make such a broken web framework? My guess is that they knew most developers were familiar with the forms paradigm. They pushed this paradigm onto the web to make it easy for winforms developers to make websites. The problem was that this required layers of obfuscation, general WTFing from web developers, and let people loose on web programming before they fully knew what they were doing. 

Enter MVC
When I first heard of MVC I was taken aback. It puzzled me that Microsoft would create another web framework. I went through a tutorial for MVC 2 and found myself hating it. When I later tried again with MVC 3 I was shocked.

MVC 3 Brought you back to where you belong; the html, with some embedded syntax. The direct model binding in MVC allows you to work with the field syou want to display and manipulate right inside your html. The syntax is light and it gets out of the way when you feel like doing some nice CSS layouts and you are not forced to use something as horrible and contrived as ASP .Net Ajax, which was a primary source of headaches.

MVC does bring some complications for semi veterans of ASP .Net proper. The problems come when there is no code behind, no controls, no master pages as you know them, and pretty much everything you knew is now redundant.

On the other hand you can create beautiful clean html/css designs, mix in javascript flawlessly, use the cool stuff like JQuery and be in touch with your own html. If I think back now I can remember that there were countless layers in between you and your actual web-page.

The end of Asp .Net forms
I would not recommend ASP .Net forms for new projects. You will just hamper yourself in the end and will be stuck in a world where exciting things are barely happening anymore. You will be bored, constrained and frustrated.

MVC is the way forward if you want to do .Net web development.

Telecommuting is a no-brainer

The grass is greener on the other side
The world is realising that carbon is bad, and renewable and green techonology is good, but there are problems. Even though more advances are being made in alternative energy our energy consumption is growing at a massive scale. It's simple. We need to get to places to do things. Why are governments and politicians raving about "green technology" and carbon tax when the real solution is staring them right in the face.

Invest in broadband
If road infrastructure investment was funneled to broadband infrastructure and telecommuting tax breaks for companies offering telecommuting, then we would be well on our way to a telecommuting world. It is not happening because an older generation of idiots are in charge, not seeing the obvious solutions to the biggest problems that our society faces.

But we need to actively see what our employees are doing, otherwise they might slack off and not work at all. 
Maybe this is true to some extent, but there is one major factor here that these people are ignoring. If you give someone work and that work is not done, or the quality of that work is very bad, it becomes fairly obvious that something is amiss. If someone works from home they are equally aware that doing their work is important, because not doing work would result in eventual dismissal. Offices can be a prime place for non-productivity if work time management is not done correctly or there are bottlenecks in dependent processes.

The social element. 
The social element of work may be important. Much of this can be achieved online. Open source developers often work far far apart, in different timezones, on the same products, yet they still manage to produce good working software. These people are physically working alone, but working together on a scale and level unmatched in the world today.

But how?
The essence of any workplace, be it physical or virtual, involves communication. Bad leadership fails to communicate their goals, and the effects are devastating. Employees do not know what is coming next, what they must be doing, where their focus must be, or even if the work they are doing has any effect. I have seen people doing redundant work because they are unaware of decisions that have been made. Open regular communication keeps open source afloat. It manifests as forums, IRC, Commit logs, code comments, blogs, wikis, video tutorials, conferences where developers meet, talk and do code sprints.

This is not irrelevant for other types of businesses. It seems like it may be, but it's not. The principles are the same:
  • Setting up a governance body that controls allocation of funds, setting up rules and organising events.
  • A community is grown from an elaborate system of meritocracy and mutual goals.
  • A constant stream of communication runs through the organisation, including opinion blogs, chats, brainstorming sessions and video presentations.
  • Disputes are carried out in the open, and concensus is reached definitively and communicated by governance.
  • Single members of the community embark on projects, sometimes with mentorship, but with an individual vision of the final result.
  • Guidelines and rules are transparent and get challenged on a regular basis

This of course can break down. The open source communities often run into an ideological impasse, there are forks and the process breaks down. In the corporate world this cannot happen unless people quit, which is not always the case.

So what's the hold up?
Let's imagine a world where you work from home 4 days a week. The last day of the week is a meeting/social event. If you are home getting work done has a great benefit. You can enjoy your real life. I think that there is a stigma around working from home. It seems to hold the 'slacking-employees' stigma for no reason at all. We are all bearing the brunt of high commuting costs, lost time and increased stress simply because businesses are afraid of losing their precious 8-hour-chunk-working-constantly mythological work structure. Sure it will not work with all types of jobs, but by just cutting 10% of commuting you are already making a massive impact on peoples' health, the environment, and our general way of life.