Indecisive?

I just read an old blog from Brian Rinaldi. In it, he talked about something he sees a lot amongst programmers who are comfortable with a procedural approach and are just starting to learn OO and being told that they need to choose a framework. Brian sees a lot of people recommend that these "old school" guys write a small application and then port it to each framework they're considering to compare their strengths and weaknesses. Brian disagrees and he has a good point. Many people have difficulty choosing a framework they like and end up stalling for time in the decision.

Brian Says:

If you are sitting back studying frameworks, researching options, reading blogs and looking for the answer about what framework you need to just admit to yourself you are just stalling (go ahead, flame on)!

...

None of this is intended as criticism. I know where you are because I have been there. Nonetheless, this stressing over which framework to use is a stalling technique plain and simple. It is brought about by the fact that moving from procedural to OO is painful and difficult. Once you accept that, just bite the bullet, pick a framework (any framework) and get coding!

It is stalling, that's true... but the reason for it runs deeper than the pain involved in learning OO if you're comfortable with procedural programming. There's a really good book titled Predictably Irrational by Dan Ariely, a professor of behavioral economics at MIT. In it one of the subjects he covers is difficulty of people to choose between options, effectively "closing doors" (although not necessarily "burning bridges"). He gives a bunch of examples in the book from choosing a home or car to choosing a spouse.

He described an experiment he conducted at MIT in which they created a video game that allowed the person playing to win real money (not huge sums, but an incentive anyway). The game presented the players with three doors they could click on and each click would earn them a certain semi-random amount of money. So the players would click on each door a few times and quickly determine which one earned them the most money on average and then stick with that door through most of the rest of the game.

It was obvious that they could pretty easily see which door gave them the best results. At this point they wanted to find out if the players would behave irrationally to keep their options (doors) open. So they changed the game and any time you clicked on a door it would grow and the other two doors would shrink. If you let them shrink enough, eventually they would disappear and you wouldn't be able to get them back. So the best strategy to earn the most money playing didn't change: figure out which door pays the most and click it 'till the game ends. However NOBODY did that.

There wasn't any learning curve or associated psychological pain (as Brian described with regard to learning OO frameworks). The only rational incentive in this case was the money, so a person who behaved rationally should easily have been able to choose the best strategy and earn the maximum amount of cash reward. There wasn't a single player willing to let any of the doors disappear, no matter how little they paid out. Conclusion - not a single player was able to act rationally. The players so feared losing options that they allowed themselves to lose money.

So that being said, I've met a bunch of folks who, entirely aside from the framework question, do the same kind of back and forth over the core languages. Should I stick with CF? Maybe I need to learn more Java or .NET or PHP or all of the above. Maybe I'm not cut out for programming to begin with and I should just go be a line-cook at Chili's. I'm sure I've had that same problem, although I can't recall ever doing it with the question of either languages or frameworks. I don't sit around and wait for other people to decide what's a good way to program, I figure it out and I go do it.

Comments
Khosi's Gravatar Very Interesting post.
# Posted By Khosi | 8/1/08 4:41 AM
BlogCFC was created by Raymond Camden. This blog is running version 5.5.006.