Should we train more people as programmers?

Lately, the top salaries for computer science graduates have been increasing. Companies like Google are willing to pay what it takes to get their hands on the best programmers (which is well over 200k$ a year). I expect these salaries to keep on climbing for the next 20 years.

Simply put, a very good software engineer can generate a lot of value. One engineer working for Facebook can improve the life of millions of people significantly by working for a few months on a new feature. The counterpart is that many routine software jobs are easily outsourced and automated.

At least where I live, almost all high school students have access to some computer science education in high school. And that is generally a good thing, in the same way it is a good idea to learn how to cook or learn about the history of your civilization. A few courses here and there is enough for most however.

The Mayor of Chicago wants to Computer Science for all students, starting in first grade. He clearly imagines a future where programmers are everywhere. However, is the software industry a good bet for most kids?

I do not think so. Being a highly productive programmer is hard work. You need to constantly retrain yourself. You have to maintain the highest levels of professionalism. It is not for everyone.

Many of the great programmers I know worked long hours before they were good. They spent their week-ends reading technical documentation. They spent days discussing the finer point of memory allocation and alignment on posting boards.

Moreover, we have evidence that unless you are one of the best programmer in your class, your job prospects in the software industry are probably mediocre:

In computer and information science and in engineering, U.S. colleges graduate 50 percent more students than are hired into those fields each year; of the computer science graduates not entering the IT workforce, 32 percent say it is because IT jobs are unavailable, and 53 percent say they found better job opportunities outside of IT occupations. These responses suggest that the supply of graduates is substantially larger than the demand for them in industry. (EPI Report, 2013)

IT, the industry most vocal about its inability to find enough workers, hires only two-thirds of each year’s graduating class of bachelor’s degree computer scientists. By comparison, three-quarters or more of graduates in health fields are hired into related occupations (Salzman, 2013)

If you are really passionate about programming, go right ahead. I believe you will be able to earn salaries comparable to those of medical doctors or leading lawyers in the future with your skills. Maybe even better. But if you just want to get a regular job, programming could be a lot tougher than you might expect.

Update: Aner Ben-Artzi pointed out to me that the campaigns to promote programming as a career are often built on the assumption that we lump together all programmers as if they are interchangeable. We do not similarly hear calls that there are shortages of chefs, as it is understood that these are highly skilled and unique people.

8 thoughts on “Should we train more people as programmers?”

  1. I agree that not everyone should pursue a career in software development. You can say the same about math, physics, chemistry, and biology, yet aspects of these fields are normally included in elementary-level education. Computer science is increasingly fundamental to our society, and programming is a necessary skill in a growing number of jobs. Therefore, we should make a place for computer science education at every level in the curriculum. Understanding recursion is less essential than understanding fractions, but a lot more important than calculus.

  2. Prospective for a regular software engineer are less than bright. Despite Daniel’s previous post claim that it is easy to be a trucker and software engineer in North America, it is not so. Neither for truckers, nor for software engineers.

    Lots of positions will pay you far less than 200K. More specifically, 60-70K positions are not that uncommon and fresh graduates often start as low as 30-40K. Yes, a truck driver or a plumber can do better oftentimes.

    I have friends and acquaintances who are or were stuck in their current jobs and could not find anything better. Yet, their salaries were not even close to Google ones.

    Aside from financial matters, the job itself can be quite dumb. This is probably true in most cases.

  3. @Leonid

    Actually, we perfectly agree with each other. Thanks for supporting my point.

    I wrote that the top salaries are high… but the guys and gals making 200k$ or more are a small elite.

    If you pick kids off the street and teach them programming… chances that they will have a hard time finding a job. If they do, the pay might be bad.

    In the comments of my previous post, I alluded to the fact that software engineers in California typically make a 6-figure salary. But I was thinking of the engineers working for large tech companies like Google, Facebook and the like. (You have to go back to the context of our exchange.)

    The average kid will find it very hard to be recruited by Apple or Google. Whenever I look at the technical interviews, I am scared… and I have been programming for 30 years now.

    So that is my conclusion… if you are passionate about it… go right ahead… but it is just not that great a job if you want an easy life.

    Most kids would be surprised by how hard software engineering is. Even dumb work, as you say, can be really hard. Debugging a 30-year-old COBOL application can be crazily hard, I am sure.

  4. “Debugging a 30-year-old COBOL application” is not hard, it’s Hell.

    IMHO this is a management problem, more and better “real programmers” [1] are required, driving the industry to unsustainable situations, unmaintainable code bases, and unrealistic expectations.

    IMHO, a shift towards “humble programmers” [2] is needed, but that won’t happen in the world we live, with short-sighted managers that focus on patching old solutions, producing cheap (in every sense) solutions and despise open source as they don’t see its value, along with many other problems.

    The problem with “real” and “humble” programmers is not in the programmers themselves, but in the expectations placed on the programmers and the environment where they have to work. Programmers can certainly create a lot of value, but in many cases they are expected to create gold out of garbage without any kind of freedom or decision power, within a short time that doesn’t allow any maneuvering*. Only a few can live up to those expectations and as this culture of ignorant managers progresses we will see the gap between expectations and reality increasing until there are no “good programmers” that can live up to the expectations anymore.

    This kind of management is toxic [3] and I guess (I’d like to see the real data) the number of people quitting their jobs is increasing due to this toxicity [4]. You mention people finding “better job opportunities outside of IT occupations” and I remember another blog telling something similar [5], what I see is more and more people remaining at the IT sector but starting their own businesses [6] and feeling they can’t or don’t want to be employees, I personally feel more and more inclined to do that. I like to program, I think that programming is valuable, but I don’t think that what I’m told to program is valuable (and it looks like my salary reflects that).

    Take a look at Instagram and WhatsApp, they are not the most complex pieces of software out there, they are not the most simple either, they certainly scale to many users in a nice way, that’s good. The programmers there created a lot of value and did a great work. However, the very same programmers could have been working on some useless system that could have been part of a PowerPoint presentation and forgotten forever.

    The worst case scenario is probably academia, where software doesn’t even need to run to simply publish some papers and keep the funding for one more year (or one more project). The second worst case scenario is consulting, where the company producing some software doesn’t have to eat their own dog food. And of course this happens on banking and any other business where software needs to be running but doesn’t need to be good (readable, maintainable, etc.). In these situations you find a bad code base that is maintained by bad programmers and by a few good programmers that may be fighting before they give up and flight.

    What we see is that many companies and institutions are doomed [7, 8], since years ago, they are marinating in their own toxicity beyond any repair. Their status quo and marketing skills (aka deception and pretending) may keep them afloat for some time, but the rise and future evolution of crowdfunding and similar initiatives will put an end to that in one or two decades.

    Academia feels like a big lie to me [9] and I chose academia instead of consulting because I already knew consulting was a big lie. Sure there are places where things are not so bad, but there are no effective mechanisms to prevent corruption from happening and the gangrene will spread if no actions are taken. No actions will be taken because those who hold the power (and could take effective actions) are those who have more to lose (aka conservatism).

    In short, this is exactly the kind of scenario where evolution stops and then happens rapidly due to a massive “extinction” (IMHO, again, as for everything). I don’t know when will it happen. I may be mistaken, it may never happen, or it may be happening already.

    To sum up and to go back to the original question: “Should we train more people as programmers?” Yes, definitively, they create great value when given the correct environment. If we already have lots of programmers then we should strive to fix the other part of the equation, the environment. Programmers should be put to do something useful in the right way (or maybe they should decide by themselves what to do, probably you would be surprised by their initiative and good ideas). Programmers are like the chicken that laid golden eggs, it’s hard to have too many of those, but they may eat food and lay no eggs if they are in a toxic environment.

    Solve the problems in the environment.





    [5] (Spanish)

    [6] (Spanish)




    * and very often with a low salary because there are many programmers out there and for ignorant managers it looks like any autodidact 14 year old kid could do it, anyway. (And probably it’s true a 14 year old child could do it and they wouldn’t notice the difference).

  5. @Daniel

    I agree that computer science is probably a lot more useful and important than calculus. But, as I wrote, my impression is that the students who care can already take it.

  6. I think many students benefit from learning calculus, not just those who care about it. And I think this is even more true for computer science, which is why it should be more integrated into the curriculum.

  7. I think there are a lot of things that complicate collecting the kind of information that the reports quoted above are trying to digest, making their conclusions misleading at best. Here are a couple of my observations:

    First of all, at least in the US (and I suspect elsewhere), Department of Labor industry and occupation categories are outdated and largely fail to capture the true breadth of computing employment. My guess is that a CS grad who goes to work for a health care company doing software development would be counted as not being employed in the IT industry. DOL stats don’t deal well with a pervasive profession.

    Second, employment opportunities vary greatly by geograohic locale. I daresay that health care employment in, say, Kansas City is much more similar to that in Seattle than computing employment. I can easily see someone deciding to take a lower paying job close to home in a non-glamorous company that can assure him or her no more than 40 hours/week of work, rather than traveling 2000 miles away to an uncertain future.

    So, yes, the loudest voices about worker shortages may be Apple or Google, but the depth and breadth of CS employment goes far beyond them — and those companies are likely hurting even worse for good people.

  8. I’m in agreement with Daniel Lowd and where I live in Colorado, my three children weren’t offered or didn’t have the opportunity to take programming in school. If they want to learn java, they have to travel to the “alternative” school for teens who are learning trades and are in danger of not graduating. This sends a poor message to most kids, that the next generation of IT is going to be even more entrenched with challenges. We teach history, calculus and advanced literature, but kids aren’t coming out with the skills to support the workforce and more jobs continue to go overseas where they are teaching these skills from an early age on. I won’t even start on the need to introduce girls to stem skills even earlier before we start hearing how naturally less skilled we are gender wise for a technical career.
    I never knew technology was an opportunity for a career when I graduated from highschool. Our children and our future depends on us correcting the fact that 41 states still don’t require any technical classes to graduate.

Leave a Reply

Your email address will not be published. Required fields are marked *