The best way to determine whether software engineering is the right specialisation for you is to start working on a project and writing some code. It’s one thing to learn coding through a course (like in high school or ENGGEN 131), but it’s another thing to work on a “real” project, navigating design challenges, fixing bugs and going through the development cycle. The great thing is, unlike many of the other specialisations, it’s not hard to start doing real-world software engineering. You don’t need a degree or years of knowledge and experience. All you need is a computer and the will to learn and experiment.
If you’re on the fence about software engineering, I would recommend you give it a try by making something. It doesn’t have to be anything fancy or big. Just a simple project to get you started. If you’ve never done coding before, it may seem daunting and impossibly difficult. That’s perfectly fine, learning anything for the first time often is. There are plenty of great tutorials to help you get started on cool projects. All I ask is that you give it a fair chance. If you get stuck after a day, don’t give up. Try another tutorial, or learn a different language. If after multiple attempts you still aren’t enjoying it, then software engineering probably isn’t for you. At least you gave it a good shot, and now you’ve narrowed your choice for specialisations.
Obviously, this is much easier said than done. Even choosing a project to start with can be challenging. If you need help deciding where to start, first consider what area of software engineering most interests you.
Software engineering is a very broad subject that covers many different sub-specialisations. There are core skills common to all types of software engineering: these include writing and designing code, solving bugs, and testing your code to make sure it all works correctly. Depending on which specific technologies you choose to learn and work with, you can find yourself in different roles.
Here are four different areas of software engineering you should consider. This is by no means an exhaustive list. In my opinion, these are the most exciting and are commonly found when searching for internship roles.
1. Web/App Development
This should be self-explanatory—building all your favourite websites and apps on your phone! Websites (accessed through a web browser) are traditionally different from apps (on a phone or computer) but nowadays tend to be built using the same technologies. That’s why many popular services are available both on the web and as mobile/desktop apps!
Apps can be simple or highly complex. As such, there are different roles within web/app development.
To put things simply, all apps work the same way: first, they have some data. On Instagram, this is photos and videos. On Reddit, this is posts and comments. On Uber Eats, this is a list of restaurants with menu items. It is the job of backend developers to make sure this data is readily and efficiently accessible to users, which can be particularly challenging when some apps have hundreds of millions of users. Backend developers work with databases, building ways for apps to access this data (APIs), and making sure the data is secure yet fast to access.
All this data needs to be displayed to the user. It is the frontend developer’s job to take the data and display it to the user. Frontend developers work on what users see and interact with—think user interfaces, animations, menus, buttons and images. They work with designers to turn mockups into a functioning app. This code usually runs on users’ devices, unlike backend developers’ code which runs on remote servers.
If both frontend and backend development sound interesting to you, then good news: you can do both at the same time! This is called full-stack development. (Even if you’re only interested in one side of the stack, it’s helpful to have a basic understanding of the other.) Full-stack developers essentially have twice the knowledge to master—doing the job of two roles has its trade-offs.
To get started with web/app development you’ll need HTML, CSS to make it pretty, and JavaScript for making it interactive. Making a personal portfolio website is a popular starter project.
If you’d like to try front-end development, there are lots of great free APIs you can use such as Reddit, The Movie Database, NASA, and Pokemon.
Otherwise, for the full-stack experience, common projects include to-do apps, notes apps, or weather apps. (At this scale though, most of these will be frontend focused as the backend will likely be quite simple)
2. Game Development
If you love playing games, then this one might resonate more with you. There are some similarities to app development, but games use different technologies under the hood and are typically built on a much larger scale than apps. Think of all the different levels, characters, items, animations, and sounds that are found in a game. These all have to be designed, carefully pieced together, then tested to make a successful game. While user interface is important, game developers are typically more concerned about gameplay mechanics, optimising graphics, or fine-tuning controls. 2D games can already be highly sophisticated, but 3D games add a whole new dimension to account for.
Don’t let this scare you though, great games don’t have to be complex. Game asset libraries take care of the art and sound design for you, while game engines give you tools to make game development easier. Unity and Game Maker are popular options for beginners. If you’re making a game for the first time, I would recommend starting simple with a 2D game. Popular starter projects include puzzles, arcade-style games (where you keep going until you lose your lives) and platformers.
3. Low Latency Programming
With low-latency programming, the focus is writing the fastest, most efficient code. It’s all about taking information and processing it in the fastest time possible. You will be working with low-level languages like C and C++, and working close to the computer hardware, managing memory and caches. It greatly helps to have a solid understanding of data structures and algorithms. These types of problems are often used for interviews at large tech companies. This skill set has a wide range of applications, such as real-time systems (think smart cars, medical devices and aerospace), or high-frequency trading, developing algorithms to make financial trades every second or fractions of a second.
If this sounds like something you’re interested in, a good place to start is by learning data structures and algorithms by working through LeetCode problems. Python, Java, C++ are popular choices for this. If you have no experience, you will likely find it very difficult. The best way to learn is to give each problem a try. Draw it out and try to explain how the solution should work, without writing code. If you can’t figure it out after 20-30 minutes, check the solution and watch an explanation video. There’s no shame in this—over time, you’ll begin to learn the common patterns/approaches which will help you solve problems in the future.
4. Machine Learning Engineering
You may have heard of this little tool called ChatGPT. It was (largely) the work of machine learning engineers. Machine learning engineers work with a ton of data to produce complex models which are then able to make predictions. This is known as machine learning, or now commonly artificial intelligence. There’s plenty of coding involved, implementing algorithms and models but that’s only half of it: you’ve also got to process and analyse data, then interpret the results. Is your model producing desirable results? Is it giving unexpected behaviour? Expect to work with a lot of complex maths and linear algebra, which underpins all of this powerful technology.
Sounds exciting? Python is the go-to language for machine learning projects. Play around with libraries such as NumPy, Pandas, and PyTorch. Look up tutorials and start playing around with online datasets and tools.
There are plenty of areas of software engineering that I didn’t cover here—such as DevOps, security, operating systems, or firmware (at UoA, this is more the domain of computer systems engineering). Feel free to do your own research and explore these topics.
I’ll leave you with a last piece of advice: No matter which engineering path(s) you choose, even if you decide software isn’t right for you, the best way to learn is to be curious and open-minded. Find anything that sounds remotely interesting to you, go down that path and explore. You never know where your curiosity may lead you.
(Photo by Christopher Gower on Unsplash)