Honestly, this genre of venting about new grads has long been applied to new grads here in the West too. It's a long-standing complaint of the industry that academia isn't willing to serve as vocational training.
Having interviewed new grads from the west and new grads in China, I can guarantee you that a lot of the new grads in China had had exactly the education the OP described and were completely unable to do anything. It's not just venting, it's the reality.
There are some great universities in China and there are definitely some who know their stuff but the average mid level university in China? Nope, completely useless.
To be fair, this was in 2009 to 2014. I have left China since.
> I can guarantee you that a lot of the new grads in China had had exactly the education the OP described and were completely unable to do anything. It's not just venting, it's the reality.
Isn't it the foundational concept of fizzbuzz that a lot of applicants to programming jobs are "completely unable to do anything"?
We're not talking about graduates not able to solve theoretical exercises. These graduates might well be able to solve an on-paper algorithms exercise like that, after all their teaching and assessment was all theoretical.
The problem is they don't know how to actually compile and run a "Hello World" program, or write and run any kind of program on a physical computer, because they never had to do it as part of their computer science education.
FizzBuzz was never a programming challenge, it was just a very quick filter before getting to real challenges.
Real tech interviews have always been about understanding and applying data structures and algorithms, with some emphasis on problem solving with those tools.
A really long time ago, there used to be questions that were more like "do you know some very common C/hacker idioms", like write a one line strlen or reverse a linked list in place. I used to get asked stuff like that in the late 90s.
(There were also the brainteaser style things, like how many golf balls fit in a 747, but those were often for non-programming roles where people were looking for your ability to problem solve in a vacuum with little information. Those were rarely aimed at engineers, but at engineer adjacent non-technical roles.)
I realize this may have changed, but at least at the time, was this partially due to access to computers at the university (i.e. lack of funds for computer labs)? Or just prioritizing the theoretical side?
I think it was both of the factors you mentioned but also due to the fact that in early/mid 2000s, China increased the number of university student by an order of magnitude (almost ten fold). This caused some growing pains in universities in the late 2000s beginning 2010s which means that in the race to hire enough teacher to fill demand, not every teacher was competent (I've met some remarkably incompetent CS teachers when visiting universities) and there weren't necessarily enough funds to handle the influx of students.
It was common knowledge that people who had graduated before 2004-2005 tended to be much better candidate and had received a better education. In the end, it was necessary for the country but any big systemic changes like this cause growing pains. I do not know what the current landscape in China is nowadays, I would assume that this is much less of a problem since time probably helped with those growing pains, on the other hand, as the PRC starts creating tighter and tighter restrictions, the best elements might be more likely to want to study abroad.
Which is crazy. No University can teach the kind of skills needed to be a good commercial developer.
The best approach would be apprenticeships; learning the craft while doing the job. But the industry has always been ridiculously opposed to training its own staff - echoing your point that this is seen as something that the education system should do (why?).
I've heard managers say crap like "but if we train them then they'll leave us when they finish the training and go somewhere else - we'll have paid for their training and get no benefit". This is a staff retention problem, not a training problem.
> I've heard managers say crap like "but if we train them then they'll leave us when they finish the training and go somewhere else - we'll have paid for their training and get no benefit".
The clever response to that is: but what if we don't train them and they stay?
I'll say this: programming isn't a profession. If I was being particularly unkind, it's more like a collection of wild west gunslingers.
It probably won't be a profession either until we've settled the whole C++ vs Rust vs Lisp vs JavaScript vs $LANGUAGE_DU_JOUR debate, and stopped acting like egotists. "Rockstar programmer" is a problematical phrase. What it tells us is that programming is one big dick-measuring contest.
I trained as a UK chartered accountant, having graduated in mathematics. I had to go through a set of professional exams. I was under a training contract, started as a junior. I couldn't sign audit reports. That was for the partners. My work was reviewed, and as I moved up through the ranks, I reviewed others. When I was a senior, the juniors asked me for advice. When I finished my work, I spoke to a partner, he reviewed my work, and I reworked whatever was necessary.
There was also "calling and casting". After the accounts were typed up, a more junior clerk would have an old copy of the accounts with corrections, and the more senior clerk would have the revised copy. The junior clerk then read aloud what was on the accounts, and the senior checked it against his copy.
See that? Professional. I imagine lawyers, engineers and manifold other professions have similar appropriate procedures.
What do us programmers do? Release our shit onto the world and fix it later via patches. And issue licences that say we take no responsibility for the fitness of our programs.
That's why I call what we do gunslinging.
Maybe one day the queen will create an Institute of Chartered Programmers, but that day is not only far over the horizon, it's not even in the same solar system.
Accountancy has been around for a few hundred years. Lawyers longer. Eventually what you wish for will be true.
But I'm not sure I'd want to work in that industry. I like that I can just start hacking away at something that I think will work and create value.
> The clever response to that is: but what if we don't train them and they stay?
Not really. I mean, I get the reference and it is smart. But we're talking about why most tech companies don't hire juniors and train them up. Instead they prefer to hire seniors, not provide any training, and lose them after two years because they can't give pay rises over 5%.
And my impression of "professionals" is not nearly as good as yours. I've seen "professional" managers behave like egotistical idiots way more often than devs. My first startup was destroyed by a "professional" accountant behaving wildly inappropriately. The last time I was a CEO I was quietly informed that I should get a new desk because the previous CEO (an accountant) had a habit of humping hookers on it during his lunch breaks.
> It probably won't be a profession either until we've settled the whole C++ vs Rust vs Lisp vs JavaScript vs $LANGUAGE_DU_JOUR debate
I don't see how it's a debate. Different languages have strengths and weaknesses.
> and stopped acting like egotists. "Rockstar programmer" is a problematical phrase. What it tells us is that programming is one big dick-measuring contest.
And yet law is extremely bi-modal. It's not surprising software is similar; you can't argue the average offshored programmer is in any way similar to John Carmack for instance.
> See that? Professional. I imagine lawyers, engineers and manifold other professions have similar appropriate procedures. What do us programmers do? Release our shit onto the world and fix it later via patches. And issue licences that say we take no responsibility for the fitness of our programs.
Sounds like you are hiring wrong. You are hiring programmers and then whine they aren't acting like engineers. Software Engineers have code review, proper release pipelines and methodologies. The bargain-bin programmers don't, of course.
I've also met grads that basically had a dedicated software engineering class where they learned: What's a package manager, build system, how to compile C++ code (linking and compilation), makefiles, agile, waterfall and source control and a few quality metrics to look out for.
I almost feel like this is a place for a corporate onboarding/training process.
I'm mentoring a new developer at my firm. He's fresh out of college. His code works on a basic level. The things he's stubbed his toes on:
* Naming conventions. We have probably more rules about this than some, but things like branch and commit names matter because we tie them into our issue tracking process.
* Strictly reading specifications. We had a couple days rework because he used a different suggested name for something, and it ended up propagating into dozens of class names.
* Knowing when and what can be cleaned up. This I can forgive, as it normally waits towards the end of the project and he isn't quite there yet, but when we paired to work on it, there was a lot of leftover baggage.
* Bulletproofing/exhaustive coverage. I suspect there's a lot of university projects where "what if the remote server hands us HTTP 418" is answered by "the test service doesn't".
* Multiplayer and advanced Git. "The main branch is going to update without you, and eventually there's going to be merge conflicts" and you'll need to merge/rebase was a problem for him, as was dealing with a feature branch with multiple task sub-branches (keeping too many of them open at once is a huge risk for weird merge conflicts and hideous histories when they're finally resolved).
The tech skills, maybe. But does the course cover stuff like "How to deal with a project manager who has no clue what they're doing", or "How to manage expectations in a customer who is way overenthusiastic about their new idea for a feature", or even "How to deal with Aspy Dave who thinks he's a rockstar 10x coder but actually churns out buggy crap that the rest of the team have to fix".
The non-tech skills of how commercial software development actually works in an actual organisation are really important, and the only way of learning them is on the job.
I mean sure, but most of the time Comp Sci degrees have Freshman compiling code on day one. This is a pretty be qualitative difference if the above comment is true.
My mother's friend's husband is a math professor at a university in Kansas. A major complaint of his is students coming in who aren't able to add fractions.
So I don't see the big qualitative difference between complaints about bottom-end Chinese college students and complaints about bottom-end American college students, no.
If it's of interest, I looked into gaokao test scores a while ago and the cutoff for being admitted to a Chinese university lies around the 40th percentile. The schools are officially divided into two tiers (obviously, there are finer distinctions you can make), and the cutoff for the higher tier is around the 80th percentile. So a large number of Chinese universities should have almost the entire student body within what you might think of as an IQ range from 96 to 112.
Your mother's friend's husband is a math professor who complains about the quality of Freshmen entering into a math course, therefore the quality of computer science students in the United States are on par with the one's in China. Do you see a problem with this logic?
I took a freshmen level C/C++ class in community college as a requirement to get an Associates in Science. All we did was compile. We didn't learn any high level CS theory.
The Chinese attitude to academia is very different to that in the West. This distinction you draw between the academic and vocational goals of institutions just isn't really a thing over there in the same way.
I have been told, anecdotally, that German college curricula are very "vocation-based," with students being quite well-versed in the needs of the workplace upon graduation.
I've been fairly impressed with the Germans that I've worked with, but that may be sample bias.