When helping students transition from concrete arithmetic to abstract algebra, I try to do things many of you have mentioned: relating situations to something students can imagine, drawing pictures, using other mathematical models like tables and graphs, and moving to abstract concepts. I do use manipulatives, but I will usually have the students use them in groups or I will model them for everyone. When I teach math support classes, I use manipulatives more than I do in other classes. It is easier since the class sizes are so much smaller, and the students in support classes may need more concrete or kinesthetic options.
Some students are not quite developmentally ready for this transition, especially if they are in an advanced math class when they shouldn't be.
I'm hoping students will find programming to be another way to see the relationship between different representations of the same thing. I'm also hoping that programming that programming will be one more way to reach students and help them see the usefulness of mathematics.