A typical bad day at work for a programmer is to getting stuck. A stuck programmer is easy to spot, s/he is the one who has not moved away from the computer for a long time and if at all moves away is still visibly occupied with thoughts about how to find a solution.

Some of the solutions which I observed are

Discuss the problem with someone else

This is one of the best solutions which always worked for me. Even at times when someone listens to the problem does not help me fix it, just explaining it to someone helped me visualize and articulate better which in turn brought me closer to the solution. This is where pair programming wins hands down.

Read the Manual

While this may sound obvious, I have observed this to be one of the key issues to someone getting stuck. The entire IT population is trying riding on the keywords like convention over configurations, intuitive code, fluent interfaces; that combined with the hello world kind of exposure to tools gives programmers a more than enough confidence to carry on the everyday work. So when getting stuck the immediate response is to try what is obvious or what looks intuitive.

Take your eyes and mind of the problem

Any person’s action at work will first be governed by the conscience and instincts take over later. It is very similar to how we start driving or play instruments, we will be at ease once we are in a productive rhythm. The advantage of this mode where the instincts control our work is that it is very efficient but at the same time it moves us into a very narrow view of the work. When stuck we are stuck just in this narrow view and might not think out of this view (is it sounding like thinking out of the box?). This is similar to sleeping, it is so easy to get back to sleep when the alarm rings in the early morning no matter how difficult it was to fall asleep; if the concentration levels at work has been high and we got stuck then a way out is to come wide awake out of the concentration. Few times I have been stuck at programming from 6PM till bedtime just to wake in the morning and solve that in 15 minutes.

Almost every one of us at the work place have signed up for some sort of deadline, if we get stuck it adds to the stress. We have to use the phrase from “The Hitchhiker’s Guide to the Galaxy“. DONT PANIC

Image: Master isolated images / FreeDigitalPhotos.net

Recently our team wanted to add some more features into an existing app built on Rails 2.3 about 2.5 years ago (July 2009). We ended up in a situation that in order to proceed adding new features we have to upgrade to Rails 3.1. The primary reason being that we were using outdated technology and there is a difficulty in maintaining our legacy (2.5 yr old) app by getting support and documentation. The migration also was not smooth, we spent time looking at screencasts, tutorials, documentation and forums to move ahead and after a good deal of effort the migration happened. At one point during the migration there was also second thoughts to rewrite the app from scratch as the migration was labour intensive.

This event made me feel that we might be heading towards disposable software. Keeping the life cycle of the rapid development tools in mind should we design cost effective disposable software? By taking the example of How to Create a Blog from Scratch Using Ruby on Rails in simple steps, I believe that we might be heading towards a solution of disposable software. A large application could be built using many pieces of disposable software if we take care of data integrity during upgrades or replacements and effective communication between applications.

The questions that arise are; How long is long enough to dispose the software? Software development costs are ever increasing, will this model fit enterprises? Will this mindset make software accessible to the masses at a cheap cost?

My take on the questions.

Q. How long is long enough to dispose the software?

A. We could take around 2-3 years for a software to be useful for us before we reach out for an upgrade.

Q. Software development costs are ever increasing, will this model fit enterprises?

A. My experience with enterprises is very limited, as far as I know the huge cost in procurement of an earlier version has been a mental block for organizations to go for a timely upgrade. If we make software development faster and cheaper then there is a high chance of regular upgrades.

Q. Will this mindset make software accessible to the masses at a cheap cost?

A. Right now many services are beginning to become available for super cheap cost empowered by the cloud, it could be possible in the near future that people can get made to order software at a cheaper price.

Just a decade ago the amount of memory for a typical desktop was in the lower 3 digits of MB. 15 years before it was in 2 digits of MB. Yet we had email clients, browsers, word processors, spread sheets, image processors. I read about one financial analyst’s perspective about the inflation and taxation in America. It is such that the purchasing power of money in your hand after taxes is significantly lower than the inflation adjusted money’s purchasing power in 1950. For example; if someone sells her house for in 1950 and then the amount of purchasing power that money had after the tax was significantly higher than what it could do in 2012. The direct and indirect taxes have risen and the inflation has masked the effects of it.

While writing this, I am doing so in a machine which has 8GB RAM, 500GB hard disk and i7 processor. That is a 250 times increase in my computing power than 15 years ago. Though the frequency of the crashes I encounter has reduced to a great deal, there are still crashes and non responding apps which annoys at times. I have observed that the thought “memory has become cheaper than efficient programs” is prevalent for most of the applications barring a few which demand performance. Take a look at the hardware of the Apollo Guidance Computer. We were able to land on the moon with that piece of hardware, but right now even with such excellent hardware we many times end up with non responsive websites. With a workload of just above 1000 concurrent users some web sites can easily choke the best hardware they are running in.

Is there a way that the generous doses of memory and computing power could be used effectively or will be waiting for something like water scarcity or environment pollution to happen to learn to use the hardwares efficiently?