Really enjoyed this short post from James. He nailed it with his 5 courses that don't exist but should. I wanted to add another three to the list:
CSCI 1700: Naming things: An introduction to the fascinating world of naming conventions and the use of acronyms. Discover how every language does things differently, and learn 1,001 abbreviations that you'll need to know to understand people's code.
CSCI 1810: There's no such thing as a 5-minute task: A journey through the world of estimating software development tasks where you'll learn than 5 minutes is not enough time to do anything valuable (so you can stop using it right away).
CSCI 1870: Everyone's code is equally bad: Discover how bad your own code is when you read it after a week of writing it. Learn how to respect other developers and understand the value of collaboration over the illusion of being right when you aren't.