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.

Nice Guys Finish First” documentary by Richard Dawkins throws some light on why Altruism is a very necessary element. The theme of the documentary is reciprocal altruism, simple explanation given is “Individuals allow themselves to remain in the same state or move to a lower state to help another person go up in state within the community”. The theory was applied to a large set where there are plenty of interactions within the observed group, the race to the bottom was inevitable where exploitation of the resources were present.

The definition of the nice guy was demonstrated using the prisoner’s dilemma as a computer game tournament.  The rules were simple,

  • If two players co-operate then they take equal share of the output.
  • If one of the players does not play nice, then the cheater gets a steal and the loser gets nothing.
  • If both try to cheat, then they end up with lesser output than they would have co-operatively got out.
  • There are more than one turn for each player to play against the same player.

Many people submitted their programs as players in the tournament with varied strategies. The one which Richard Dawkins called as nice guy was the “Tit for Tat” strategy. Tit for tat strategy won the tournament. The following were the observations of the nice guy in a setting were multiple interactions with the same individual is possible.

  • Is always co-operative unless cheated.
  • Keeps in mind who cheats and does not co-operate with the cheaters.
  • Will be the first person to forgive and give a chance to the cheaters to be co-operative.

This also reminded me of the Allegory of long spoons.  I also have seen some real life examples of nice people living the best life than the people around them.

Nice people, do you finish at the top?

Image courtesy: http://www.flickr.com/photos/garryknight/2490056817/

Einstein explained special relativity to the masses using thought experiments called Gedankenexperiment in German, few examples are here. The kind of explanations given through that experiment was quite easy to understand and relate to. The key point in the experiment was the absurd and almost impossible situations imagined. He revealed that time is just a difference between observed sequence of events and space is the distance between two events that are observed to occur at the same time. Nothing is uniform or static, everything is relative to something.

The reason I brought up Gedankenexperiment is that it should be a key skill developed in every individual right from the childhood. The laboratory experiments are too expensive, needs caution and sometimes impossible to perform. This applies to every field of learning, that is the reason people teach object oriented programming with inanimate objects but give a behavior to it as if it was a living thing. These experiments help grasp the theory much faster and explore the entire lengths of possibilities which in turn helps to apply well when it comes to implementation.

I have observed that many of my trainers were content centric and relied on effective brain dumps. Few of the exceptional trainers really kindled the curiosity and made me explore the roots of a topic and then the thought experiments on the way to the college did the rest. Some of my key learnings were strongly supported by the thought experiments.

Below are some of the points I found useful while learning and teaching

  • Create a picture in the listener’s mind. Visualizations are key to imagination, have a look at a very simple animation done by ‘The Inconvenient truth’ team. A kid can so easily get the idea about greenhouse gases.
  • Kindle the curiosity by planting an unfinished thought experiment in the learner’s mind. I received a lesson in chemistry where there was clear depiction of  how covalent bonds occur between atoms (after explaining the shells and inert gases) such that they enter a steadier state and then the teacher pressed the class to find out another way for atoms to steadier state. We found it and all the teacher had to do was to mention what that kind of bond is called.
  • Encourage silly questions, they trigger the best imaginations.
  • Times change, visualization tools change, keep adapting. Prezi, GoAnimate, Visual Thesaurus  are some of the few which can help in the modern classroom.
  • Time to think, this is as important as the time to teach. Crunching in more sessions and home work can eat away the time without providing enough value.
If you get a chance to teach, try it more visually such a way that it promotes Gedankenexperiment and check the results it brings.

Image: Worakit Sirijinda / FreeDigitalPhotos.net