Wednesday, September 24, 2008

Back to the Basics

Now that the Android mobile platform has come head-to-head with the iPhone, this might be a good time take a brief look into the different philosophical debates that have existed in the software development world over the years. I have always found the passion that has fueled some of the positions to be oxymoronic because our line of work is a scientific one — and science is about logic not emotion (or devotion for that matter).

What science(s) are we dealing with? This might sound like an irrelevant —some would even say foolish — question, but I ask it because I think it helps if we go back to the basics.

Software development, as it exists today, is a combination of mathematics (on which all programming paradigms are based) and physics (on which all hardware is based). Some may argue that chemistry plays a role since the components that make up computers contain chemical compounds; I think that is not critical to our field since, by the time they make into computers, they have already been stabilized and are not expected to change after that. Worthy also of note is the fact that there are experiments underway that could create computers that rely on chemical reactions or biological processes to compute — in which case, we would have to add chemistry and/or biology to the list.

Notice however that, although the second item on the list of constituent sciences might change, the first one remains constant. This means we can invariable refer to computer science as applied mathematics. Something that is essentially a form of mathematics should be as consistently logical and proof-based that arguments should be easily settled, right? Not really.

Even in math departments nationwide human nature and emotion plays a role. I think, therefore I emote — or is it the other way around?— either way, it's all downhill from there .

This tiny problem that is merely noticeable in the math lab, is greater by several other of magnitude in the software world once you throw in marketing departments, non-techie managers, job security considerations, large egos and personal insecurities. As a result, many software development forums sound like the kind of debates one is likely hear when religious leaders meet.

I would like to propose that, as tempers flare and insults get hurled, we remember our roots. Software is based on logic (or mathematics if you prefer). I cannot argue my way out of laws of logic; how then should I expect to argue about software that is is based on logic without being logical?

Remember this the next time you face another discussion that pits proprietary against open source, Windows vs Mac, Linux vs Windows, iPhone vs Android, Blackberry vs Smartphone, C# vs Java, C++ vs C, Haskell vs Fortran, etc. In all these arguments there are facts that are incontrovertible and reasons the way things are they way they are. Usually the foaming in the mouth or the flame wars are a sign that logic —the foundation of our craft — has left the room.

Does this mean that we should never discuss alternatives? Not at all. It means that we must discuss as scientists pursuing a provable goal, using scientific methods.

As with other scientific exchanges, our discussions should have only one goal: to discover the truth at hand. For this to happen we need to confine our arguments to the facts, be honest about the unknowns and be intellectually honest enough to stand corrected when the other side has submitted valid proof. This requires discipline, but so does every worthwhile endeavor — especially a scientific one.

So, please, let's end the religious wars. We are not seminarians or monks, for crying out loud. Let us seek to overcome our personal insecurities and ignorance through self improvement and learning — therapy won't hurt either. Our job is to build the future. What a awesome task!

No comments:

Post a Comment

Care to comment? Have a question? Type your thoughts right in here :