Failure Rates in Introductory Programming (2007) [pdf]
users-cs.au.dk
users-cs.au.dk
When I was taking my BS the freshman class was packed. While the failure rate was probably on par with this report, many more of the students dropped CS not because of grades and I never saw them again.
Whether it was out of lack of interest or because it wasn't what they through it was (all I wanted to do was build a cooler Halo game) would have been interesting to know.
The effect was even more pronounced after Sophomore year. I suspect Data Structures and Algorithms, which I loved, but could be difficult to digest and may have disillusioned people with that CS or SE actually was.
Student interest was high, so when I enrolled in the course, we were around 25 students. By the mid-term it became obvious that most of us were interested, but couldn't put in the required 200% effort (compared to the credits we would receive).
Many (including me) dropped the course, and in the end, I think around 10 people sat the final - who did of course pass, since they were selected that way throughout the year.
In a similar way many opt-in courses were difficult but almost everyone passed. That's because only interested and motivated students took them. For example Graph Theory, Advanced Linear Algebra and a course in advanced algorithmic problem solving (basically competitive programming competitions).
from the outside, it had really high pass rates, too.
[...] Many (including me) dropped the course,
The survey in the article actually divides students into four groups for this reason. They count those dropping the course; those not attending the exam; those attending the exam and failing; and those attending the exam and passing.Surely failing CS1 is highly correlated with dropping out of a CS degree completely - or rather, it would be interesting to see if indeed failing CS1 was anticorrelated with failing other first-year CS courses.
I think a lot of people did not really know what they were signing up for - I dont have any data or evidence but from half-remembered chats and gossiping I think a lot of those that simply disappeared/switched courses/dropped-out did not really understand what they were getting in to and thought that computer science was more about using computers rather than proper computer science. Like how to write wicked-complex spreadsheets or something, or make a webpage maybe (it was the early-mid 2000s afterall).
Even a year or two in I remember some people complaining bitterly about having to learn databases/normalisation and SQL "When are we ever going to use this? Why are we wasting our time learning all this SQL nonsense?!"
Amazing really.
...but then these were the exact same people who blamed the teaching when they dont get good grades in the exams. YMMV.
I don't know, that attitude always struck me as an equivalent to a mechanic that refuses to learn how an internal combustion engine works. Yeah, sure, you could probably get away with being an suspension/alignment specialist. But everything you work on has one of those engine thingies, why not expand those horizons and learn how they work? Know a little C, know how to create a SELECT beyond "* FROM myTable", know the basics of getting a web server up, running and serving simple pages; we need a programmer's equivalent to Heinlein's list of things every man should know.
One professor said they had a drop-out rate of 40%, most of them in the first two semesters and that's not counting the people who just changed their major.
I studied "computer science and media," and many students had the impression it should be some mix of graphic design and a bit programming, but in the end, it was basic computer science with most of the examples from "media" (computer graphic, web development, printing, etc.)
When I was at the end of my degree, they also created a new degree called "mobile media," which was like "computer science and media," but with iOS and Android examples.
Since the name was so catchy, "mobile media" was filled with people who never in their right mind would have studied CS, only a hand full of them survived the first semester.
It's especially bad if people are convinced to get into nondischargeable debt for products they don't understand!
As more evidence, look at the huge number of people with degrees in unmarketable skills doing boot camps and actually becoming productive professional programmers. It's not that hard -- maybe a bit harder than learning a human language (but not nearly so time consuming).
But I will say that in my time the biggest destroyer of talented people in CS: Empire. I had to forbid myself from playing that damn thing. Ruin your life, it would! I wonder if there is any kind of similar geeky crack these days... (though I think that even today if undergrads got their hands on Empire they would be doomed...)
On the other hand it also means that you aren't quite the perfect programmer after finishing the course.
Due to the immediate possibility for practical application, it was a lot easier than other more abstract topics.
Nevertheless it drove quite some people away from CS. Though not nearly as many as Algebra.
The two modes tended to come from two groups of people: those who missed classes and failed to catch up, and those who either didn't miss classes, or managed to catch up what they'd missed.
It was suggested from this that programming is pretty unique in that the whole course builds on everything that has come before. If you miss a bit in maths, then you might lose a few points on that aspect, but when they move to a different topic, it generally won't depend on what you missed.* However, in a programming course, if you miss constructors, or arrays, or something then you're kinda screwed for the rest of the course if you can't figure it out.
We helped deal with this by having specific remedial tutorials where people could come and get help with anything they missed, or were stuck on, etc. IIRC (it was a while ago) this helped pass rates quite well.
* there are definitely exceptions, I'm speaking in generalities.
There is argument that is not true [1]. However, I agree with your next statement that this isn't so much a 'lack of geek gene', but a lack of catching up. In [2], even something as simple as assignment operations were able to predict success in a CS course.
I'm currently developing my own 'remedial tutorials' and researching the proper order of exercises to give a low-performing student. Similar to your experience, these help those low-performers catch up.
[1] http://www.cs.toronto.edu/~sme/papers/2016/icer_2016_bimodal...
[2] http://www.ppig.org/sites/default/files/2014-PPIG-25th-Ahadi...
And now I’m kinda looking into programming again and many books I examined still go with “let’s build a bank account manager” as an example project. Such a shame, programming offers endless possibilities and the first encounter is the worst kind of business app.
Could you elaborate on this? I hold an associate's that I want to upgrade to a full Bachelor's in CS; I'm looking at my options for a minor and History is one.
1) Advanced mathematical logic. 2) Advanced statistics. 3) Advanced control theory or systems. 4) Experiment design.
All of these usually post-graduate and they feed one into another... You need pretty strong algebra and mathematic proof reading skills too.