Computer science varied depending on language - when it was Haskell the focus on thinking was a lot higher than when using Java or C, for me. The classes that used imperative languages tended to focus a lot more on nuts and bolts. Maybe that's just a preference of my uni though - they tended to teach algorithm classes etc in Haskell and database style classes in some imperative language, I think, so maybe the difference there is due to a choice from their side.
Organic chemistry, statistics, formal logic didnt evolve my thinking at all in my view.
I guess in short - the things that have developed my thinking the most are things that are about models and algorithms. You could probably run classes focusing on those, but Im not sure there is a big value in doing so compared to just teaching the subjects that are heavy in doing those tasks.