People ask me this question all the time when I reveal my profession: what exactly IS a software engineer? The answer of course, varies depending on the audience. For those outside the IT industry, I usually just reply “I work in software or IT”. To most, engineering is synonymous to infrastructure or mechatronics – and can be a confusing term when used with software. However for those few within the industry, there’s a vital difference to discuss that forms the basis of a successful career in software engineering.
IT developers & programmers – are they identical?
Let’s start by explaining an IT developer, or programmer, or software specialist. Much like a fashion consultant or mixologist, they are known by a variety of combinations. Generally, these IT titles mean the same thing – they describe someone who:
- Creates or updates websites and their related systems, for example online stores, tourism websites or transport (bus, train) journey planners.
- Develops mobile apps & games, or even desktop games. (Angry birds? Google maps? Very different divisions, but they have some common ground.)
- Works on internal corporate systems, enabling them to exchange information between each other. For example, sending information from a water meter reader to a billing system.
- and more – here’s a brief breakdown of the different programmer types.
Much of this is my area of expertise! I’ve spent a large part of my career creating school information portals, eCommerce online stores, and other internal software systems that I can’t publish (oooh secretive). It sounds simple – but no two developer skillsets are the same – the world of software development has been growing for decades, long before I began. You can of course, view my specific experience in LinkedIn. You can also view the wide array of roles available on Seek. Importantly, a developer needs to continuously and dynamically grow their skillset – as the market is consistently shifting with new technologies and concepts. Heard all the hype about ‘cloud’ software? Or 3D printing? As new concepts are introduced, developers in that area need to keep their technical skills up to speed, or risk being left behind. A developer can never reach a point where they stop learning. Ever. If they do, this is career suicide and they’ll need to change roles or companies, stat – a decade worth of 1st year professional experience won’t help anyone.
Where does a software engineer fit in?
Succinctly, a software engineer is an IT developer with a significant twist – we have specific guidelines and techniques to direct the solutions we produce. They are designers as well as developers. That’s also me! Did you know that engineers spend their first year at university studying all the different disciplines (or majors) of engineering? Software is no exception – during my time, I covered civil, environmental, electrical and a few others. Not all of them were mandatory, but overall the intent of the curriculum design was to explore different types, presumably to pique your interest in more than one – to give you options. Engineers like options. Architects really like options. In fact – for University of Queensland at least – you don’t nominate your engineering major until your second year. Sadly, the other disciplines are a distant memory for me now, but the principles learned in that first year (and onwards) are not.
Therein lies the primary difference between an IT developer and a software engineer – the underlying principles of software engineering, for example enterprise integration patterns. Some people (developers) would undoubtedly call that statement elitist, but there is some truth to it. A developer will get the job done, no doubt – whether its your website built, an internal company application or even some small business automation. A select few will even produce excellent work. On the other hand, a software engineer is equipped and trained to deliver solutions that are best practice and can scale with your business or product. This sounds similar to a sales pitch – but you can read more about some of the high level software engineering concepts to decide for yourself. Engineers use software design patterns to accomplish familiar tasks in a common way. However, it’s important to point out that a good developer will often apply some software engineering concepts without having directly studied it.
The other undocumented aspect of a good software engineer is clear communication and consideration of the bigger picture. A technical skillset doesn’t always spell out the other large component of software: gathering requirements from clients and designing a scalable solution. In project parlance, we call this the SDLC, or Software Development Life Cycle. You may not have guessed it, but creating or even changing software often requires a significant amount of discussion and negotiation that aims to balance time, resources and of course, money. These limitations often mean that certain design techniques are often skipped. For example, some software engineers swear by software modelling concepts such as UML – however I’ve had minimum scope to use this in practice. Of course, everyone’s experience is different. Above all else however, negotiation and communication is key to ensure that clients understand exactly what will be delivered.
I also lend to the belief that exceptional software engineers also make for good technical leads, architects and project managers – as they tend to have a well-formed understanding of project challenges as a whole. However, this is just conjecture and is often left up to the specific individual with respect to their communicative and professional capabilities to deliver successful business outcomes to clients.
Motivation – why is this my career?
I think this is a question anyone should ask themselves on a regular basis. Why am I spending most of my daylight (and often nighttime) hours on these endeavours? Where do my passions truly lie? The answer for me is that while I crave a detailed technical challenge, I first and foremost enjoy providing successful solutions to clients. To see my (our) finished product – utilized heavily by happy customers – gives me a brilliant sense of achievement. I’m sure plenty of others in my position would agree.
However in the past few years, I’ve also evidently developed a new passion and caught the travel bug. My hometown has always been Brisbane, Australia – but it’s quite far from most of the world. Our fair planet is astoundingly gigantic and filled to the brim with culture and natural beauty. Having been to Japan (twice), Europe, Fiji and more, the next logical question for me is: how can I continue to explore the world excitedly while achieving my career milestones? How does a software engineer travel-work continuously? Well, I’ll certainly keep you posted.
What are your thoughts? Have you found other identifying factors that define a Software Engineer?