A simple way to "get more people to code"

I'm not a citizen of a country where "getting more people to code" is a widely shared concern. While my proposal seems to me like a simple solution to a simple problem, this is merely an outsider's observation.

Recently the tide of calls to "code" seems to have subsided. If it's no longer a pressing social problem, I regret being late with my excellent solution.

Like all brilliant ideas, my solution is simple, and I was surprised by not seeing it proposed in the voluminous discussions of the topic. I apologize to those who've proposed the same thing earlier without me noticing for not giving them proper credit.

The problem

For a long time now, people have been voicing a concern about a supposed shortage of computer programmers. Many also express narrower concerns, such as a shortage of children, women or people with a certain skin color in the ranks of computer programmers.

A high-profile example is US President Barack Obama. This US President went further than urging others to "code" and regretted not being able to do so himself: "I wanted to go in and fix <healthcare.gov> myself, but I don't write code."

(I understand President Obama. I once wanted to go in and fix international politics. Then I realized that I don't shoot bullets.)

Finally, individuals such as NBA star Chris Bosh encouraged people to learn to code in their private capacity.

Even this humble blogger was asked to give an interview by someone interested to encourage people in general and women in particular to code! And you know why? Surprisingly, because of a piece I wrote where I told that it was money that attracted me to programming, and it is money that keeps me in programming.

It was then when a solution to the problem at hand popped to my mind.

A possible solution

If there's a shortage of programmers, we could pay programmers more money.

How can this be arranged, and how would it solve the problem? There are several possibilities.

For example, companies such as Google, Apple and Intel could raise wages, causing some people to choose programming over other occupations. Once a sufficient amount of people are attracted to programming, wages would fall.

Alternatively, governments such as that headed by Barack Obama could lower programmers' income tax, or introduce a negative tax for programming. Again rising wages would attract more people to programming. A government convinced that the number of programmers reached a high enough level could then cancel the subsidy.

Finally, concerned individuals such as the wealthy basketball player Chris Bosh could donate money to computer programmers until enough people are attracted to the profession.

Having outlined a solution to the general problem, we now direct our attention to the narrower concerns of representation of particular groups of people in computer programming.

Discrimination affirmative action

Companies could increase the representation of younger people in programming by paying extra money to programmers below a certain age.

Similarly, governments could give tax breaks to younger programmers, or to parents of children who regularly submit their code for review by public officials.

Finally, a trust fund could be set up paying children to learn to program.

A similar approach should in principle be applicable to the problems of increasing the representation of women, people of particular races or other groups.

In some cases, questions of legality arise; for instance, while a trust fund for the benefit of people of one race but not others is probably legal, for-profit companies and governments might not be able to legally discriminate based on race.

However, this problem could be overcome, either by changing the laws or by setting aside a sum of money equal in size to the discriminatory subsidy paid to the members of the group in question. Once enough people from that group enter the programming profession, that sum of money can be divided between working programmers not belonging to the group, in effect undoing the discrimination.

Or something along these lines.

Conclusion

If this strikes you as absurd, does it strike you as even more absurd that people claim something to be a problem when its "solution" is as obvious as it is ridiculous? (Or is it really that ridiculous? Farm subsidies exist. Why not FarmVille subsidies?)

If people don't "learn to code", maybe the option is insufficiently attractive to those who can, given current wages, lifetime employment prospects, and the complete uselessness of the skill outside work.[1]

If companies don't raise wages, maybe they don't feel a very pressing need for more programmers. (Of course they'd still "encourage" people to program – as long as the cost of encouragement is likely to be offset by a fall of wages, once a surplus of programmers results from the encouragement.)

If a situation persists, maybe there's a good reason for it.

[1] It is not completely fair to deny programming its uses outside work. A more fair presentation is an analogy with today's hobbyist 3D printing. An owner of a 3D printer recently told me that "having one really exposes the impotence of… not having one. For instance, I needed this little thingie to hold a shelf. Took 30 minutes to design and print. And where would I get it otherwise?!" The answer, of course, is "at a nearby store" where they have a box full of these thingies at about 20 cents apiece. Of course, in a couple thousand years, his investment in the 3D printer will repay itself though the continuous printing of thingies.

Further reading

Women in Science by Philip Greenspun is a must-read for anyone interested in increasing the representation of group X in occupation Y:

Adjusted for IQ, quantitative skills, and working hours, jobs in science are the lowest paid in the United States.

This article explores this … possible explanation for the dearth of women in science: They found better jobs.

38 comments ↓

I like it, but the thing I would say is not that we need More programmers, but we need Quality programmers. Getting quality programmers requires better wages, and better teaching. Honestly? Coding should literally be a course for children to start when they are learning about reading writing and english. Start them young and they will comprehend way more about programming.

Well, if "we" need quality programmers, "we" should pay for it, I think, and – amazingly enough – people will then invest the effort needed to acquire the skills they're rewarded for acquiring.

I mean, it makes sense to subsidize basic education where people learn to read, write and some arithmetic because this shit is arguably universally useful. But programming is about as useful for anyone but the working programmer as an ability to operate a machine gun. Should kids learn to operate machine guns because "we need more quality soldiers" (in itself a patriotic and arguably sensible statement for a lot of values of "we")? Should everyone be forced to study human anatomy because we need doctors? Etc. etc.

How do you know "the problem" even exists? Are wages skyrocketing without an increase in the supply of programmers, hinting that supply is too inelastic relatively to the growing demand?

I, for one, was basically never exposed to programming in any capacity until the University; I chose to study CS because I heard wages were high. Is it really that unusual? I think not. Would I really do that if I thought I could make it as a lawyer or investment banker? No. Maybe this is the source of your problem then – too many options which are better for too many people – or is it a problem?

No, no, no, no. The purpose of getting more people to code is so they can pay them *less* money! This solution circumvents the entire point of these campaigns. There is no shortage or programmers providing you can afford them.

I have to say I disagree that programming isn't useful. Even learning something as simple as html code can help you in all sorts of ways. I don't think its equivalent or as useless as teaching kids how to fire guns, its more akin to teaching them spanish. It may not be something that you keep or use on a daily basis, but its good practice to learn another language. Programming will always be paid well because good programmers are hard to find. Teaching it to kids is something I don't think is a bad idea.

Let's forget the guns analogy, a sensitive issue in itself, and settle on programming being analogous to working with cement for construction tasks. Spanish, for instance, lets you talk to hundreds of millions of people, write things for them to read and read a ton of things written over the years that you otherwise couldn't (machine translation isn't there yet). Programming isn't anywhere near as useful. HTML for instance – how does it help you to manage your Facebook account, or even run WordPress on a standalone host, the latter being something very few people do? How does it help you to accomplish anything which isn't a waste of your time given the better alternatives available?

Attempting to figure out what an economy "needs" has largely not worked out well. It was popular among national governments in the mid-20th century, but the countries that pursued it most enthusiastically found themselves with, for example, lots of steel but not enough bread.

Yossi and Luke have a perspective that looks more likely to work out well. Look at the existing price of labor for programmers. Based on that, I don't think we lack for professional programming.

How about more companies offer more junior positions. Seems like every well advertised position is a "Senior" position asking for 3-8 years of professional development. Companies seem to not understand that experienced programmers are not produced from thin air. Sure there are some companies that have junior positions, but they to be on job boards more, and require less experience. More low paying accept right out of college positions. Also large corporations should put more effort into ensuring that people are actually trained. Truly we are in a field where no college training and experience are possible to gain without school or work… but lowering that barrier even more would be good.

Agree with the theory that there is no shortage – the panic is an attempt by the corporate employers to keep the supply high so hey do not have to raise salaries. They learned their lesson from the dotcom boom

Money as incentives gives *negative* results if even a basic level of cognitive skill is required for the task. There's tons and tons of research to back this up. I for one am not comfortable with more programmers with less than "a basic level of cognitive skill" :P

The idea that everyone should be taught to code is dubious since more than half of humans cannot understand programming. (You have probably read this already: http://blog.codinghorror.com/separating-programming-sheep-from-non-programming-goats/ ) Nonetheless, this useful skill should be encouraged.
I agree with sobetroll that the problem is more one of quality than of quantity. However I don't believe it is to be solved by better teaching of programming. Rather, software engineering is plagued by cultural problems e.g. “worse is better” mentality a.k.a. complete contempt for the user experience.
Concerning the unbalanced representation of some categories of people in some categories of activity, basic income would make the problem's premises disappear in addition to optimising the hell out of the tax system.

Why should this useful skill be encouraged any more than a countless number of other narrowly useful skills? That is has no broad applicability has been a fact for many decades and I don't understand why this will change any time soon.

If I was "guaranteed" basic income, especially when I was naive enough to count on such "guarantees" in the long run, I wouldn't work for one hour. I think very few would. Not that the idea is bad in the abstract.

You overestimate human capacity to produce software which is not total shit. I'm a professional programmer using software produced by by professional programmers for professional programmers and the result is total shit (consider C++ semantics and the various little behaviors of C++-related tools). I kinda doubt that the command line accounting tool would be less of a total shit than the GUI thing. A lot of command line tools are shit.

I'm surprised that the aesthetic/cultural/general-knowledge argument is missing here: Schools teach kids much more math and sciences than they'll ever "need" (ignoring for a moment the quality of this teaching – which varies a lot). Few people will ever need to compute – or remember – the derivative of aran(x). However, with some luck, they remember that a derivative is a linear approximation to a function, they have some vague sense of what this statement means, they know – in some sense – that it has to do with turning physics into a predictive science, and that the concepts are prevalent in science it today. Moreover people with hi-school education know it (to some degree all over the world). I'm not saying that computer science is as important as calculus, but I think it is rather important. Neither calculus nor CS are spectator sports, and you have to get your hands dirty; in this case: code.

I think that schooling should stop at say age 13 and you should then choose what you learn, on the grounds that very few people have the vaguest idea about what a derivative is unless they re-learned it later in college or some such. "Coding" would add to the bunch of useless and forgotten shit (I for instance was exposed to Pascal, twice, Logo, once, and a bunch of weird Spreadsheet apps and such; I felt that my intro to CS course was the first time I programmed because all that stuff from school completely faded from memory.)

Point by point:
- Stopping the education system at 13 would work fine for self motivated people; less so for other people.
- You may be right about repeating the material in college. American colleges do this. It's rather horrible in the bad ones, and amazing in the good ones (like everything else in the US).
- As I said before, teaching level varies a lot. There are classes I took from which I don't remember anything except that the teacher was bad and I skipped classes. I had two programming teachers in hi school (Israel still had serious professional schools in the 80s). The first sucked, the second taught us analysis of algorithms.

What does getting stuck at school until 18 gives non-self-motivated people? If someone is going to get higher education they'll do it in 13 as well as 18; if they don't proceed to get higher education, what useful skills did they acquire in the last 5 years at school?

I benefited from some of my hi school (most notably physics, and the CS teacher I already talked about). While I would probably have benefited academically much more from higher education, I would probably suffer socially; I think most 13-15 years old people would have a hard time in a university (I knew a few).
I have a kid at middle school and a kid at hi school these days. Some of the classes suck (the hi schooler tends to skip these), some are OK (surprisingly, hi school CS), and some are good; I don't think they'd fare well on their own, or in higher education – maybe your kids would.

I didn't speculate about individual kids dropping out of school at 13 entering universities full of 18 year olds or 22 year olds; I speculated about school ending at age 13 for everyone. Maybe if you reconsider what I said in that light it'll make more sense – or less, but at least you'll see what I meant.

I think I understand what you mean. Higher education is a very demanding system (Israeli students feel it less, because they usually start it older, but American students have a very hard time in their first year). I really don't think it's right for everyone at early age, even if it's "kids only universities". I also believe that broad knowledge is good for individuals, and important for society to function, but I know that not everybody shares this view.

The reasons behind the 'everyone learn to code' fad (which has now mostly passed by) were not necessarily to bring more professional programmers into the industry, though some people interpreted it that way.

One line of thought is that software is eating the whole world, so it's crazy that so many people don't understand its workings at all.

Another is the idea that programming is a niche that many people never even try, and you might pick up some naturals if everyone is exposed. You can have better programmers in the same prevailing economic conditions – not necessarily at the expense of other professions, just by more efficiently matching people to a job they fit well in.

Still, all in all it was mostly a fashion to do a few tutorials and give up. What really upsets me is, there is massive scope for people to learn to program, and keep programming – but not by building web front ends or running through simple command-line tutorials. People can and should be able to automate parts of their jobs. But normal user software is massively unhelpful for this – you can do plenty in a single program or suite such as MS Office, but there's no clean way for different programs to work together, without the messy glue that is the work of people who program for a living.

While I'm not a huge fan of MS Office, I am yet to see a better model in terms of automation (and after all MS Office is at least scriptable in a decent language compared to most of Unix's crazy little languages). For instance, Unix, the very well known platform where "programs doing one thing well work together", is… well I lack words to express exactly what it is, but even Rob Pike said the toolkit approach is long dead and the eulogy was delivered by Perl. Somehow things tend to converge to the one big hairy program approach.

So while people automating their lives with code might be a great idea, no evidence accumulated during the many decades that this is any more sensible than everyone tweaking their car's engine.

Thank you for this essay. It points up commonly used mental shortcuts that increase costs without ever being questioned, even when they ought to be blindingly obvious. One of the most prevalent and easiest shortcuts is the idea that the shortest path to some socially desirable goal is "just force them" somehow. You can see the cost of this everywhere, but probably nowhere more profoundly than in the realm of education. The more force is involved, the less anyone gets out of it.

Hmm, unfortunately, I can't just go to a store and buy parts for my 40+ yo car or a home automation system that neatly ties into my disparate electronics and sensors while being extremely cheap.

For those things, my ability to code and or 3D print outside work suddenly become very valuable.

My engineering experience (or rather, the fellow engineers that I've met as a result of acting in a capacity as an engineer) all tend to use our "work" skills for non-work projects. Some people wrote engine/boost controllers, others mechanically rebuilt cars, or created electronics for one-off toys or other things at home.

Pretty much for us, cost = time * money. We strive to minimize cost everywhere. Nobody I know would bother 3D printing something they could walk into a store and buy, unless the part was ridiculously expensive relative to the amount of time/money it would cost them to reproduce it themselves.

Such tools have more utility outside of "work" than you may think. Or at least, within my anecdotal group of friends and colleagues, it does.

Yes. I don't professionally fix/work on cars. Yet I've more than recouped the cost of an engine hoist (and most other tools) that I purchased.

Some things can be incredibly tine and cost saving, even when only used by a hobbyist. If anything, coding is the example that better exemplifies your point. The ROI counterpoint is much easier to argue against.

I reserve the right to doubt the ROI of hobbyist engine-fixing, especially if the time spent and the resulting opportunity cost is factored in. Someone enjoying to fiddle with cars is a legitimate hobby; everyone acquiring "engine literacy" as the most efficient way to maintain all the car engines out there doesn't sound sensible to me.

Maybe there is a shortage of cheap, young, inexperienced developers. There are plenty of developers over age 45 who would be happy to take these positions that supposedly can't be filled.

A while back I applied to your employer and was asked to take an online technical test and was told they would get back to me shortly afterward no matter what. But they did not get back to me.

Several weeks later they sent me the following email:

Thank you for taking the time of completing the computerized test.
We found you qualified for our ***** team, however, couldn't find a vacancy in that team specifically, therefore the process took longer than usual and we apologize for that.
We might contact you again in the future when a vacancy will occur.

Good Luck!

After checking around a bit, I found out that the opening was in a team whose manager had graduated college 3 years earlier. He had held a summer job writing an emulator for a technology that I had developed myself at a competing company.

Anyway rather than complaining about the lack of cheap young coders who will work for cheap, inexperienced managers these companies could retool to have their work done by smaller teams of experienced professionals (as is done in Apple among other places).

Regarding experienced people – we employ quite a few good ones. That said, I'm not thrilled to hire many of the experienced people I see asking for 2-3x the amount asked by college graduates without demonstrating any skills those college graduates lack except for a very high opinion of themselves.

The comment about "an emulator for a technology you developed at a competing company" baffles me as I can't imagine what it could be.

Late to the parade, but… I wonder if getting more people to code might help to reduce the market for lemons. About a year ago I got an auto-notification from the DOC in Vermont, stating that a guy who had broken into my house threatening to shoot was up for parole 5 months before his scheduled release. I could have input on the terms of parole if I contacted them.

I called around and was eventually told, No, he was actually going to be released without restrictions at the end of the month, having served "good time" under various formulae, first in state prison, then in a work camp. None of the auto-notifications I'd been sent had mentioned, e.g., that transfer to work camp meant he automatically got an extra day off his sentence for every day served. The DOC Victim Advocate explained that their computer system was not able to provide this kind of information, there was no way to update victims on progressive sentence reduction and no way to provide accurate information on date of release.

I don't know what they had in place; the impression I got was that the people who used it saw it as immutable. It's not just that there was no one who could personally hack it to make it genuinely useful to the victims it was meant to keep au fait (I'm not suggesting this would be a good idea); no one seemed to have any sense of what level of difficulty this would present a competent programmer. So maybe the administration did buy something that would be prohibitively expensive and complicated to adjust, or maybe they didn't – the whole apparatus of the DOC was, it seemed, filled with people who couldn't tell the difference.

I think the real problem with what you described is that whoever pays for the system doesn't give a shit how good it is because it's not the same person who uses the system. (And perhaps the guy choosing the vendor was bribed by the vendor in one of many possible ways.) That's why programs sold directly to consumers are generally much better than products sold to corporations or governments.

If the guy who paid the vendor did give a shit, they'd contact the vendor and demand a fix, and they'd contact the vendor's competitors, and figure out what's hard and what's easy simply by comparing prices, delivery dates and vendor reputation. I certainly know very little about cell phones or cars and I very much doubt that drilling more crap into my head during my high-school years would make it transparent to me how a given boatload of binary code would perform on a given integrated circuit or how well the touch screen would age etc. etc. I still manage to buy mostly decent shit for myself by looking at vendor reputation, prices and features, as well as relying on friends caring about this or that market segment.

So my take on it is, if the guy who pays the money cares about quality all will be well, otherwise it'll suck, and learning to code is kinda orthogonal to the issue.

Still, that was one bloody colorful example… and, I dunno, perhaps you're right…

In 30+ years of working in IT, I've never come across a manager who did not think that programmers were some low-paid fungible resource. The jokes about programming = typing are too close to the truth to be funny.

On the one hand we have Microsoft, SAP, Oracle software awfulness and the excitement about self-driving cars and IoT. I shudder at the dystopian future of all these software driven things running amok.

We don't need more programmers. We need real software engineers. Yup, real engineering as practised by civil, mechanical, chemical, electrical engineers; in software engineering. People who actually design stuff to work right.

Just because some kid built a dog house from scraps of wood and corrugated metal doesn't mean he should be allowed to build a 50 storey skyscraper. When it comes to software; the kid who has hacked together a website is deemed to be a genius (at least by his indulgent grandparents) and will be hired by the next startup.