Monday, November 02, 2009

Software ever changing truths

Quite often in software [development] (more often than not?), as time goes on, what is truth, becomes not truth, and this is possibly one of the reasons it makes software development so difficult, human brains are normally trained to learn stuff, but are not trained for dis learning and that's where the problem resides, as humans, once we learn something a certain way and we learn that that is good (or "the best way"), it is very difficult to change our minds to do it differently.

Programmers are frequently questioning what is the best way to do x or y, in many cases people will grab the first result from a web search (sounds familiar?), take that as the absolute truth, apply it to whatever problem they are solving and move on with life, though other times the ramifications of such learning experience will carry over much further, maybe the person will write a blog post about it or teach his/her co-workers, thus distributing the knowledge.

Keep in mind that is not always about finding out the best way of doing things,  some other times we find out that something is not possible, and this last one might be worst, more so on young developers, learning that something is not possible is very dangerous, have you seen an elephant tied to the tiny stake? it has learned that as soon as it reaches the end of its rope, it can't go any further.

Many of these truths come from respected authorities in the world of software, maybe from the software vendor itself or the official community around it, making matters even more complicated because they are the source and you trust them. The key here is not that you can't trust anyone, it's only that you should not lock that into your brain as the absolute truth, software is always evolving, it's always changing truths.

There are few things that you should take as the absolute truth though ;), among them:
  • There's usually no best way of doing things, there's only a better way(s) of doing it.
  • Software development is not black or white, in fact I think most of it is gray area.
  • There are no hard rules in software development, it'd be too easy if that was the case. 
  • There is no such thing as an impossible thing, only incapable beings.
  • Software is always evolving, what is truth today may not be the truth tomorrow.
All I am saying is that whenever you come to "the best way of doing" (be it an algorithm, a technology, framework or methodology), a performance comparisson that shows that X is better than Y or something that is "not possible", it doesn't matter who it comes from, take it with a grain of salt. What is truth today may not be truth tomorrow.

1 comment:

Epsilon Given said...

As a mathematician, I'd like to make two observations.

First, there /are/ impossible things. For example, no matter how hard we try, we'll never be able to trisect and angle using only a straightedge and a ruler. I'd encourage everyone to go over the proof, but be forwarned: you will have to come to terms with modern abstract algebra to understand it.

Second, I would observe that, while trisecting an angle with only straightedge and compass is impossible, we don't have to limit ourselves only to that technique. There are dozens of ways we can trisect an angle, if we're willing to step outside the limits of classical Greek geometry; heck, if we're engineers (and computer scientists allegedly are, to some degree), we can approximate a trisection of an angle, to however small of a margin of error we would like, using compass and straightedge.

So we would do well to remember that even impossible tasks may very well have solutions that are "good enough"!