Patterns and paradigms can be taught easily on the job, and can be overly specific. The "advanced programming" course teaches genuine problem solving. Breaking down a problem into it's mathematical components to develop an optimal solution. It builds you into a good engineer, not a programmer that can spit out patterns to fit a problem.