Why do 30-90% of students fail to learn coding?

I was recently reading an interesting essay which discusses the difficulty in teaching people how to code. It mentions somewhere that up as much as 30-60% of students fail their first programming course, and that in schools of lower level than university it can be as much as 80-90%! It also mentions that this is not merely the byproduct of laziness as many of these students are otherwise very willing to learn and do well in school besides the coding. It also mentioned that this difficulty in teaching coding and the success/failure rate of students was the same regardless of the teaching method, or what language is used. Basically everything has been tried and nothing worked (the essay’s own words).

What is it about coding that makes it so extremely difficult for people to learn? I admit it can be intimidating at first but I never found it difficult to figure out after doing some research and watching some tutorials. Yet the failure rate of teaching coding appears to be somewhere between 30-90% on average depending on the school (university students perform better). What is it about coding that scares people off so much? I mean it’s not THAT difficult 0_0

EDIT: The original post was a bit misleading. University students only have a failure rate of about 33% (which is still considerable), but for non-university students the failure rates can be as high as 90% in extreme cases. So basically failure rates can be very high but aren’t the same for all groups across the board.

I feel like there are some variables that you are missing. First off, do 30-60% of STUDENTS fail their first CS course or 30-60% of CS MAJORS? The first couple of course are generic programming courses that are full of programmers, math majors, business majors, artists… it’s a gen-ed. Other than engineers and math majors, I’d expect most of them to struggle.

Probably the thing people fail to grasp most would be object oriented programming and multithreaded events. There difficult concepts.

I will copy the direct quote:

Despite the enormous changes which have taken place since electronic computing was inventedin the 1950s, some things remain stubbornly the same. In particular, most people can’t learn to program: between 30% and 60% of every university computer science department’s intake fail thefirst programming course.

Source: http://www.eis.mdx.ac.uk/research/PhDArea/saeed/paper1.pdf

So programming course as in: ā€œIntro to C++,ā€ ā€œIntro to Javaā€ etc…

I guess the major reason is that they were overconfident. I took my intro to C++ classes and I got an A, then in OOP, I passed with a C, mainly because I thought it would be as easy as intro…

Another thing is, that people nowadays enter to coding to earn money, and then they realized that they need to actually think critically and logically, otherwise, your code won’t run, the code doesn’t run, therefore you fail the course.

1 Like

I don’t know, I have failed my first coding course because I used ā€˜i’, ā€˜j’ and ā€˜k’ as a loop variable and the teacher liked the ā€˜x’, ā€˜y’ and ā€˜z’ all the time and I wrote better bubble sort than him (I went to college with almost 10 years of programming experience in assembly and whatnot). I also didn’t like the 'history of programming languages and hardware" part of the course (it was part of it back then in my home country), I didn’t care about that, nowadays I do, as a novelty.

IDK in the UK what is the content of the course, but in my home country it’s notoriously dumb. And coding course is a subject which can be used as a filter.

Background: in my home country schools and colleges and universities get tax-money depending on how many student attends. So they inflate the beginner courses with everyone you can think of, and then after the first semester (or two) they choose a course which can be used as a filter. Since coding is abstract for most of the people, they use coding for that. Just kick out people so they don’t have to support these students anymore and since most people don’t know too much about computer programming they usually won’t complain about it or just don’t care because you can work in the industry without the papers.

programming (particularly game programming) very often requires one to think outside the box in order to know how to properly proceed with thinking inside the box. Not everyone knows how to do that, or indeed knows that they don’t know how to do it.

8 Likes

It sounds like you are supposing that more people fail computer science than other subjects, but does the paper actually compare numbers for other subjects at all? Do other subjects have a higher success rate? At the school I went to, at least 30-60% of the freshmen failed courses of a wide variety of subjects.

Also, my CS department was required to fail a certain percentage of incoming students every year. This is not uncommon with Universities that have small, competitive departments.

2 Likes

I had a professor like that. Looking back now, it’s quite obvious that many of the people who teach programming are not very good programmers outside of an academic sense. A good programmer will tell you that both are wrong. While I certainly use i, j, and k over and over again, you should always prefer a more descriptive variable name. x, y, z is even more wrong unless you’re doing a for loop over voxels or something.

One of the core, central parts of effective programming is problem solving. Problem solving is not easy to teach, and it isn’t for everybody. Some people straight-up hate it. When I was taking geometry in high-school, we had an entire section on geometric proofs. Geometric proofs are about 20% memorizing some basic geometric rules, and 80% problem solving. You can memorize those rules real good, but if you can’t use them to solve problems, you’ll still have trouble with figuring out geometric proofs.

I’ve always had a taste for problem solving, so I was able to breeze through that portion of geometry. In fact, it was easily my favorite part of the class. But I was surprised at how many of my fellow students struggled with it. Even some of the class’s best students with the highest grades seemed to have some manner of mental block when it came to geometric proofs. Logical problem solving is not a common skill, and proficiency in it is not something that can be easily taught. Memorizing syntax and structure is only the beginning. Effective problem solving is what makes you a serious programmer.

1 Like

Well, it was in a 90-ies and it was purely procedural stuff. So i,j,k (or x,y,z) was good enough most of the time for a loop variable. Obviously when they need to be more descriptive I choose proper name for them. But when you have to have an loop variable and it’s not important these are goods enough. The advantage is that your mind just slip through of these so don’t take up any brain-power.

My problem was that the academia was not pleased with the fact that I already had extensive experience with the subject. And habits and stuff.

By the way, this whole 30%-60% thing is not the conclusion of this paper that you linked, and so the author doesn’t go in to detail about it at all. That’s exactly why academic papers meticulously cite their sources, though. You can look-up the paper he cited and that may give you more information on how that came up with that number.

It’s useful to also keep this mind if you are ever doing academic research. You find a paper that seems to answer your questions, but you don’t understand every thing that the paper says? You can read the papers that the author cited as well, and that will give you more background information.

2 Likes

Assuming those numbers are accurate, I’m not actually surprised. Programming requires significant logical thinking and troubleshooting abilities, which I believe a significant portion of the population does not possess. I also do not believe those abilities are entirely learned behaviors. Also, programming is not something people of low IQ are going to excel at. When your country has an average IQ in the 90-100 range that means means half the population has an IQ below that average. If your IQ is below average, programming might be a difficult skill to master.

Actually, one of the more weird things noticed in the essay is that high IQ individuals were not considerably more likely to understand coding compared to lower IQ ones, and that many high IQ students who had no problem educating themselves about other complex skills in many cases went absolutely nowhere when it came to coding. This suggests that while a high IQ will benefit your coding skills, for the purposes of understanding coding, it doesn’t seem to mean anything unless your IQ is very low (sub-90 IQ).

Sub-90 isn’t ā€œvery lowā€ though, that was my point with IQ. In the US the average IQ is in the mid-90’s, so an IQ of say 89 is just slightly below average. Scores of 89 or lower probably cover about 1/3 of the population. But I certainly agree that IQ isn’t everything. I’ve known high IQ people who have difficulty planning almost anything in their lives, who I doubt would make good programmers.

Sub-90 is considered below average. 90-110 is considered average. About 75% of people are considered average or above average.

That’s interesting… I started off as an Organismal Biology major. In fact, that is the degree I ended up with. I took a C+ Intro to Programming course. Holy cow did I do everything within my power to just barely pass that.

About ~4 years later, I was a manual tester and got asked to learn to program on a basic level so that I could write automation scripts. I had to learn on the fly with The Google and about 3 Pluralsight training courses. Within 3 months, I was writing automation scripts by hand full time. Somehow, years later, I’d say I am a pretty good C# web developer w/ MVC; could definitely get a job as one. I’d be solid for standard native apps, and just barely serviceable as a Unity game developer.

Interestingly, my teacher at the time, tried to convince me to drop the course. He literally told me, ā€œmaybe this isn’t for youā€. He was a good guy, although it was often hard to understand him. He was native Korean. I chalked his comments up to trying to test my resolve more than trying to actually get me to give up. I told him that I would pass, whatever it took. Glad I stuck with it. I don’t know if I would have been as excited about my next chance to code if I hadn’t.

Not enough good teachers. When teachers are paid real salaries, kids will get smart. Don’t kid yourselves like it requires any special genius. I mean yeah you can’t be a rock but majority of students being failures isn’t because the subject is so hard, it’s because it’s difficult to teach and whats the incentive for people who have the capacity to be good teachers to teach? They can make infinitely more money actually programming.

Every coding course I’ve took except one just starts by jumping into stuff without explaining any theory at all. No overview of syntax or anything. That is how you learn human languages but coding is not human language. It needs to be explained in simple theory first.

2 Likes

Considering that programming is just a tool CS students and professionals use, it is entirely to move forward without being proficient at it. I know people who code worse than I but again have better grades…

This was my first thought. The OPs stats seem more like a feature then a bug.

I didn’t do computer science, I did chemical engineering. But the first two years were deliberately designed to fail people out. The first year failed people out who couldn’t handle the workload. It got rid of people who were lazy, not committed, or simply didn’t turn up. The second year failed people out who couldn’t handle the course content. It got rid of people who simply did not have the right mindset or raw intelligence. Very few people failed out in the third and fourth years. (For reference ā€œfailed outā€ often meant they dropped into a lesser degree).

As a general rule, its to the long term advantage of universities to only pass people who are capable of completing the content. If a uni makes sure all its graduates are actually skilled, then the graduates are valued by the market. This in turn leads to more prestige for the uni, which allows them to charge more or take on more students. The whole thing continues in a feedback loop.

As a student, the last thing you want to do is attend a uni with a high pass rate. High pass rates should be a major red flag that something is wrong. It doesn’t mean the standard of teaching is high, it normally means the academic bar to passing has been lowered.

1 Like

Coding is not for everyone, it just isn’t.

Most people’s brains aren’t wired for code, they’re wired for interpersonal communication, and the way you communicate with people is so extremely different than the way you need to communicate with a machine that … well … the two are kinda in conflict.

The kind of pedantic, precise communication required to make a machine do what you want is exactly the kind of irritating communication that makes partners in conversation bored or irritated.

Although it’s kind of similar to most other STEM fields, where the subject matter revolves around things that people are uncomfortable with: true, false, accuracy, numbers, precision.

Programming is really its own thing, mixing those other elements with the pragmatism and inelegance of applied maths like trig, while also working with an abstract subject matter that has little to no direct tangibility.

I’m not arguing programming is hard. I’m arguing that programming is unnatural for the vast majority of people.

7 Likes