Saturday, 6 December 2014

Can we overcome the software ambiguities?

Ambiguities are almost everywhere, sometimes they have no harm at all, sofa, couch, love-seat ... whatever don't harm anyone, sometimes it doesn't harm but makes confusion, like when a girl says to her boyfriend "let's go out and have some special dinner tonight". The poor guy gives her a special 200 dollar dinner as he thinks, but after the dinner she says "It was the worst dinner I ever had!" The problem is "special dinner" doesn't mean same for them. Similar things happen every day in our line of business too, "You have to develop a stunning user interface!" And when we build the user interface it has much ambiguity, rather than not being what the owner has asked for. (We will talk about the UI ambiguities later)

Development cycle adds more ambiguity to a system.
But how human make the ambiguities clear? Suppose you have brought an idea or have built something like a program, or ... The thing with a creature or phenomenon that has evolution path is that every step it goes forward the ambiguity increases.

Either you want to clarify the previous ambiguities or add some new features you make the thing more complex.

For example, there is an ambiguous word in a language and you want to make it clear, you have to add some similar words with minor differences. Do you think all people can learn these and use them in proper ways? The idea for language is much more complicated because people play with language. I always think the people who are responsible for updating dictionaries can do nothing to prevent this, people in the street bring many awkward words in the language and make them public and these poor dictionary guys should find out a way to put them in the dictionary or accept them as part of the language.

For expansion, a software is a very good example, any new development you make for an already written software, regardless of how modular, documented, and ... it is, makes the software complex. It gets worst when many people during the software life work on it. Why do you think there are many bugs in OSs today?

Why we can't overcome software ambiguities?
Here are some of the reasons:

  • We are human and can not completely express ourselves with speaking/written language, so in our communications, there are always misunderstanding, misinterpretation, and ambiguity.
  • Programming languages don't have ambiguity (mostly if you don't consider JavaScript) but expressing the human idea with these simple unambiguous requires human interpretation. and this is nothing but ambiguity itself.
  • Software should work together, you run a written software on an OS, the OS to selfs runs on hardware (which has ambiguity too) and ... 
  • You never can test a software in all possible situation. Sometimes something happens after a long period of fine and correct working (Y2K).
Ambiguity can be good too
To end this part of the discussion I have to add that not all ambiguities are bad. Ambiguity makes people think more, it makes things be unclear and gives stress to you and pushes you out from your comfort zone which makes you productive.

No comments:

Post a Comment