Learning to design programs also means acquiring two kinds of universally useful skills. Program design certainly teaches the same analytical skills as mathematics, especially (pre)algebra and geometry. But, unlike mathematics, working with programs is an active approach to learning.
Me gusta mucho esta idea porque hay que recordar que aprender no siempre ocurre leyendo o resolviendo incanzablemente ejercicios en un papel sino que esto se entiende más cuando se ejecuta en la práctica, práctica en la que eventualmente saldrán errores, claro está. Y es que es precisamente de esto que se trata, ese circulo o ciclo en el que pensamos, lo intentamos, fallamos y buscamos mejorar**. Claro que la parte teórica siempre va a ser fundamental y necesaria porque la practica se convertiría en repetición de comprensión vacío.