Design & Define

30 Apr 2020

The Job of a Software Engineer

Before I started studying Computer Science, I thought it was mostly just learning a programming language like C or Java to make programs that do stuff. Now, nearing the end of my college career, I now know that learning a programming language is just a small subset of the discipline. I would say that the most significant and important part of the discipline is learning how to approach and solve problems. Essentially, programmers are given problems and asked to find a solution using various tools. These tools include programming languages and libraries, abstract data types, algorithms, and design patterns. Design patterns are not exclusive to software engineering, but they are a perfect example of the mindset and method used by software engineers. They are essentially a guideline for solving common problems that people have made and shared over time. As a general example outside of software, a design pattern could be something like a door handle. A door handle solves the problem of opening a door, but has various different types and implementations that are situational and dependent on the environment, etc.

The Baader-Meinhof Phenomenon

I have only recently been introduced to the term “design pattern,” but looking back, I have realized that I have encountered them quite often throughout my time studying Computer Science and writing code. It was kind of like experiencing The Baader-Meinhof Phenomenon, a.k.a the “frequency illusion,” where after learning about something, you suddenly seem to see it everywhere. The first one that comes to mind is the Observer design pattern, which is essentially an event handler. I encountered these in an Operating Systems course, where trap and interrupt events are essentially triggered when a change or event is “observed,” which then triggers other things. Another design pattern that I have used before are Singletons, which are like global variables. I have used them in a Software Engineering course in which we built web applications that had multiple pages and classes that relied on data in databases. We handled this with Collections, where a variable was defined that held a collection of data and was exported and shared throughout the app. The term “design pattern” is just a way to label techniques that anyone who has a decent amount of coding experience has used at some point. They are useful in that their defined structure can help to identity aspects of a problem and possible solutions, bothof which can make a software engineer’s life easier.