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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.