What is software engineering?

One cannot bake a cake without knowing what is a cake. Therefore, why should we study software engineering without knowing what is that?

flickr photo by James Cridland https://flickr.com/photos/jamescridland/5734151121 shared under a Creative Commons (BY) license
flickr photo by James Cridland https://flickr.com/photos/jamescridland/5734151121 shared under a Creative Commons (BY) license

According to the ACM, software engineering “is concerned with developing and maintaining software systems that behave reliably and efficiently, are affordable to develop and maintain, and satisfy all the requirements that customers have defined for them” (2006). This definition, althrough  complete, is confusing. Let’s split it by parts:

  • “developing and maintaining” – Software developing does not limits to developing.
  • “software systems” – This is obvious.
  • “that behave reliably and efficiently” – Is inefficient and/or unreliable software still software?
  • “are affordable to develop and maintain” – Sometimes starting from zero is easier.
  • “and satisfy all the requirements that customers have defined for them” – Software is built upon requirements. Otherwise, it’s not focused on customers.

I’ll stick with the definition by ACM to build my own definition.

Software engineering requires applying multiple areas to the building of software. This does not limit only to computing, but also science, industrial production and even art.

  • Science: Computer science is a thing. Algorithm analysis, pipelining, computer architecture, for mentioning some, are areas that relate directly.
  • Industrial production: Software engineering is a process, and as a process, it can be optimized in order to obtain better results with less resources (including time). This optimization can be compared to some non-software industries, which search for the closest path to perfection.
  • Art: Building software requires creativity. It requires to visualize complex things into simple solutions. I believe that a well written piece of code can be compared to a poem; an example can be found in Perl, which is a language that allows ofubuscated code, making a simple code quite hard to read. On the other side, some
    can be understood even by non-coders.