This post is not about the differences between a coder, an engineer or any of the grey areas of roles in between. It is about your understanding of the code you write.
I am often asked, as I am sure most people are, what I do for a job. I used to answer with: “I am an engineer” or “I am an architect”. At this point, people think I am a mechanical engineer or a structural architect, so I extended that to: “a software engineer” or “a solutions architect”. To non-technical people, this tended to end that part of the conversation, and me playing down the role by saying: “I am a techy”.
Sometimes, however, I am then asked: “what does that mean you do”. I answer with: “I design technical solutions and write code”.
This answer made me consider what I do for the job title I have. Am I fundamentally a coder or an engineer and what defines the two?
Let’s start by understanding what a coder or an engineer is. For me, at a fundamental level, a coder or an engineer are individuals that understand and write code: coding.
We could look at what type of code we write; what it represents; what device it is for and what the context is around the reason for writing that code. However, I want to try and understand at a top level whether you think you are a coder or an engineer.
Coder, programmer, developer or software engineer
As part of this post, I am using “coder” or “engineer”. These terms are not the only terms that are associated with someone that codes. People have been coding for many years, and over the years these terms have changed and evolved. At the time of writing, you may have also heard the terms programmer, coder, developer or software engineer.
I have found the term coder is used for more junior individuals whereas the more experienced and senior individuals are known as engineers and architects with the programmers and developers somewhere in between.
Moreover, people tend to define your role based on how many languages you are versed in; how many years of commercial experience you have and whether you are self-taught or have a degree in something technical like Computer Science for example. The more languages and years of commercial experience pushes you towards the “engineer” status while a degree gets you there quicker.
I find this understanding fascinating and at the same time so wrong. For me, and it is essential to note that this is my opinion only, whether you are a coder or an engineer is all about your understanding of coding and how you use it.
¿Una cerveza por favor?
I always look at the spoken languages to explain my point. I am not fluent in any spoken language other than English, but in a parrot-fashion, I know how to ask for a beer in French or Spanish when I go on holiday. With the help of a phrase book or Google translate I have built up a library of common phrases I can comfortably use knowing I can always look up any phrases I don’t know.
After many years I can learn several different languages by learning a standard set of phrases that build up over time. Over time I can become very competent in a language just because I am regularly using it.
However, do I understand languages? Someone who understands languages not only understands the meanings of the words a sentence contains but also the semantics (the structural or grammatical meaning carried by it) and the syntax (the order of the words).
In my honest opinion if you really and truly understand linguistics, then you should be able to apply your knowledge to any language more quickly and the task to learn a new language is more about building up your knowledge of the vocabulary and the specific nuances of the language.
Software engineering and architecture
I believe this to be the case when we talk about programming languages and coding. It can be quite easy to pick up a programming language, especially some of the scripting languages. And this can be achieved by following some basic tutorials and learning some standard snippets.
However, what if you understand the science behind programming and you understand the semantics and syntax that makes up programming? You should be able to pick up most programming languages. Speaking from experience, I believe this to be true. In my current role, I have had to regularly switch between PHP, Java, and C# in the same day. And because I understand the concepts behind the language, I can do this. I hadn’t used Java for over eight years but managed to pick it up quickly.
It also helps understanding design patterns and principles as they allow you to use repeatable solutions and processes to the same problems across different programming languages. They are almost like a description or template on how to solve a problem in pseudo-code to use for development in any language.
Self-taught or degree
How does learning to code through the self-taught route or via a degree make a difference? Well, again I think it all depends on how the teaching allows you to understand programming. Some degree courses are very hands-on and specific to a particular language. These courses may not give you a detailed understanding of programming whereas some degrees that are very theory orientated teach you in depth about engineering.
You can self-teach yourself on specific languages or understand the concepts behind programming and design patterns depending on what level you want to reach.
So, am I a coder or an engineer? I am most definitely an engineer, and if I had to advise an individual starting the development journey, I would suggest they focus on the concepts of programming and design patterns.
By understanding these differences in coding ability also helps you understand how an individual may fit into your development team.
Please remember this is my opinion, and I welcome any feedback or thoughts on what I have discussed.