The most appropriate heading would be "Are software engineers really engineers??". I'll get to that in a minute. According to Wikipedia:
Engineers apply established principles drawn from mathematics and science in order to develop economical solutions to technical problems. The work of engineers is the link between perceived social needs and commercial applications. Engineers consider many factors when developing a new product.
There in another word, CRAFT... according to the Wikipedia again:
So why is software development a feat of engineering? and not a craft?
Now there is nothing wrong with it being a craft. New craftsmen are trained by a master craftsman (something like internship/co-op).. they mimic everything the master does to achieve the end result. This works for general arts and used to work for medical science too few decades ago. So if you were to learn software development as a craft from the "experienced" developers, you would mimic everything they do... even if it involved throwing a dead frog after declaring each variable in a file, and it will not lead to a catastrophe until you are copying everything that the master developer does.
Advancement in technology has given so much slack to us "Computer scientists/engineers" that we do not evaluate the consequences of our action. We do not look at a problem as an engineer in other field would. Take an electronic or mechanical engineer for an instance. How many time have you known that they designed a system that failed or had a bug? Bugs are a commonplace in software engineering. Infact it is widely acknowledged that a shipped software will have bugs.. then there will be an upgrade or a patch released to fix that bug.. and then another..and another ...and so on. This is mostly due to the fact that most software rarely effect human life... but when a "crafty" software developer does write a such a software, we are in for some serious trouble.
Not all the software development fraternity works this way. There are certain organization that are required to develop 99.9% bug free software or risk loosing a million dollars or a million lives. NASA is one such company, a bug in code would mean loss of over a billion dollars.. and guess what! they don't do version upgrades on space vehicles. It does what it is supposed to do. No one is perfect though, the MARS land rover running Linux had a small race condition and that had jeopardized the whole multi billion dollar project... and imagine the mental state of the computer programmers who had the whole world looking over their shoulders, ready to point fingers should anything go wrong. Fortunately they recovered with minor losses. Boeing is another one, from auto pilot to auto land, everything depends on the software... a small bug would not only cause the death of many lives aboard the plane, but would also lead to the destruction of the multi million dollar equipment. Forget the biggies, the real time and embedded software developers are also better engineers because their software control the expensive machineries. Then we have the financial developers like Bloomberg... the whole money making fraternity depends on them, from Goldman Sachs to JP Morgan. A simple miscalculation can lead to a loss of billions of dollars.
I am an engineer/scientist by education, but its my profession that will decide what I really am;an engineer, a scientist, a blue collared programmer or a craftsman. After all as Batman said..
A craft is a skill, especially involving practical arts. It may refer to a trade or particular art.Crafts practiced by independent artists working alone or in small groups are often referred to as studio craft.The only thing that distinguishes craft from engineering is objective logic and intuition. There is no place in engineering for the "feel good" factor. It just a simple cold manifestation of science in a practical form, which in turn is just simplified mathematics represented in language understandable by humans.
So why is software development a feat of engineering? and not a craft?
Now there is nothing wrong with it being a craft. New craftsmen are trained by a master craftsman (something like internship/co-op).. they mimic everything the master does to achieve the end result. This works for general arts and used to work for medical science too few decades ago. So if you were to learn software development as a craft from the "experienced" developers, you would mimic everything they do... even if it involved throwing a dead frog after declaring each variable in a file, and it will not lead to a catastrophe until you are copying everything that the master developer does.
Advancement in technology has given so much slack to us "Computer scientists/engineers" that we do not evaluate the consequences of our action. We do not look at a problem as an engineer in other field would. Take an electronic or mechanical engineer for an instance. How many time have you known that they designed a system that failed or had a bug? Bugs are a commonplace in software engineering. Infact it is widely acknowledged that a shipped software will have bugs.. then there will be an upgrade or a patch released to fix that bug.. and then another..and another ...and so on. This is mostly due to the fact that most software rarely effect human life... but when a "crafty" software developer does write a such a software, we are in for some serious trouble.
Not all the software development fraternity works this way. There are certain organization that are required to develop 99.9% bug free software or risk loosing a million dollars or a million lives. NASA is one such company, a bug in code would mean loss of over a billion dollars.. and guess what! they don't do version upgrades on space vehicles. It does what it is supposed to do. No one is perfect though, the MARS land rover running Linux had a small race condition and that had jeopardized the whole multi billion dollar project... and imagine the mental state of the computer programmers who had the whole world looking over their shoulders, ready to point fingers should anything go wrong. Fortunately they recovered with minor losses. Boeing is another one, from auto pilot to auto land, everything depends on the software... a small bug would not only cause the death of many lives aboard the plane, but would also lead to the destruction of the multi million dollar equipment. Forget the biggies, the real time and embedded software developers are also better engineers because their software control the expensive machineries. Then we have the financial developers like Bloomberg... the whole money making fraternity depends on them, from Goldman Sachs to JP Morgan. A simple miscalculation can lead to a loss of billions of dollars.
I am an engineer/scientist by education, but its my profession that will decide what I really am;an engineer, a scientist, a blue collared programmer or a craftsman. After all as Batman said..
It's not who I am underneath, but what I do that defines me.
A very thoughtful article. Nicely written. But I would like to know the reason that set you to write this.
ReplyDeleteWell prof Per Brinch Hansen and Prof Jim Fawcett (yes I am a fanboi)...
ReplyDeleteThey have been in computer science since its inception and can see the complete picture. A conversation with them really provoked me :P ... Per Brinch Hansen along with Edsger Dijkstra (I think they were colleagues) have given some very basic and deep concepts on which the whole computing fraternity rests.
what difference does it make ?? isnt it all about money until u do ur own research ??
ReplyDeleteWell shantanu... Computer is my religion. If you feel as strongly about software as I do, you wouldn't talk about money... and it would matter whether you are creating a piece of art or a piece of machinery.
ReplyDeleteYeah i agree with that piece of art and machinery statement but i highly doubt art being created when u working fr some multi-billion,multi national company whose only motive is money ..work free lance and create a new genre of software or somethng like that ..i guess that wud be somethng worth calling art ...
ReplyDeletedude!!.. thats the whole point of this post... software development is not an art, it is engineering.. and thats the way it should be
ReplyDeleteObjections!!! :-)
ReplyDelete1)"Take an electronic or mechanical engineer for an instance. How many times have you known that they designed a system that failed or had a bug?" - Haven't you ever heard of failed models in automobile industry? (This was just to make a point, thts it! [:D])
2)"software development is not an art, it is engineering" - Engineering itself is a form of art with serious purpose and hence logic associated with it. 'Art' is a highly generalized term for everything that requires skill. Something like... 'art' being an abstract class inherited by 'craft' which alwaz has a purpose [:D] They share the same relation as science-engineering.
3> Therac-25: In fact the developers here were not at all crafty! 'Craft' has a serious affair going on with 'Diligence' since ages. Perfection, accuracy are all the virtues that a craftsman would crave for and so does any engineer. Just as Dr. Fawcett would like to put it: You can realize the logic for a problem solution in many ways, keeping it simple and short (and hence bug-free) is an art!
@shweta:
ReplyDelete1) "Haven't you ever heard of failed models in automobile industry?"
It refers to models which are not marketable not their engineering aspect.
2) Well your second reasoning is philosophical... its like saying that perfection is a perfect imperfection.Abstraction and logic are two different entities... A language can be expressed in a precise BNF... and art cant. Call engg a specialized art if you may.. but still s/w development should inherit from Engg and not art(well a little C++ reference wont hurt i guess :P)
3)"You can realize the logic for a problem solution in many ways".. I agree that u can realize something in any fangled way... but expressing your realization in the best way possible is engineering and not art.
1> "Not being marketable" is due to engineering faults or imperfections..dont u agree?
ReplyDelete2> Here, I was equating art to science and craft to engineering.
3> It is engineering, with all characteristics of art in it and hence can be paralleled with the word.
nope.. look at MAC and PC. Which is a better product and is more successful??
ReplyDeleteLook up VHS format wars..
Did you think there were no MP3 players before iPod??
everything you see around is marketing..
Mmmm, the Mythical Man Month is recommended reading for you at this point.
ReplyDeleteI'll wait for the automated, self-driven cars which function in all kinds of nasty environments before I deign to give automobile engineers the credit for major innovation.
Software is mostly research and development, not engineering (or architecture).
http://twasink.net/blog/archives/2004/10/if_architects_h.html
That's a good example of the current state of software today.
Most software development is the art of writing down exact specifications. The rest of it can be automated (and it has been).
Bugs are commonplace in software engineering
Bugs per unit complexity aren't all that common.
How many degrees of freedom does an automobile engineer have? What about his software counterpart?