Earlier quoted context omitted.
I'm talking from my experience of attending the most highly regarded mathematics undergraduate programme in the UK. There was basic programming training, but the emphasis was on the "basic". There was absolutely no emphasis placed on writing maintainable code. We (in fact "they": I didn't attend the classes) were simply taught some technical details of C. In fact I think the number of hours of teaching time was singl…
> I'm talking from my experience of attending the most highly regarded mathematics undergraduate programme in the UK. That's a bold claim. Which undergraduate programme would that be, and by whom is it the most highly regarded in the UK?
The problem existed not only mathematics, where I ended up giving extra programming classes to friends because the teaching was practically non-existant. Also physics along with the computer simulation and theoretical branches of physics, which I happened to be studying. In fact, we were only taught rudimentary Fortran (!) syntax, and laughably, OpenMP and MPI later on. Nobody who made it through the course alive did so without having either learned to program earlier or investing a large amount of time in self-study and then "winging it" - after all, the final project depended on being able to deliver a simulation of whatever physical system was being investigated.
I started programming when I was 10, so I had no trouble; together with a colleague who had a similar programming history as I, we introduced the rest of our year to basic good programming practices and workflows (split your functionality into stand-alone functions and files; use version control; avoid global variables; the merits of code reviews; etc.). A lot of people had already switched to experimental physics before we started doing this. Obviously, expecting people to understand concurrent programming at that level is pretty dangerous. In my experience, this sort of attitude breeds a view that computer programs are magical things, and once they compile and don't crash or hang, you can trust their results. This exact attitude is what I'm reminded of when I read about this CRU incident.
I don't think any of the staff ever took the issue seriously, though. Even if they weren't prepared to teach it, they should have told everyone to teach themselves over the holidays and provide exercises or whatever. At no point did anyone point out that programming was a difficult craft, and that mastery of it would be expected.
For context to those unfamiliar with the majority of UK science degree programmes: they are typically not as modular or flexible as in other countries. If you failed a module, you had one chance to re-sit the exam a few weeks later. There was no option of re-taking the module including lectures during the next term/semester; each term had a pre-assigned set of modules, there was no flexibility in when they could be taken, so you couldn't defer your concurrency project until you'd taken some more programming classes or so.