I like to joke to my friends that the only thing that makes you a good software engineer is knowing how to google the solution to any problem. Of course, in reality it’s quite a bit more complicated, but what I mean by that is it’s very rare that I will come across a problem in software engineering that I will know how to solve right away. However, I have the skillset and problem-solving ability needed to figure it out (perhaps with a little help from google).
Software engineering is all about having the tools to solve problems, and adapting solutions to problems that you or other people have solved to come up with solutions to new problems. My educational journey as a computer science major has been all about developing these skills, things like using coding standards, understanding user interface frameworks, and utilizing design patterns.
Of course, the staple of computer programming: coding standards. Coding standards are sets of rules and guidelines every programmer should follow in order to produce neat, organized code that’s easy to understand. It’s the first thing I was taught when I started learning to program. They can seem insignificant and nitpicky at first, but when you’re working on a big project with lots of intertwined code, coding standards are a must. Especially in this day and age where many programs are open source, it is important for other programmers to be able to read and understand your code, so they can use it for their own projects. Coding standards make it much easier for programmers to reuse code to derive solutions to new problems.
UI frameworks are something I’ve been introduced to much more recently in my educational journey. Namely, I’ve been learning to use React and Bootstrap. UI frameworks are a big part of software engineering, and it’s essential to know how to use them. Knowing how to use all of them, however, is completely unreasonable. Learning to use new frameworks is another tool in the belt of a software engineer; knowing how to look up documentation and learning new syntax on the fly are the essential skills needed to use any framework. Using frameworks is a great example of how valuable it is to have those general problem solving skills, rather than just having the knowledge to solve one or two problems really well. Instead of knowing a couple frameworks like the back of your hand, it is so much more valuable to have the tools to figure out how to use any framework.
Unlike coding standards, which I learned about when I started coding, and UI frameworks, which I’ve more recently become proficient with, design patterns are something I have yet to properly utilize. I learned about them very recently, and I think the next step in my education is to learn how to use and understand design patterns. Design patterns are reusable solutions to general problems that can be adapted to fit more specific issues. Design patterns are a crucial part of a software engineer’s toolset, and understanding them is the next step of my journey to expanding my skills.
So what is software engineering? My definition of software engineering is someone who learns how to solve problems. It’s not about knowing the solution to problems, rather it is understanding the process of solving a problem and having the skills to figure it out. A great software engineer is someone who is constantly learning.