I would add that folks should be learning more about formal testing methods and sensible project management techniques. Documentation is a fact of life, yet few people can write even mediocre material.
It seems that the object-oriented design approach is taught by language rather than concept. It surprises me how many folks just plain fail to "containerize" functionality. Global variables, indeed!
Then I would suggest more writing courses--basic composition, business writing, and technical writing.
I'm not a professional developer, but I've helped manage software projects and found that bad design makes for 80% of your problems. We had one team that tried to do a straight translation of assembly language code from 1969 to Java in 1999. It didn't work.