The best "programming" curricula aimed at general education teach (elements of both) generalized problem solving and computer science with programming in a particular concrete language or set of languages as a central component and vehicle for that (and often incidentally teach elements of a bunch of other domains through the particular exercises.)
This is particularly true, e.g., of How to Design Programs [0].
This is particularly true, e.g., of How to Design Programs [0].
[0] http://www.ccs.neu.edu/home/matthias/HtDP2e/