For those of you who do not know, I started my academic career in engineering. I bounced around a bit and eventually landed on civil engineering. Coming from an engineering background, I have always approached problems with a very methodical mindset. I tend to break problems into smaller and easier to manage parts; throw the solutions to all those parts together and you’ve solved your problem. Now in my final term of my master’s degree in computer science, I have come to realize that skill has come in very handy. Students are often flustered by the complexity of a larger project, but this is where software engineering can save the day; follow some methodology for breaking the project into parts that you can easily solve.
I am often asked why I switched from civil engineering to computer science. While I often just say something along the lines “I like computers”, the answer is a little more complex than that. Let’s take a bridge for an example. Civil engineers will design the bridge using a tried and tested methodology, breaking each part down to calculate the necessary load it needs to support, what material should be used to support said load, etc. But something weird happens when they are done designing the bridge; usually someone else takes over and follows their design to construct the bridge. This why I like software engineering more than civil engineering; I get to work on a project from conception and every step along the way through to completion, and often long after completion.
One area of software engineering that I think should be covered more in university classes is maintenance. Projects are often worked on for at most a few months, and students do not experience the maintenance aspect of software engineering until they reach the workplace. Let’s face it, ongoing maintenance of a project is boring; there is nothing like the euphoria of completing a project you have been working on for months and releasing it to the world, but I would say that half of my professional career has been related to maintenance. Computer systems are constantly changing, updates, security patches, etc., and your software needs to change with it.