Software Engineering at a glance

18 Dec 2019

What is Software Engineering?

Software Engineering has sparked my interest ever since taking my first Computer Programming course back in high school. The demand for Software Engineering is rising very quickly, and even Coursera mentions in their article “Top 6 Jobs with a Computer Science Degree” that Software Engineering is one of the most popular occupations for people with a CS degree. Yet, I didn’t truly understand what Software Engineering was until I’ve experienced it for myself in the ICS 314 course at the University of Hawai’i at Manoa. The name implies that a Software Engineer basically creates software, which is technically correct, but does not capture the broader picture of the occupation. Software Engineers have far more responsibilities than their main task, coding, such as testing their code and working with other people (clients) in accomplishing their goals.

Coding Standards

One of the concepts of Software Engineering that I’ve found to be important is adhering to coding standards. This is a very important quality as it allows programmers to agree on a particular set of rules to minimize ambiguity from their code. What exactly do we mean by coding standards? To computer scientists, the Airbnb Style Guide and Google JavaScript Style Guide are perfect real-world examples of coding standards being enforced. To others, we can use a class syllabus as an example. At the beginning of the course, teachers (the client) and the students (developers) agree on a set of rules defined in the syllabus (e.g. grading policy for the class). Without this information, there would be a lot of ambiguity which can lead to more problems down the line in the course. In a similar fashion, coding standards seek to achieve uniformity for the language they are written.

Testing (the moment of truth!)

Another important aspect of Software Engineering is testing. While this concept is self-explanatory, it is still undermined by many developers. In the ICS 314 practice WODs (weekly assignments), we were provided a problem and a solution in case we got stuck while solving the problem. However, it was strongly discouraged to simply watch the solution and assume that you learned the content (my professor would call this a “Pedagogy Alert”). In the same way, programs should be tested extensively and beyond the simple “functioning” phase. Apps should not only work, but they should be able to handle the unforeseen circumstances.