A standard programming course teaches the syntax of a language and how to use it to solve real world applications. Often it teaches some computer science but its aimed at getting students capable in the workplace. Later courses focus on the software development life cycle: planning, developing, and testing software. design patterns, uml, ...

My intro cs course that I took was built on scheme, which used only a very small subset of a language. Every assignment or other was built around recursing through some data structure, many times trees and mutually recursive definitions. You learn about how to classify the efficiency of a program, and thus how to make a program faster.