Errol Hassall

View Original

What is Software Engineering?

Software engineering is a field in which you create software in the form of websites, games, servers, anything that runs on a computer. It’s vast, with many disciplines. Just like the medical field, you can specialise in different areas from security to web development, to game development and mainframes (yes they still exist). There isn’t one path in this field, there are tonnes and depending on your personality, strengths and weaknesses, you can pick any. I’ll add that software engineer, developer, programmer are all the same thing.

What do you actually do?

You program, but what is programming? It’s the act of instructing a computer to do certain tasks. Much like a recipe, it's an ordered list of actions to take. As a programmer you use a programming language, much like English or Japanese, something that the computer understands. That turn your thoughts into actionable steps for the computer.

However, this isn’t the only large part of your job. You also spend considerable time working with others, planning and in meetings on the next group of work. As a developer you’re part of a team, it is anything but a solo endeavour. As a result, you must plan the work to be done. Typically, teams will work in an Agile like manner, continuously improving the team, to become more efficient.

For example, if you are a web developer, you spend considerable time with designers, managers and other developers. Taking a ticket, working off designs and building features. You also spend time fixing bugs, little defects with the program.

Your typical day will look like the following:

  • 9am – start

  • 9:15am – standup (quick meeting of what everyone did in the previous day)

  • 9:30am – continue on previous day's work

  • 11am – meeting to discuss next fortnights work

  • 12pm – lunch

  • 1pm – finish your ticket or pick up a new one

  • 5pm – wrap up for the day

In between these meetings and blocks of time, you talk to other developers, review their work and talk to designers.

This is a fairly standard work day, you might have more or less meetings depending on the day or the company. 

One last thing to add, you spend a lot of time googling why something isn’t working and googling the documentation for a language. You just spend a lot of time googling, you have to get great at this. You never have all the answers, which leads you to search high and low across the internet for them.

Is it the right fit for you?

Software engineering is a fantastic field, but it's not for everyone. The stereotype of an engineer is that they don’t speak much, they’re nervous and quite anti-social. This couldn’t be farther from the truth. Yes, there are people like that, especially the older developers who have been around a lot longer when that type of personality was common. However, in my experience, there is a wide array of people. In fact, the people that are quite personable, do very well. You need the team to have a mix of personalities for it to be harmonious. 

Do you like to solve problems? Because that is essentially what being a developer is all about. You get a ticket, which is a bit of text and a design, that says here is the feature we want (the problem) and you have to solve it. You take that ticket, figure out the rules (the requirements) and then begin your work. This is doubly the case when it comes to the nitty-gritty of the problem. You’re coding away, happy, then suddenly a big monster arises (your code not working) and it takes days to figure out how to defeat it. Until finally you figure out the solution. You defeat the beast and move on with your life. Running into walls and figuring out how to navigate them is the biggest challenge as a developer. Overtime, 90% of what you do is easy, you’ve done it before, or it's similar to what you have done before. It’s that last 90% that gets you. 

If you’re the type of person that can’t put something down until it's solved. A person that loves a challenge, loves to figure out something difficult, then programming is the best place for you. Often programming is like solving a gigantic puzzle. The pieces being fragments of knowledge you accumulate over the years, as well as the stuff you don’t yet know on the internet. 

Programming is about piecing together information to solve problems. It’s rare to find a complete solution that exactly matches your problem. Which requires piecing together multiple solutions to solve your problem. This is the hardest part of programming, something that if you dislike, you won’t enjoy programming.

If you are one to endlessly learn, then this field is also for you. You can never learn it all, you will never reach the end. You can take that learning in many directions, pursue whatever takes your interest. It’s a remarkable field in that regard.

What are the best parts?

For me, it’s the achievement of solving a problem. Seeing that your hard work has paid off with something tangible. The struggle of days, banging your head on a problem only to finally find a solution. That feeling is something magical, it’s something I never get tied of. 

Working in teams is great, you spend time learning from each other and in the end you produce something of magnitude. Each team member brings something to the table, each member pushes the team forward. Working in a high achieving team, one that produces something they’re proud of, is a great feeling. You’ve spent months toiling away at this project, and in the end you have something to show for all your hard work. The team bonds through the hardship of the project, which results in a great project outcome. 

You always learn something new as a programmer. Whether it’s reviewing someone else’ code or being asked to produce a feature with a language you have never used before. The landscape is forever changing, which means that something you knew 5 years ago might not be relevant, but something new might make your life drastically easier. 

What are the worst parts?

It’s hard, which is great, but day after day if you’re in a tough project, or a tight deadline, it can be brutal. Some companies work you to the bone. Deadlines so tight you have no hope of hitting them, but they pressure you into working very long hours for months on end. Although this is getting less common, it’s still happening, especially in the games' industry. Furthermore, it can be hard to know if a company is like this before you start. Which is why I advise people to start in enterprise, where this is much less likely to happen. Enterprise companies often have a support network of developers, training, teams, all to help new and rising people in the industry. This support network is a great starting point.

The constant learning, the field is vast, and the technology is changing rapidly. You have to keep up, for if you don’t, you find yourself with a set of skills that no one wants to hire for. This means you need to know what skills are in demand, what skills are transferable, and what are not. This can be tough to start with, but fundamentally understanding how programming works, how to write good code and most importantly how to pick up new skills quickly will keep you employable. This is not a field you should walk into where you do all you're learning at university, then practice for 40 years. No, you must stay at least relatively up to date, even if it's to understand when the skills you have are declining in popularity. I’m not saying you need to be on the bleeding edge, constantly hooked into the latest trend. Far from it, but you must keep your skills sharp and your eye on the horizon. If this is something you can’t do even a little, then you might want to look at another field. You can still have a job, most likely for a long time, but eventually your skills will lose traction. You have to stay up to date.

How do I make it my career?

The best way to start is to do a bootcamp. These are 8+ week long courses which get you started on programming. Some are better than others, but primarily they are designed to get you a job. You spend the time building something for a portfolio, to show off as a way to get a job. This is the quickest and most effective way to get a job in the field. 

The other way is a university degree. I wouldn’t recommend this path, as a degree in Computer Science isn’t particularly beneficial, compared to being a good programmer with something to show. However, if you come out of high school, it’s quite the differentiator between two early 20-year-olds. One with a degree, the other with a bootcamp. Conversely, it takes 3–4 years to get that degree compared to 3–4 months at a bootcamp, so you have to weigh this up. 

Ultimately the field is mostly self-taught, by that I mean once you get into the field degrees don't matter. Not one company has asked about my degree after I graduated. I’m glad I did it, but I would have been at a similar level having done an intensive bootcamp, in a lot of ways. 

If you want to make the leap, you should watch some YouTube courses on programming. Such topics as “introduction to JavaScript” or “introduction to HTML & CSS”. These get your feet wet in the world of web development, which is the easiest path into the industry. If you enjoy this, then do a bootcamp. But most importantly, build things and show it off publicly. Having a place to show off your creations is worth magnitudes more than any piece of paper in 99% of cases.