QIAOPANG.COM · SELECTED ESSAYS (2013–2026) · 260 ESSAYSBrowse Chronologically (2013 → 2026) ↗
QiaoPang · Programmers LifeSelected Essays · Systems, Craft & Agentic Era
Timeline ↗

When Will the Good Times for Programmers Run Out?

When Will the Good Times for Programmers Run Out?

Should I switch into (or apply to study) software development? Programmers’ fat salaries make me drool, but the good times must end sometime, right? I won’t enter the field right at its peak, will I?

Questions like this wear me down. Anxious elders fretting over their children’s futures, their friends, and friends from WeChat and Zhihu, all show up like migratory birds at two fixed points each year: during Spring Festival and right before college application season. Around June I answered one elder’s consultation. He said, “Little Chen, what you’re saying actually sounds quite reasonable — you ought to write an article so I can forward it to my friends.” I said, “Sure thing, Uncle, I’ll write it right away.” Then, having written the opening, sheer laziness (mainly because the red packet never materialized) kept it shelved until today. Recently, while sifting through a pile of unfinished drafts in my git repo, this one popped out, craning its neck at me and signaling: poke me, poke me. So here we are.

The article is a bit long — you can skip straight to the conclusion at the bottom. But I know you’ve all already drawn conclusions; what you want is reassurance. So read on.

Emperor Taizong of Tang said: With history as a mirror, one can foresee rise and fall. Let’s push our vantage point back seventy years and watch how the programmer tribe grew, step by step.

Social and economic shifts

Although the patron saint of programmers is Ada, daughter of the poet Byron, the first true programmer was Alan Turing. Turing not only proposed the Turing machine; he also wrote code on the earliest computers. If 1946, the birth of ENIAC, marks year one of the general-purpose computer, then the number of programmers at the time was likely no more than ten.

Programmers weren’t yet a profession. Computers emerging from the lab spawned more machines, and those machines needed people to use them, giving rise to the first generation of “programmers” — mostly mathematicians and scientists who had wandered in from other fields.

Consider the fossil-tier programming languages we all know:

  • Fortran, the progenitor of scientific computing languages, invented by the mathematician John Backus in 1957;
  • LISP, the progenitor of functional languages, invented by the mathematician John McCarthy in 1958;
  • Algol, the progenitor of imperative languages, invented by the mathematician Friedrich L. Bauer (not the Jack Bauer you’re thinking of) in 1958.

So there’s no exaggeration at all in the fact that what we study today is called Computer Science — these old gentlemen earned both the Scientist and the Engineer titles.

Counting the professors who dabbled in computing and their students, the first generation of programmers numbered at most in the hundreds or low thousands. Computers of this era were irrelevant to ordinary people: unless you studied at a top university or worked at IBM, you wouldn’t just never have seen a computer — you’d never even have seen the punch cards used to write programs…

In 1964 IBM launched the epoch-making System/360 mainframe, starting at 130k USD. Being relatively cheap and good, it was snapped up and leased by businesses, and over the following years the S/360 swept across America, selling tens of thousands of units — the most successful mainframe in history. The S/360 gave rise to a large second generation of programmers. If one computer took five programmers, demand in this era surged to the hundred-thousand scale.

Demand was strong, supply was weak — what to do? How to fill this surprisingly large hole?

Ma (Jack Ma) says employees leave for only two real reasons: the money wasn’t good enough, or the heart was wronged. Conversely, to lure people into the trap, you first put the money on the table.

When will the good times for programmers run out?

This is a salary posting for S/360 programmers I googled up. Look — in 1973, the market paid a programmer with two to three years of experience anywhere from 10k to 18k. Bear in mind the average American wage that year was 6.5k. Driven by enormous incentives, capable people began to convert: first high-caliber math talents, then outstanding engineers from other fields, even accountants, all leaping into the vibrant blue ocean that was software development.

In 1970 DEC released the PDP-11 for only about 10k USD, further unleashing computing’s magic; this cheap-and-cheerful minicomputer rapidly captured a broader market — DEC sold 170,000 PDP-11s that year — even elite prep schools (Bill Gates’s Lakeside) began using them for teaching. Computers were gradually ceasing to be the plaything of thirty- and forty-something “middle-aged” men in suits.

Then came some epoch-making things:

  • Pascal, invented by Niklaus Wirth in 1970;
  • Unix, released by Ken Thompson and Dennis Ritchie in 1971 (its first version ran on the PDP-11);
  • C, invented by Dennis Ritchie in 1972 (the PDP-11’s hardware design also influenced C’s design);
  • Smalltalk, the progenitor of object-oriented languages, invented by Alan Kay and others in 1972.

Unix and C in particular cast their influence over virtually every programmer, and they still do today. Wirth, the inventor of Pascal, was still a professor in an ivory tower, but Ken and Dennis were bona fide programmers — software engineers, in the proper sense.

The PDP-11 and Unix/C gave rise to a third generation of programmers. Back then there were no front-end/back-end divides, no system-layer/application-layer divides; a single programmer could wrestle with hardware interrupts and also deliver a quality UI (the command-line interface). Market demand for programmers kept exploding.

Within a few short years, the PC began to challenge the minicomputer. Apple I launched in ’76, the IBM PC in ’81; the PC drove computer prices down to just over a thousand dollars, and computing began to explode at unimaginable speed. Our beloved Teacher Gai (Gates) saw this historic moment and conceived the grand ambition of putting a computer in every household’s bedroom.

The Apple II alone sold over a million units in the ’80s, to say nothing of the tens of millions of IBM PCs and compatibles.

Such a vast incremental market required a sea of programmers to fill in the software gaps. By 1990, before Windows 95 had even shipped and while it had no monopoly on the industry, Microsoft already had 5,600 employees (mostly programmers) and 1.1 billion in revenue (see: https://www.thocp.net/companies/microsoft/microsoft_company.htm). The number of programmers in the ’80s, I’d estimate, had swollen to the millions.

The heavyweight language of the ’80s was C’s two heirs:

  • Objective-C, invented by Tom Love and Brad Cox in 1984 — descended from Smalltalk, of impeccable lineage, yet not embraced by the market;
  • C++, invented by Bjarne Stroustrup in 1983, swiftly embraced by the market.

The ’90s brought the multimedia PC; a Pentium heart paired with Win95, and the personal computer truly entered every home. The song echoing through every street and alley — “You don’t even have to try, it comes easy for you … good times, bad times gimme some of that” — was practically the inner monologue of programmers.

Win95 sold forty million copies in its first year. And by ’98, personal computers crossed the hundred-million mark in annual sales.

When will the good times for programmers run out?

At the turn of the millennium, from ’99 to 2000, Microsoft’s headcount jumped from 31k to 39k in a single year. And the figure ten years earlier, mentioned above, was 5.6k. Guess at ’90s programmer demand? At minimum, it quadrupled from the ’80s.

The subsequent history should be more familiar, so I won’t dwell on it. The rise of the internet, the rise of social networks, the rise of mobile internet. From ’07 to ’17, mobile developers (iOS/Android) grew from zero to 12 million (see: http://www.businessofapps.com/12-million-mobile-developers-worldwide-nearly-half-develop-android-first/).

What a terrifying number! Programmers who got in early enjoyed unparalleled dividends.

Today, programmers worldwide number in the tens of millions (GitHub users alone exceed 21 million). AI, Big Data, Crypto Currency, and IoT will, as expected, be the new demand magnets. In 2017, the US Department of Labor reported (https://www.bls.gov/news.release/jolts.t01.htm#jolts_table1.f.3) that the IT sector averages 100k job openings per month; if we count half as new openings, that’s 600k new openings a year. If half of those are programmers, US IT-industry programmer demand alone is 300k a year. Considering that other sectors — Finance, Education & Health Services, etc. — aren’t officially IT but also need plenty of programmers, and adding another 300k for all of them combined, we get 600k new openings a year, while 2016’s CS new grads numbered fewer than 50k. The gap remains enormous.

History teaches us that programmer demand isn’t just broadly strong; the local differences around hotspots are even more striking. When the PDP-11 was hot, the incremental demand for C/Unix programmers versus Fortran programmers may have differed tenfold; in the Windows era, incremental demand for Windows-platform programmers versus Unix may have differed by tens or even hundreds of times.

Another interesting feature: because of this supply-demand imbalance, the programming profession has generated enormous arbitrage spaces across regions (say, China versus the US). Clever companies exploit this space to cut costs, which in turn raises programmer premiums in lower-priced regions (the catfish effect), pushing up the overall average price of programmers. In 2006, when I was at Juniper, an American programmer’s salary was 3–4x a Chinese programmer’s; today it’s only about 2x (thanks, of course, to China’s internet advancing by leaps and bounds). India’s many software outsourcing (labor) firms, like InfoSys, turned programmer arbitrage into an unprecedentedly profitable business.

Looking back on this history, one thing is especially worth savoring: the market has always had strong demand for programmers, yet reliable supply has been severely insufficient. Over seventy years, demand for programmers has roughly doubled every five years. That means the market is flooded with new entrants with < 5 years of experience. What does that mean? In such a frenzied market, the profession itself already commands a far higher premium than others, and reliable, experienced programmers can easily double or triple that premium on top. Nothing to be done — it’s supply and demand.

This extreme supply-demand imbalance — locally, grotesquely imbalanced — is the first secret of programmers’ high pay, and the primary one.

The second secret is often overlooked: software companies, especially internet companies, possess an unreachable unfair advantage: their cost of capital is absurdly low — so roguishly low that even the Fed sighs in envy.

Just as beauties love heroes, greedy capital favors an industry that is innately disruptive. Open a clothing store and you’re unlikely to get a bank loan, let alone venture capital; but register a deeperlearning.ai, put up a pretty landing page, and VCs’ adrenaline starts spiking — if you’re not bluffing, if you truly have five-bar competence and are actually doing things, odds are you’ll land a sum that makes others green with envy. That’s the state of startups. What do you do with the money? Buy Bitcoin Obviously, poach more programmers from the market, then acquire-retain-engage for growth, raise more, hire more programmers, loop, and then either become a unicorn, sell out, or flame out.

Someone says: that’s startups, doesn’t count — compare listed companies. Then let’s look at the universe’s most eccentric company, Amazon — the one that went public and didn’t turn a profit for over a decade, using storytelling and blueprints of the future to make investors giddily pour into its dream-ratio for ten-plus years. From the balance sheet: in the same retail industry, over the past decade Walmart’s revenue grew by 137 billion while its market cap grew only 36 billion; Amazon, with virtually no profit, grew revenue by just 121 billion but market cap by 462 billion — the equivalent of adding two Walmarts (source: https://www.youtube.com/watch?v=GWBjUsmO-Lw, around the 12-minute mark). As the saying goes, a man fears entering the wrong trade as a woman fears marrying the wrong man: Walmart, that phoenix-man, squeezes out penny after penny to please the young lady called Wall Street, and she turns, applies her powder, slips off her silks, and boards the borrowed-from-financing pleasure boat of that prodigal son Amazon.

Other giants, though not as outrageous as Amazon, also have P/E ratios high as a startup’s. Their inherent high profits plus low cost of capital mean that in the war for human resources they’re practically attacking from a higher dimension: wielding an ultra-high P/E, cash in one hand and shares expected to keep climbing in the other, they take whoever they want.

A third secret: out of fear of the future, to preserve their dominance, big companies engage in endless talent warfare at the strategic level. Sometimes the point of recruiting talent is “take my road and leave others none” — who still remembers that around 2000, Huawei reserved nearly all CS students from first-tier universities, leaving ZTE (and others) crying without tears?

We know the software industry’s fat profits (or high expected profits) come almost entirely from monopoly or oligopoly positions. Those on top want to stay on top; those below covet the top constantly. Unlike most industries, in software a peasant uprising is just too easy (which is why VCs love this industry): a few heads with ideas and the ability to act can challenge a giant. This keeps giants in perpetual fear that they are “only 18 months from bankruptcy.”

These predators at the top of the food chain — the new giants like Google — were once rebels themselves. After a bloody war with the old giant (e.g. Microsoft) they rose to power, wounds still unhealed, and in no time a new predator (e.g. Facebook) is panting at their heels, eyeing their turf. To maintain its position, the new giant recruits all the industry’s talent, offering potential Chen Shengs and Wu Guangs either nobility or wealth and wine — both to conquer territory for itself and to reduce the chance they’ll rebel outright or join a new predator (e.g. Facebook). The latter, once comfortably thriving in some niche, will never settle for second place and will poach from the giants with better offers. Just like the Warring States practice of keeping retainers: you buy a fine steed for a thousand gold, I’ll buy the bones of one for a thousand gold. The beneficiaries, naturally, are us “retainers.”

In Silicon Valley, an open secret is the counter offer. A programmer takes an offer from company F, then goes to get one from G — even if indifferent to G, if G’s offer is bigger, he goes back and tells F’s recruiter, and 99% of the time gets a counter offer.

Is any given programmer truly indispensable? Apparently not. At a company like Google, if every team cut a third of its programmers, the business probably wouldn’t suffer — might even improve! But nobody dares say whether the programmer I give up won’t be the first domino. And besides — I’m this badass, and my meal gets snatched? How could I swallow that!

To sum up: strong demand, an outrageously low cost of capital, and the giants’ fear of the future — three factors that massively inflate the price of software talent.

As noted above, we now face a new wave, with the most eye-catching crests being AI, Big Data, Cryptocurrency, and IoT. It seems the software industry’s strong demand for programmers continues. When will this wave after wave finally stall? I don’t know. If I may boldly estimate, perhaps it’ll be like the first and second industrial revolutions swallowing the agricultural population: only when nearly all labor works for the information industry (which doesn’t mean they’re all programmers), and nearly all industries have been redefined by software, will the programming profession be saturated.

And the software industry today, though already huge in programmer headcount, is still overall in the early majority range, and locally even just at innovators / early adopters:

When will the good times for programmers run out?

So programmers’ good times are far from over. And if you’re a woman interested in software development, consider this career even more seriously: women make up less than 8% of the profession — a severe imbalance. Women have great prospects here and can stand out more easily.

How individuals can raise their leverage

Good, you’ve got your reassurance. Next question: what should I do? After all, programmers differ greatly as individuals — I don’t want to become a member of the vast denominator the moment I enter.

First thing first: we need a clear positioning of ourselves. What do I actually want from my career? What should I do?

I often see programmers call themselves: Java programmer, iOS engineer, Windows programmer, Spark engineer… This kind of positioning is deeply inappropriate — drifting with the current without thinking it through. Remember: you absolutely must not tie your career to a specific language, product, or system — absolutely not! Have you ever seen a doctor call himself a “tetracycline physician” or a “Siemens spiral CT doctor”?

A programming language fades from view over time; a software product has its inevitable lifecycle and will one day EOL (end of life) — S/360, Solaris, DOS, Fortran, Cobol, Delphi, and so on, once so glorious, now scattered to the winds — but the ideas within them, the technologies they built, are interconnected. So we should position our careers around a technical direction. If security tech appeals to you, build your core competence around security tech; if distributed systems fascinate you, focus your energy there. If you look closely at that 1973 job ad above, the words “large scale” already appear. Ask yourself: over these decades, which technologies and directions have kept evolving rather than simply disappearing?

Only once you’ve figured out your positioning can you serenely leap from one wave crest to the next.

With positioning in hand, the next crucial thing is to build your unfair advantage.

The phrase “unfair advantage” is a bit sleazy — as if my happiness must rest on your mediocrity. But that’s the essence of a commercial society. Google’s formidable money-making ability rests on its unmatched unfair advantage in information processing: “Organize the world’s information and make it universally accessible and useful.” No one else can do it, so it can generate profits more efficiently than printing money.

What should a programmer’s unfair advantage be? I think roughly in these directions:

  1. I am a key factor in the organization — with me, the team, product, or service rises a tier;
  2. I can deliver 10x the average contribution while taking only a 2x package;
  3. I am a rare hybrid talent: among good coders I’m the strongest architect; among strong architects I’m the best communicator; among great communicators I have the best public relations, and so on.

To become a key factor in the organization, you must first become an expert in some niche — for instance, able to break through the existing system’s bottleneck to support 10x traffic; or to shave 5% off the user churn rate. Note my descriptions are all scenario-based, aimed at a class of problems, not at a technology. Plenty of people know a technology; the key factor is being able to use technology to solve real business problems.

The programming tribe is a creative tribe, and creative tribes are characterized by standout individuals whose value far exceeds the average. The average painting sells for under $500, but a Picasso can fetch tens of millions. An excellent programmer can deliver 10x the industry average without much difficulty. Note that 10x performance doesn’t mean writing 1,000 lines in the time it takes to write 100, but rather the extra value delivered to the company in the same working time.

How do you deliver extra value? The most basic requirement is to work with your brain engaged, and think hard about how things could be done better. Many programmers live like robots passively accepting commands — the boss points, they shoot, nothing else is my concern. From such people, you can’t expect extra contributions. Conversely, think often about existing problems, about what can be optimized, look for the best implementations on the market, verify ROI from multiple angles, pitch your ideas internally to stakeholders to gain buy-in, and mobilize your own and surrounding resources to land them. Someone like that stands out wherever they go.

Becoming a hybrid talent needs no further explanation.

With an unfair advantage, you’re already in an invincible position. If you want to maximize your value further, you need to seize the moment and switch lanes. The biggest taboo for programmers is locking themselves into a tiny cubicle, ears deaf to the world. Over seventy years, the software industry has welcomed (and bid farewell to) wave after wave. A wave, from ignition to rise to explosion to demise, lasts about twenty years. We must be clearly aware of this. Rather than waiting until the lane ends and change is forced upon you or you’re doomed, better to get a step ahead and switch lanes voluntarily at the right time. Then, in the new lane, you’re the front-runner, the one everyone fawns over during the demand explosion.

Note that switching lanes doesn’t mean switching major skill directions. Frequent switching prevents you from settling down and building your moat. If you position yourself as a security expert, then in the PC era your focus might be at the OS and application layer, and in the internet era at the network layer. Your skills evolve from memory management, interrupt/exception handling, scheduling, and sandboxing all the way to anti-spoofing, anti-injection, anomaly detection, and so on — but this doesn’t betray your positioning; existing accumulation and new knowledge corroborate each other, and your abilities layer up in a spiral.

Risks not to be ignored

The number-one career risk for programmers is being ruthlessly eliminated by the tech wave.

In many industries, a practitioner’s career from entry to exit is like riding an airport moving walkway. When it’s uncrowded, you can shuffle forward, or seize a chance to slip onto the fast lane and overtake the muddled folks blocking you, but that’s all you can do — not much faster. When it’s crowded, you just wait your turn patiently; at each age you occupy your spot, and unless the person ahead leaves, you can’t take it. The whole way you move slowly and steadily, but at least it’s not too grueling, and unless catastrophe strikes, the odds of being kicked off the walkway are small.

Programmers are different. From entry to exit, it’s a pure tomb run: monsters hot on your heels, you can only keep running forward. You can collect lots of coins along the way (packages), but slow down and fail to change lanes in time, and you’re cleared out. The exit can be dignified — become a manager, a legal representative, move into VC, into sales, teach, run a poker game, whatever — switch roles and drift, forgetting your old role by the river’s edge; or it can be undignified — you haven’t earned enough money and the employer you served for years discards you. To feed your family you must restart, squeeze back onto the track. But the track is not so easily re-entered: a nearly forty-year-old uncle, slightly balding, gray hair interspersed with a few black strands, with a belly so thick he can’t see his toes when looking down, gets interviewed by a snot-nosed kid in his early twenties: “Uncle, tell us — what value can you bring us?”

The second career risk is that the Matthew effect is too pronounced; sometimes a slightly lower starting point means years of working several times harder than others.

For 2017 CS graduates, the “cabbage price” I’ve heard is 250k. I believe it, but that’s probably top 10% in Beijing, Shanghai, Guangzhou, Shenzhen. The rest average at least half that. Five years later, those top 10% average 500k–600k, and with stock the sky’s the limit; the rest may average less than what their peers called the “cabbage price” five years earlier.

The game goes like this:

  • You studied well, fought your way into a 985, then spent four to six years in college studying and coding seriously. After graduation, jobs come to you; you land an offer from a top-tier firm like BAT, work diligently, your salary rises with the tide, company stock doubles, and you’re surrounded by excellent people — some idle enough to do an MBA, some going abroad for bigger challenges, some starting their own companies. Comparison is odious, and you’re forced to keep learning to maintain your excellence so you don’t end up at the bottom. The market is full of olive branches thrown at you; a job change easily brings a 20–30% raise, yet you turn up your nose;
  • You studied poorly, barely scraped into a first-tier university, wasted college, wrote few lines of code. After graduation, you wear out your soles job-hunting; an outsourcing company grudgingly takes you in. You work day and night, but the company is only so good, and raises are hard to come by. Your colleagues around you drift through their days; put in a bit of effort and you stand out like a crane among chickens. You want to jump ship, but your résumé is poor and jumps don’t pan out — you send résumés to a few firms you fancy and it’s like water off a lotus leaf: not even a trace.

This industry is just that brutal: a slightly lower starting point and your life trajectory is far worse. You must recognize this; if you’re unlucky enough to be the one with a low starting point and a poor present, then work twice as hard and find ways to prove you’re no worse than others. Compared with consulting, an industry where birth determines destiny, this one offers many chances to prove your level — at least “talk is cheap. Show me your code” is the industry consensus.

The third career risk is too many temptations, which can ruin your career.

Here the temptation is mainly that of market opportunities. As said, local supply-demand is severely imbalanced, so there’s no shortage of jobs waving huge wads of cash. Without a sound career plan, and without clearly calculating opportunity cost, you’re easily lured by this or that high salary and jump ship at an unreasonable time or on an unsuitable opportunity. When the new job isn’t as good as imagined, or the new company collapses, you must cut your losses and exit. Then finding the next job becomes quite thorny. The market doesn’t recognize your value, yet you’ve been through the from-frugal-to-lavish transition and don’t want to go back, so the next job is again an insufficiently considered choice. After several consecutive bad choices, your career is in peril.

I’ve seen people change jobs eight times in five years, and people with no stable positioning drifting back and forth across several directions. I’ve even seen people whose résumés run backwards — in Silicon Valley the common career switch is Google - FB - Airbnb, but I’ve seen FB - Google - MS (no offense to MS). This kind of unthinking job-hopping purely for a temporary difference in package is the programmers’ “Shang Zhongyong.”

MORE IN Leadership & Career

Further Reading in This Column

View all essays in “Leadership & Career” →

The Programmer's Meltdown

After enduring the 'unsafe shitstorm,' actix-web's maintainer pulled the top-ranked Rust framework and walked away from open source—a story of maintainer burnout and the hidden cost of demanding that volunteers reshape their work for everyone else.

Book Next Chronicles (2013–2020)2,451 chars · 5 min read

Nana the Intern

When it comes to interns, beyond learning ability, I ask for one thing: a long enough runway. By "long enough" I mean at least two or three months — anything shorter and they leave before contributing anything of value, clutching a glowing evaluation form. Nana's story is an exception worth studying.

程序人生 (2015–2019)4,528 chars · 10 min read

ArcBlock at One Year

One year since trading the Bay Area for Washington State: a reflection on the winding road that built ArcBlock — its Forge framework, its bet on application chains, and the choices that led here.

Book Next Chronicles (2013–2020)6,593 chars · 15 min read