Microworlds with different pedagogical approaches in introductory programming learning : effects in programming knowledge and logical reasoning