Dogukan Sonmez

Currently in Munich, Germany

Java Groovy Python

No-Sql TDD Scrum

Django Shell Cloud

May 09 2012

Software Engineering

At this post I’d like to expose what does stand for “Software Engineer”. I am trying to find answers for questions like “What do Software engineers do”, “Is Software Engineering an engineering discipline”.

What do Software Engineers Do?

  • Analyse the intended application to determine the requirements that must be satisfied and record those requirements in a precise, well-organised, and easily-used document.
  • Participate in the design of the computer system configuration, determining which functions will be implemented in hardware, which functions will be implemented in software, and selecting the basic hardware and software components.
  • Analyse the performance of a proposed design (either analytically or by simulation) to make sure that the proposed system can meet the application’s requirements.
  • Design the basic structure of the software, i.e. its division into modules, the interfaces between those modules, and the structure of individual programs while precisely documenting all software design decisions.
  • Implement the software as a set of well structured and well documented programs.Integrate new software with existing or “off the shelf” software.
  • Perform systematic and statistical testing of the software and integrated computer system.
  • Revise and enhance software systems, maintaining their conceptual integrity and keeping all documents complete and accurate.

These are main steps that software engineers working on while developing systems. Comparing with other engineering disciplines more than almost any other technical or engineering field, software development depends upon the human mind, upon human effort, and upon human organizations. From the day a project starts until it is retired perhaps 30 years later, human involvement is critical to every step in development, enhancement, maintenance, and customer support.

Is Software Engineering an engineering discipline?

Even though we call ourselves as A software engineer, unfortunately software engineering is not yet a true and recognized engineering field. It will become an engineering field when it accomplishes better quality control, better change control, better measurements, and much better quantification of successfully finished project.

If software engineering is to become a true profession rather than an art form, software engineers have a responsibility to help customers define requirements in a thorough and effective manner. For example physicians don’t just passively ask patients what the problem is and what kind of medicine they want to take. Our job as software engineers is to have professional knowledge about effective requirement gathering and analysis methods and to also know what kinds of applications might provide effective “therapies” for user needs.

To put software on a sound economic basis, the paradigm for software needs to switch from software development using custom code to software construction using standard reusable components. Another major change is the switch from custom design and line-by-line coding to construction from reusable designs and reusable code segments.

When the software industry can measure performance consistently and accurately, can estimate the results of projects with good accuracy, can build large applications without excessive schedule and cost overruns, and can achieve excellence in quality and customer satisfaction, then we can call ourselves “software engineers” without that phrase being a misnomer. Until our successes far outnumber our failures, software engineering really cannot be considered to be a serious and legitimate engineering profession.