Learning to Program, Programming to Learn