Why do self-taught programmers seem to do better than those with a computer science degree?

 

Self-taught programmers tend to overestimate what they know. In my last career before I retired, I was tasked with reviewing and editing every document that went out to the users from the consulting company I worked for because the programmers couldn’t write a user document to save their lives. They couldn’t put together a coherent paragraph without making major errors in grammar and syntax.

As part of my CS degree I had to take English, so I knew what good English looked like. I could go on for hours about the power of Churchill’s speeches to the English parliament. Churchill broke many of what are considered the rules of English grammar. He knew what he was doing. The self-taught programmers had no idea.

If you are writing documents for upper management and know good English, you just dumb it down to their level and they are really impressed. It looks professional.

I also had to take some mandatory Arts courses as part of my CS degree, and since Economics was considered an Art, I took most of them in Economics. I thought it was pretty funny to consider Economics an Art rather than a Science but I was willing to play the game. I found it child’s play.

The professors would go on endlessly about things like calculating marginal costs, but having taken a minor in Math, I would say, “If you just hit this problem with some advanced Calculus the answer would fall right out.” But they couldn’t do that because the Economics majors didn’t know Calculus. Self-taught programmers don’t know Calculus, either and they definitely don’t know Economics. However, if you are writing programs for upper management, you make it look like magic rather than Math and the numbers they want just pop right out.

The main problem I had was that I could write programs as well as the programmers, but that wasn’t my job, so often I would say, just let me write some code and paste it into your program and it will happen like magic. It was my job to write the business specifications, and their job to write the code, but sometimes it was just easier to write the code myself rather than explain to them what the business purpose of it was and how to do the Math involved. They usually had no clue.

I would also go through their code line by line after they wrote it and say, “This is an error, and that is an error, and this other thing doesn’t work either.” They hated that and felt insulted. Well, somebody had to debug their code, and explain how it worked to the users, and they couldn’t figure out how to do it because they didn’t have the knowledge base.

 

Joshua Gross

There are two effects to consider:

  1. Perceptual bias - you state that they “seem better”, and that’s probably the most important statement here. This could simply be because you expect them to be less talented or productive.
  2. Survivorship bias - if we could demonstrate that the average self-taught programmer was better than the average programmer with a CS degree, it’s likely because the failure rate for would-be self-taught programmers is much, much higher than for would-be programmers with CS degrees. If that’s the case, only the truly talented and motivated will survive.

In WWII, the US Navy asked Abraham Wald, a mathematician, to decide where to improve the armor on aircraft. They gave him data showing where planes were hit, and by far, the engines were the least common area to be hit. Wald surprised the military by telling them that the obvious place to improve armor was around the engines; the data showed that aircraft hit in the engines were less likely to come back. That’s Survivorship bias - Wikipedia

.

I’m “self-taught” (as others point out, no one is truly self-taught), and I was successful in software engineering. I was also successful in my two grad programs, an MS in software engineering and a PhD in HCI and AI. I’m now reasonably successful as a CS professor. What I can share are these thing:

  1. I had great mentoring as a new developer
  2. I am really interested and motivated
  3. I was lucky to have good opportunities
  4. I have some natural talent for programming and other developer tasks

For someone hoping to follow in my footsteps, I would not over-emphasize #4; I would emphasize #2. It’s the only one that is even partially in your control.

As a side note, I’ve taught many CS grads who could successfully complete the academic program, but who were never strong or motivated programmers. These were not students who typically earned A’s and B’s in programming-heavy courses. That’s all fine! There are other avenues, which are often better for specific people. I have grads who seek out dev careers in vain, when they don’t really enjoy programming and it doesn’t play to their strengths.


Comments

Popular posts from this blog