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.
i work at google but have no idea what solid is. but i can do dynamic programming. i guess it’s what they select for