Must be able to learn new skills, so a strong math background and getting problem solving skills is important. He isn't aware of a course specifically dealing with this. Students are very good at following directions but need to be able to assimilate new information on their own. Problem solving skills and how to look at something is very important. Someone with a good background can pick up new languages easily.
Problem solving is harder to pick up.
Front load the curriculum with speech, public speaking, technical writing, and problem solving. Take engineering problem solving approach while teaching programming languages. Being able to interpret and break up a high level spec down into parts that can be solved. Clear, easy to maintain code is more important than writing something that is as efficient as possible. Efficient, easy to read, well documented code is important.