Tuesday, March 14, 2006

Software engineering

This is something I wanted to talk about and discuss since quite some time.

Software engineering is one of the engineering disciplines and qualifies to be one because like any other engineering discipline, it applies knowledge to solve practical problems. Having said that, software engg. is also very unique from other engg. disciplines.

While every other discipline be it electrical engg, mechanical engg, civil engg, architectural engg or aerospace deals with the creation(design and construction) of something very tangible, software engg. involves creating software, which can be perceived only by the mind.

It is this inherent quality of software that makes it extremely appealing to me. (I can be dramatic here and draw analogies between software and the wind, fire, energy but will refrain from doing so ;-) ). Software has no intrinsic physical structure, no rules are imposed on it by nature and it has an ethereal existence. Whatever structure it is perceived to have, we impose it.

And this is why, I feel, it is very important for a software engineer to have a basic philosophy, a fundamental paradigm, which dictates how he/she looks at software. What does a function, a variable, an API mean in the larger sense? What is it's name? What are its characteristics, features and qualities? How does it behave? What does it do and not do? How to use it, when to use it and who should use it? When these questions are answered, software comes to life. It ceases to be ethereal and comes into verifiable existence, but only to those who know the answer to the above questions.

I can give an interesting example of a colleague whose paradigm of looking at software is to treat it like a fellow human being. And it's a good one because all the above questions are very valid questions that can be asked about any human being. This colleague of mine talks about functions or variables like they are people! He uses terms like kind, strict, suspicious, funny, smart, fair, partial and many more to describe these things! (You could of course call it bad sense of humour also ;-)) He really thinks of them as we would think of real people we know. And the best part is that a lot of times, he's able to figure out how the system will behave(or should behave) in a certain peculiar situation without even looking at the code because he knows it like he knows his friend!

A strong perspective like that really helps in understanding and designing software intuitively. And it also makes things easier when you are trying to fix 10x bugs in x days!

Anyway, my point is that a software engineer must be able to look at software as some tangible entity, something real, concrete and must feel the life in it. To make the ethereal work with, for and like the real. That's the challenge.

This is the domain of analogy. Decide between what.

8 comments:

Anonymous said...
This comment has been removed by a blog administrator.
Krishna said...

Hey you are not boring me kano. I wrote this article! You are right about different ways of presentation of the code. I just wanted to stress on bringing all these together to create a single entity.

Ashwin said...

Good job. 10/10. U deserve to write a book.

Karan said...

"software engg. involves creating software, which can be perceived only by the mind"

well, can perception be the function of any other organ other than the mind? wat u r talking abt is, im sure, "cant b perceived by any of the senses"

and with all due respect to ur colleague, n pardon me for making this frank observation, it doesnt seem like he has a life.

Krishna said...

Ya you are right, thats what i wanted to say. Other senses also play a role in perception, it's not just the mind but in the case of software its just the mind.

And I won't comment on his life because I don't know anything about it. :-)

Murali said...

Treating software(code,API,binary) like humans can be dangerous.... Humans created the software, but they did not put emotions into it.... a piece of software cant feel, but can make u feel @$^@&$%!#&$^@%&^@%

my two cents....

Padma said...

Positive attitude towards life! Doing SO MANY things to improve your lifestyle! YOU ARE ON FIRE....

Software with emotions.... Reminds me of the MATRIX series... Could be spooky Krishna... Maybe YOU'll be the ARCHITECT if u go ahead creating softwares considering emotions n all... or... did I get the whole thing wrong???

Krishna said...

He he he no such ambitions Padma!