Thursday, September 8, 2011

Developers VS. Engineers


My perception is that a developer’s job starts where an engineer’s job ends. Though an engineer’s job does not end literally, but when design is in a shape suitable to be handed over to the developer can be termed as ‘end’.

Accepting the fact that a developer is not just a code writer or a syntax specialist, he would also review and modify the design, so the jobs of both overlap but are clearly different. Just like the jobs of a technical and creative writer are totally different but of course both have to ‘write’.

A designer has the eye to see through a design whether it is easily modifiable or not. For example when implementing user roles the designers concern would be what if a new role has to be added later on? Does the design allow this change easily or not? What if a role has to be removed? Whether all the roles present in the real time domain should go into the software system at all? An architect’s concern would be how to manage the interaction of modules and layers and which architecture to follow reviewing the trade offs related to speed, modifiability, etc.

So if my perception is correct and ‘design & architecture’ is different from ‘development’ then should developers call themselves engineers, when they are not fulfilling the role of an engineer? I would not prefer to call a job an engineering one unless it is related to whole lot of design decisions, architectural decisions and their documentation and modeling. Starting off from the domain model, use case model, vision document ending up somewhere around class diagram and partially final architecture diagrams. An architect may or may not take part in coding.

I remember when I started my internship I was given an individual project to start with and was expected to come up with the database design first up, and I was a kind of shocked that how am I supposed to jump unto database design before having gone through the ‘analysis’ phase, or without design documentation. However I fast forwarded through the design diagrams for my own understanding. But this was actually how work is done practically, and I find there is a gap in how things are being done in education and industry.

Later on came to know the same from other friends who were working at software houses that things are not done practically as we are taught in university. Most people think that they don’t have this much time, where as in books we have read that time spent on design and architecture is the most beneficial. Many people believe that documenting or not documenting design is not a concern on professional level, as both ways bugs are produced!

My question here is that all that we learned throughout our degree, and all that we drew so much, are they just fairy tales? Or can they really be implemented in real time settings and larger scope projects? Are these methodologies (RUP, Agile, XP) actually followed or is it possible to completely follow them? most importantly: Does the industry differ between a developer and an Engineer? (If the answer is yes, then why are universities offering two lines i.e. computer science and software engineering?)or do they (the companies) just need 'code writers'?

No comments:

Post a Comment