As someone who used to do hiring for a small company, I can state that a lot of people who have degrees have no clue how to code.
Until our field gets the equivalent of a bar exam or NBME, each employer has to evaluate candidates on their own.
I don't understand how this is possible. I know CS != coding, but every CS degree syllabus I've looked at does involve plenty of programming classes, practical programming projects, etc. How is it possible to graduate from that without being reasonably comfortable writing non-trivial stuff in a couple of major languages?
Step 1. The academics are themselves not that good at coding or teaching, and/or aren't interested in them. This might sound contradictory for a CS course, but at my university (as an example) the CS dept was run by a guy whose actual background was in mathematics. He loved hiring graph theory researchers and didn't like hiring people who knew programming.
Step 2. They try to teach programming to a class of newbies, but fail miserably because teaching programming is hard.
Step 3. They find ways to cover up the fact that nobody is learning to code properly. This can take many forms. At my university (a supposedly 'elite' British uni) they had evolved at least six or seven different tricks for this.
Step 4. Because nobody seems to be accountable for anything and the whole academic hierarchy is in on the scam, nothing gets fixed. Students who complain that they aren't being taught properly are simply punished with low grades. Because grades aren't connected to anything real or objective, there is no recourse.
A few of the tricks they used to cover up the lack of learning:
• Programming assignments that had almost all points allocated to the associated English-language "report", not code. As a consequence marks were arbitrary and depended mostly on whether the profs liked you or not.
• Unrealistic deadlines/workloads were set. Students who didn't submit work on time/whose programs crashed immediately on startup were then given extra time. Students who submitted work that started up were graded as-is on the deadline. This evened out the grades between self-taught programmers and those who were struggling.
• Group projects in which the group composition was fixed by the staff. They administered a programming test at the start of the course to identify those who had already taught themselves coding and then ensured every group had one such person. That person then did all the work, and the others in the group either slacked off or wrote the associated "report".
• Assessments in which the professors/TAs simply looked at the running program on the student's screen to judge if it worked. Students were informed of this practice up front, thus you could pass a programming exercise by simply making mockups in which the buttons didn't actually do anything, or updated the UI in hard coded ways.
And so on. I put report in quotes because the contents of these reports was primarily make-work.
The golden rule - at no point in the entire course did any of the teachers actually do a code review of any kind. Code was written but not read. Needless to say, cheating was rampant. None of the above can be fixed because academics are marking their own homework.
In theory, if there was demand for it the private sector could fix this by issuing certifications. In practice certifications aren't especially useful or well recognized, as the sort of people with the best skills don't see any need to take them. It's much easier and lower effort to demonstrate your skills in an interview. See this thread - people don't have the time/will to do take-home assignments that are meant to consume a few hours, tops (and I totally get that, I wouldn't want to either). They certainly wouldn't be happy if you suddenly told them they all had to cram for and take some government designed exam that checked their knowledge of e.g. Java 1.4 otherwise they'd all lose their jobs!
Aha, so the secret summary is that:
Both students and teachers want the students to succeed,
so they cheat together, to make that (seem to) happen
> A few of the tricks they used
Thanks for writing about that, really interesting to read (!)
> cheating was rampant
(You don't happen to know about some websites being used for that? I recently found out about studypool dot com.)
By cheating I didn't mean getting solutions from websites although there's obviously a lot of that going on if you browse through e.g. Upwork. A staggering number of 'jobs' are obviously student coding assignments being farmed out.
The sort of cheating I meant was more stuff like students copy/pasting stuff off Wikipedia (it's all on the written reports remember) or copying answers off each other. Or they'd deliberately submit work they knew didn't function properly, aware of the fact that it wouldn't matter.