@mhoye I don't feel qualified to come up with a whole course outline, but here are some things I'd for sure want to put in:
-success and failures in abstraction, generalization, and specialization, to help make the students more thoughtful of not just how but whether to apply more of one of those to a project
-showing how the interpretation of common phrases/concepts, like "object oriented", have had varied and evolving interpretations, and how different languages, patterns, and guidelines have approached the supposedly-same idea in different ways
-compare different language and library abstractions that fulfill the same objective, such as comparing exceptions and sentinel values to sum types