I spent the first seven years of my career teaching every level from of math from 7th grade through calculus. I've spent the last five years teaching integrated technology. I only recently started to teach Scratch to students -- which is basically great big training wheels for programming.
It was really easy to teach Algebra II badly. I could help students learn to turn cranks and get the answer. And they had no idea why they were doing it, or even remembering that X was a number, not a letter.
It's really, really hard to teach programming -- it's so abstract. But Scratch does an amazing job of turning abstract programming concepts literally into something concrete: building blocks. It's the most brain-stretchiest piece of software I think I've ever used, and the most rewarding piece of edtech I've ever used. Someone please give Mitch Resnick's team (another) award.
Not gonna lie, some students are really struggling with the very basics of Scratch. And my one big idea is wildly disliked by some people whom I've mentioned it to. Oh well. In my heart of hearts I'm certain that transforming some math requirements into computer science requirements is the right thing to do.
**update... this is definitely not my idea *** (thanks Patrice Gans for the link)