Learning to program and learning to think: what's the connection?

Abstract
Focusing on thinking skills that are cognitive components of programming—rather than on intellectual ability—can illuminate the relationship between learning a programming language and learning more about thinking processes.