In my experience college education has nothing to do with who is really a good programmer. Sure MIT grads are better than average, but that's because they have a reputation to attract the people that are the most interested in it. CS fundamentals definitely make you a better programmer and able to solve harder problems, but it's somewhat orthogonal to the daily grind of keeping a mental model of a large obtuse system in your head while solving hundred arcane micro-hurdles one after another.
There's also a filter here: To immigrate to the US as a dev you need to be able to secure a job as a dev, and the employer must be willing to sponsor you.
That puts the bar way higher.
Israel is probably a knock-on effect of that, since most (jewish) israelis are (or descend from) eastern european migrants.
That's a popular, but unfortunate misconception. Majority of Jewish Israelis are Mizrahim that immigrated from middle eastern countries, running from persecution by Muslims.
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.
Isn't it the foundational concept of fizzbuzz that a lot of applicants to programming jobs are "completely unable to do anything"?
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.
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.)
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.
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.
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.
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.
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.
You sorta can.
https://missing.csail.mit.edu/
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'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 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.
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.
I've been fairly impressed with the Germans that I've worked with, but that may be sample bias.
At a regional Chinese university you are basically looking at those who couldn't go abroad and to the tier one institutions. And same thing for the TAs and teachers there.
Now I'm sure there are colleges and universities where this isn't true, and there are lots of Chinese programmers that do it for fun and love it just as much as any 'westerner'. I've actually met some shit hot C and C++ coders in china professionally and these people absolutely knew their stuff. However the base level education system is woefully unfit for purpose and the vast majority of computer science graduates cannot be assumed to have any practical knowledge of the subject.
This was as of about 5 years ago, so maybe things are changing.