“Code” by reibart/flickr

Are You a Programmer or an Engineer?

On engineering as philosophy.

Tomás
3 min readJun 25, 2013

--

I read this ambitious but surprisingly facile post entitled “Are you a Hacker, Developer or Engineer” just now. The gist of it being that a “hacker” just plays around with code with little understanding of its workings, a developer uses best practices but doesn't know why, while an engineer understands why using best practices is a good idea. I guess I was surprised to find that I, a novice coder, was somehow now considered an “engineer” in this categorisation.

I’ve heard several of my computer science, programming, software engineering and IT friends complain that what they do isn’t taken seriously enough by the mainstream. I’d argue that articles like this don’t help. Yes, you can learn to program on your own, and you can even learn how to be a good software engineer on your own (with years of effort) but these efforts require a lot more than just “understanding best practices”. Programming is the skill of coding and understanding computers; engineering is about having a design philosophy with the underlying theoretical knowledge to back it up- which is not the same thing.

Computer science is, in many ways, a branch of mathematics as well as a discipline in its own right. Among other things, it uses mathematics of algorithms, number theory, graph theory, set algebra and other fairly advanced topics. Due to their nature, computers have been used by mathematicians to help solve things such as the 4-colour map theorem and other difficult problems.

A good engineer needs to understand algorithms, algorithm design, data structures and how to best design for and apply them to particular problems. There’s an enormous difference between using an algorithm that has a linear growth rate versus an exponential one. These techniques and differences are critical in the design of complex systems that involve complex/large data sets or prime factorisation or finding shortest routes or any number of computationally difficult scenarios. Examples include search engines, artificial intelligence/machine learning, neural networks, social networks, navigation software, cryptography, bioinformatics, parallelism, even shipping schedules! Pretty much anything actually cool requires engineering knowledge.

Complex code involves algorithms within algorithms within algorithms; not only does it need to run well for the computer, it needs to play well with humans and be readable, functional and capable of being maintained. And this also is where the work of an engineer, a scientific designer, comes in. It is necessarily creative as well as quantifiable and subject to mathematical and physical law. It requires principles and intuitions and a deep understanding of what is being designed.

These principles and philosophies are language and platform independent. Yes, various languages and platforms are optimised for different things and operate at different speeds, however the underlying principles remain the same.

Notice that I haven’t said anything about needing to go to university to be an engineer or a programmer. You don’t, if you’re smart and motivated it’s possible to learn this stuff on your own, but tertiary courses help you learn theory and offer more resources than doing it on your own. Two interesting posts come to mind when thinking about this. The first is about what difficulties self-taught programmers have in regards to theoretical knowledge. The second is about how a self-taught programmer managed to get hired by Google. In essence, it’s possible to learn it, but you need to work damn hard! Really speaking, you need to work hard regardless if you want to become a true software engineer, no matter what path you take.

My final words are: don’t sell yourself or your field short. Theoretical knowledge is useful and will boost you to a much higher level of achievement than you thought possible. Even if you’re “just a programmer”, aim to be an engineer. You’ll find that the results are well worth the effort.

--

--

Tomás

Diplomat. Adventurer. Bard. Conquerer of foreign lands. Seducer of women. Saver of lives.