The more software developers (programmers) that I see enter the job market, the more I see programmers isolating themselves into specialties. It may be Unreal or Unity, perhaps it is client or server, it could even be artificial intelligence (ai) or network programming. Whatever it is, programmers these days are specializing and it’s bad for business.

Code is never just some assembly line where tasks flow down one column (say networking) and it can do all it needs. You will always need to interact with client, server, UI, graphics, AI, etc. Computer code is a beautiful tapestry, each thread interweaved within the next, a thread from one corner may find it’s end on the other. When programmers specialize in specific fields, they not only hurt themselves, but they may be hurting the business they work for as well. Believe it or not, the same code that runs AI is the same code that runs operating systems, it is the same code that runs databases and embedded devices. There may be an uncountable number of languages, as if they all fell from the Tower of Babel, but they have a unifying source (machine code) be it software instructions of a VM, or hardware instructions of silicone.

The problem

Programmers may be seen as logical thinking machines that could rival the likes of Spock, but if you dig deeper or spend any time with them, you’ll notice that they are very tight balls of emotion packed densely into a singularity. Programming is a tough role, if you make mistakes, it’s not because your hand slipped, no; it’s because your logic/solution is bad for the current problem. This is an incredible hit to pride, after all, nobody wants to be seen as stupid.

Pride, as it always has, converts man to stone, rigid and inflexible. It causes developers to dig deep into a single field until they feel they have mastered the subject. It is far safer to master a single topic, say artificial intelligence, than it is to venture out into the stormy waters of threaded network programming. This lack of adventure could partly be placed upon the feet of the developer, of whom, could spend their free time charting monsters in the unknown, but this can also be placed upon the feet of the businesses they work for.

There is an internal struggle in business, once you’ve labeled a developer something like “client engineer” you can’t give them tasks for things “not within their expertise”. They use their label as a shield from the pain and stress of venturing out and potentially looking stupid or incapable in the process. Once upon a time, businesses couldn’t find programmers, they didn’t exist, so they would hire a “programmer”. This ancient mythical beast would know client, server, graphics, threading, networking, and just for good measure, they could draw art, and make music for the game too. This renaissance man was the backbone of the business and commanded the respect and admiration of all the creatures that dwelled within the dimly lit coding dungeon— known as the windowless room in the back.

The solution

To those of you who claim to be programmers, I urge you to go beyond what you know. Rather than spending your free time at home on Reddit or YouTube, instead try programming something you’ve never programmed before. For example, when I wanted to learn the Go programming language, I converted my personal 3D game engine I wrote in C and Vulkan into Go. By the end of that, I had nearly mastered the Go language concepts. But that’s just learning a new language, to cross disciplines, I urge you to write something like a game engine from scratch. Don’t use any 3rd party libraries. If you need networking, write it. If you need physics, write it. If you need a vector library that uses vectorization technologies like NEON (Android) or SIMD (x64), then write it! Learn how the sauce is made, go out and write assemblers, GameBoy z80 assembly, C64 6502, or write a x64 assembly program that calls C rather than C calling x64. Also know your enemy! I may not agree completely with TDD, SOLID, clean architecture, etc; but I know them extremely well and have learned a ton of new ways to think along the way.

To those who lead a team that includes software developers. Try giving your programmers tasks that don’t fit within their prescribed label. Better yet, remove the label entirely and just have “programmer” or “software engineer” as the title. No, “full stack” isn’t a solution either as that is just a fancy word often reserved for server programmers that know how to do some client stuff to connect the server.

The reality

Of course, I may be a dreamer, but I also realize that these sorts of aspirations are not exactly possible. Teams are structured in ways that make this implausible, programmers still have their pride and emotions, and coding on free time is difficult when one wishes to relax (and the developer doesn’t consider more programming to be relaxing for some reason).

All that being said, there are still some of us out here in the wild. Those of us who can’t stop until every stone has been turned, measured, drawn, charted, and indexed into a highly normalized relational database.