How We Learn to Program