@aparrish We had a whole class in my electrical engineering undergrad that tried to teach that, but mostly failed at it. I think project-based work, where you give people progressively larger and larger problems to solve, is pretty much the way to do it.
The principle from the class I alluded to still applies: abstraction and synthesis. Students must abstract a problem and then synthesize that into the relevant language concepts
@aparrish One thing that I'd be interested to try is a daily whiteboarding excercise. So students only do the abstraction part and you do it as a group for like the first ten minutes of class every single day.
If you look at it at two skills it's the abstraction that's usually the harder part than the synthesis, so I think just working those abstraction muscles through daily calisthenics is the way to go.