Search This Blog

Loading...

Tuesday, April 22, 2008

The Benefits of Modern Software Development

In the article "The cost of modern software development" RickGeek laments the bloatness of modern applications and the plague of.Net and Java and other hosts of languages that run on top of Virtual Machine. According to him, even though .Net and Java are easier to develop with because they take care of all the low level plumbing, but they are slow, and are bloated. Well, users don't care. But Rick argues that this doesn't change the fact that "literally in billions of dollars per year in world-wide energy waste due to software inefficiencies running on every Microsoft OS".

He then calls for "people who are willing to spend the extra few weeks or months it would take to develop and maintain code using something that’s close to the machine".

I beg to differ.

First, downgrading from high level language to low level language is not a pleasant experience. It is so much harder to work with lower level language after you get used to the convenience of high level language. Programming languages are just tools to help us with our jobs. Why need to use a rude one when you have a sophisticated one? The progressive improvement of language is helping the developers to do their job more easily. Why should one reverse the trend? Going backwards is just infeasible. After working with C#, I don't feel like working with its ancestor, C++ because C++ lacks a lot of C# goodies such as strong typing( not to be confused with dynamic typing), safe code (no pointers), array boundary checking, garbage collection, security, standardize framework and assembly's metadata. Once you move up the programming language's level, it's hard for you to come down, much like how the people at the top of the society level have a hard time surviving if their are to stripped off their wealth and status.

Second, a few weeks or even months extra may not be enough time to develop code that is closer to machine language. One of the major benefits of high level language is that it cuts down the development time by handling the low level plumbing and providing a large library so that the developers don't have to reinvent the wheel. So in addition to optimizing your code in low level language and working with a much more inferior IDE, you have to handle all the tedious but important plumbing jobs ( garbage collection is one of them, as well as array overflowing) and at the same time maintaining base libraries that is similar, but different from other libraries written by other developers.

Developing low level code may be easy. But maintaining them is not. Especially when you consider the fact that all the Heisenbugs, BohrBugs, Mandlebugs, Schroehingbugs are more likely to manifest themselve on low level languages. You can spend weeks just to track down the cause a release-only bug in C or C++, whereas in C# or Java such a bug is virtually non-existent. Worse still, your application may be susceptible to buffer overflow attack simply because your programmer forgot to check the length of the input. But one of the purpose of high level languages is to prevent as much accidental bugs as possible. It's easy to estimate the time to develop a feature, it's much harder to estimate the time to test it.

In the age of Internet, the speed of release matters. .Net, or Java, or other modern scripting languages that are slow but powerful are preferred over C or C++. There is a reason to that.

What about the speed?
Well, response time matters too. If you found that your computer cannot run the latest edition of Microsoft Office, then maybe you should upgrade your hardware. I am serious here. But Microsoft Office, or Microsoft Vista or any other application is bloated for a good reason: Moore's Law. Microsoft, along with everyone else, expects that the hardware power rises so fast that it is not worth to optimize the application in order to have it run smoothly on older machines. Instead of optimizing the code, one would be better off spending his time writing features that utilize the fast-rising hardware raw power. It's a strategy that served Microsoft well in the past. There is no reason to expect otherwise.

If you are doing web development, things get easier. You just have to throw in more server power to distribute out the server load to make your web pages more responsive.

Modern software development is considerably easier than early days. And the average developer's IQ are lower today than it was yesterday. But this is a good thing, because it's a sign that the software development is gradually becoming a commodity.

Cars were used exclusively by the powerful in the past, but today they are widely available. This is a progression.

Computers were used to be in the hands of the privilege ones, but today they are ubiquitous, this, too, is a progression.

Computer programming was once confined to the elites, but thanks to the increasing bloatness, hmm, I mean, abstraction of the programming languages, they are now more accessible and safer in the hands of the average people. Is this not a progression?