The Red Queen

A counter-intuitive path to relevance in a programming career

The Red Queen hypothesis stipulates evolution is primarily an adversarial process, where the main competitors are other species and other individuals within our own species. In other words, adaptation is a constant process, it never reaches a zenith and the quicker you adapt the more you will force others to follow suit.

The name is an imperfect metaphor based on the Red Queen from Through the Looking-Glass. The Red Queen seems to be constantly running, however, she states that she is simply trying to stay in one place, that if she stops running she will fall behind.

Even assuming there’s no competition from other species or the environment, competition can arise from within the specie, due to mutations.

A good example of this hypothesis is the human race itself. We are usually free from the laws of nature, an exception from most models biologists create, but it’s not the case here.

Humans have managed to “defeat” many of their parasites through medicine. We borrowed the mechanisms fungi used to defend from bacterial infections (antibiotics) to essentially make us immune to the most infections. We improved the mechanisms that our own body uses to fight viruses (antibodies), to eradicate the deadliest of plagues.

Yet, getting an upper hand over diseases results in them fighting back even harder. Human infecting bacteria have now evolved the ability to counter antibiotics and new viruses evolve to counteract our prevention methods.

So we carry on researching new ways to improve our immune systems and genetically engineer bacteria fighting viruses.

If we stay still, we don’t get to enjoy the benefits of our “elevated” position forever, we fall back down the evolutionary ladder. We must keep getting better just to stay the same.

But, as our archeology and history show us, one competitor stands above all throughout our evolution, other humans.

Programmer against programmer

A good sign of a field with extremely fierce competition, is a field that’s moving extremely fast. This may seem a bit counter intuitive, but makes sense once you realize most individuals don’t improve for improvement’s sake, they improve in other to “survive”. We don’t run to progress, we run to stay still.

The programming job market, at a glance, offers just what your average individual wants, financially speaking. High salaries, jobs in growing companies with insane profit margins (apparent security) and a relatively reduced workload in terms of physical stress and time spent at work.

Thus, many economically rational people will become programmers.

However the premise of endless employability as a programmer runs into two issues:

  • The Mythical Man-Month problem. You can’t reliably increase the quality of a product by increasing the size of the team working on it. At some point, larger teams result in worst products due to an ever increasing communication overhead.
  • The market saturation problem. A lot of new software carves a market share by making other software obsolete. Medium.com’s popularity reduces that of Blogger.com, Facebook’s user numbers cut into those of MySpace, Gmail’s success reduces that of YahooMail. New market niches (e.g. Voice control technology) appear all the time, but at the same time, old markets (e.g. text adventure games) dry out.

The improvement in our market is driven by a constant feedback loop, at one end sits the programmer, at the other end, the customer.

This, in turn, results in programmers forcing other programmers to either adapt to the new world they are creating, or be outcompeted.

A single website may chose to switch from a “static” to a “dynamic” experience in order to innovate. A few others will follow it because of the promise of profit. New websites will adopt this standard because it seems to be what the market leaders are doing. Many others will adapt once they see customer losses. The rest will get left behind, “killed” by new and adapting competition.

The key fact here is that newcomers to the scene, will try to follow the leader. New technologies don’t start at the bottom of the quality ladder, they start as close to the top as they can get. The metaphorical bottom is filled with the dinosaurs, technologies that are slowly dying out.

The dynamics that apply to software closely mimic those that apply to programmers.

A programmer’s “lifespan” is mainly dictated by the skills they have. As the skills become irrelevant to the success of a product, so do they.

This means that the “hierarchy” of programmers won’t work the same way as the hierarchy of professionals in more static fields. The surgeon or lawyer of 1993, will be relatively well adapted to today’s world after a few months of catching up.

The programmer of 1993 will be completely unfamiliar with: mobile device, the internet, the Linux based OSes, GPUs, all libraries that we commonly use and almost all popular programming language.

Your average tech-savvy 14 year old will be able to teach a 1993 programmer quite a few tricks.

It’s hard to see the deadliness of the arms race in the world of programmers from the outside, since people will focus on the leaders and the newcomers.

We don’t pay attention to the guys in their 30s and 40s complaining about reduced pay, worsening working condition and inability to find another job.

New programmers come in, armed with the skills that helped others thrive in the last few years. What they don’t realize is that those skills will soon become irrelevant, they are now stuck in an arms race where they are forced to either evolve or die.

Human nature is working against us

In an every shifting environment, whatever advantage you had 20 years ago, usually becomes a neutral or harmful trait 20 years later. As humans evolved and built societies where humans compete against each other, useful traits such as a keen fight-or-flight reflex or ability to efficiently store ressources as fat have turned into disadvantages.

Our DNA adapts slowly, but the minds of individuals can adapt at an incredible pace. Our hunter gatherer brain could adapt to building parking assistance hardware in the 90s and it can adapt to building self-driving cars in the present.

However, our mind’s adaptability often fades with time.

The “aging” of our ability to learn is an evolutionary trait. It parallels our growth. The younger we are, the faster we grow and the more susceptible to epigenetic factors we are. This allows us to spend our youth honing in to our environment. As we grow older, we start spending more resources on surviving and less resources on adapting. If the environment changes, it’s the younger generations that will have to adapt, the old will soon die either way.

The same principle applies to our minds. We are meant to spend our younger years learning, adapting. As we get older, the focus shifts from adaptability and accumulation to improvement.

A hypothetical centenarian physicist is likely to be a master at mentally solving differential equations or computing the eigenvalues of a matrix using pen and paper. But they will encounter difficulties building a Python program that can accomplish those same tasks, something your average student could do with their eyes closed.

The picture I’ve been painting here might seem pretty bleak. However, nature once again comes to the rescue and shows us ways of solving this problem.

The heterozygote advantage

The “standard” advice for keeping up with a field is essentially a bunch of cliches that go along the lines of: “Practice contiguous learning”, “Move into management”, “Invest your money wisely”… and other generics lines found in 50s self-help books or spoken by teenagers working HR.

That’s not to say the above advice isn’t true, but it’s truth that everyone knows. It’s like telling a fat person to eat less sugar and exercise more.

Instead, let’s look at a better way of adapting: sex, metaphorically speaking.

In biology, the Red Queen Hypothesis actually came about as a way to justify the existence of sex. An activity which may seem fun to us, but is a huge burden from an evolutionary standpoint. It takes away resources that an organism uses to survive and throws them away at finding mates and copulating.

To oversimplify things a bit, sex appeared as a way to diversify DNA. Sex-produced DNA might initially appear inferior, since it increases the difficulty of maintaining a successful combination of genes. However, having a more diverse pool of genes makes you more prepared to face changing competition.

A good example of this increased adaptability in humans is the sickle cell trait. It causes some of the erythrocytes of it’s bearer to take a sickle like shape when the body is deprived of sufficient oxygen. These sickle blood cells contain an abnormal variation of haemoglobin, which negatively impacts their ability to carry around oxygen through our capillaries.

Sickle cell erythrocyte (left), “normal” erythrocyte (right)

Having a single copy of a gene with the sickle cell allele can result in some minor health issues. Inheriting two copies of the gene carrying the sickle cell allele is so bad, we actually call it a disease, it reduces your life expectancy to around 40 to 60 years in the developed world.

But guess who happens to have this mutation ? Loads of people in areas of the world where Malaria is or used to be a big issue. It turns out that carrying a single copy of this allele helps you fight off Malaria and carrying two copies increases your chances of surviving the disease even more. A normally negative mutation, can be life-saving in the right environment.

In a species that doesn’t have sex, where DNA evolve much more slowly, this gene would either exist throughout all the population or it wouldn’t. In sexed species, however, bearers of this gene can thrive or fade away depending on how our competitor (Malaria) changes.

This is what ecologists call the heterozygote advantage.

Sexed learning

Learning new stuff can be wrongfully thought of as purely cumulative. In reality, learning also means forgetting. It means rendering certain beliefs, routines and knowledge as wrong or useless. It means re-shaping your thoughts.

There are certain situations where something you knew before is simply wrong. For example, here’s some pieces of essentially false programming related knowledge that I’ve encountered:

  • Using ASCII encoding for a table instead of UTF-8 can significantly increase the performance of {select modern transactional db of choice}, if you only store ASCII characters
  • Node can execute async functions on separate threads
  • Using sequentially consistent memory ordering on an x86 never harms performance

Some information is not wrong, but it’s useless, for example:

  • Knowing how to write programs using the 8080's assembly language
  • Knowing how to exploit the Heartbleed security bug
  • Knowing how to write software that is compatible with Windows 95

It should be noted here, I’m not saying learning how to do those things provides one with no advantage. There’s a lot of auxiliary knowledge that goes into learning those things which can be applied to other tasks. But the “end result” of the learning process is no longer useful.

There’s other knowledge of questionable worth, for example:

  • Knowing how to work with a Windows server
  • Being able to optimize a support vector machine
  • Having the ability to write great Perl 5 code
  • Knowing how to build a server that perfectly fits your workload

This is the kind of knowledge that you could leave “dormant”. Don’t forget it, store it someplace where it’s almost never in your thoughts. The paradigm shifts of the future may well mean that this knowledge becomes very relevant again. Suddenly, you will have a dormant “thought gene” which you can activate to get ahead of your competition.

Even more valuable, could be “dormant” knowledge about things which are presently not within your field of activity.

Here’s some knowledge of questionable worth (for programmers) that I have:

  • Rudimentary understanding of mechanics and signal processing
  • Understanding of various ecological theories (e.g. red queen)
  • Familiarity with statistical psychology
  • Building a guitar amplifier from spare parts
  • Reciting parts of the St Crispin’s Day speech

Four years ago, when I was essentially working as a “web developer”, all of this was irrelevant. Then I started getting into machine learning. Suddenly, some of the terms, concepts and ways of thinking I learned from physics, biology and statistics became really useful tools, at least as a stepping stone.

I haven’t been able to find use-case for the last one, but I’m hoarding on to it, just in case.

I’d venture to say the first people that hit the jackpot with websites and mobile apps weren’t the best programmers at the time. They were, however, versed in a number of other areas such as design, user relations, low budget marketing and knowledge about various other fields, from cartography, to music and animation.

In the early 90s, there’s little reason for 99.9% of programmers to have a sense of aesthetics. In early 2000s, someone who is an accomplished designer and also very talented in working with CSS and JavaScript is a priceless unicorn.

There are many ways to acquire up and coming skills. You can try to predict what they will be, you can try to look at what others are doing and you can try to just learn as much stuff as possible

However, there’s a less discussed way of diversifying your portfolio of mental genes. A way that helps you both spot new useful knowledge and acquire it.

Change your environment

We usually learn most from the problems we are forced to solve. Often enough, those are the problems that our environment throws at us. A surefire way of figuring out what you should learn is exploring as many environments as possible.

By environments I, of course, mean teams, projects and companies.

Fifteen years ago, a senior member on the IBM power PC team might have laughed at an offer to work for Google. Nowadays, that same person would be beating himself over his foolishness when the manager announced: No more Holiday bonus this year, we have to tighten the belt.

It might seem surprising that someone who has worked 20 years for the same company, could be laid off and become essentially unemployable. But in a Red Queen world, this is only natural.

If you are used to a single environment, you are at much greater risk if the project or company goes bust or has to cut staff. Not only is your environment of choice obsolete, but you’ve never experienced another environment, you can’t recall old knowledge to make your way through a new world. All your skills are honed to hunt a beast that your fellow humans drove to extinction.

Paradoxically, by changing jobs every so often, your overall job security increases.