1.2. Prácticas fundamentales

La experiencia de varios años enseñando a programar nos muestra que con una adecuada actitud y compromiso cualquiera puede aprender a programar. Los estudiantes que se aproximan a la programación esperando cumplir con un requisito, sin ver el enorme potencial que podría tener para su desempeño profesional, usualmente tienen menos éxito que aquellos que tienen una mente abierta y curiosa y que se enfrenten a cada reto esperando aprender algo de él.

Además de esto, la experiencia también nos ha mostrado que los estudiantes que realizan las siguientes 3 acciones usualmente tienen mucho más éxito en su proceso de aprendizaje, disfrutan más la experiencia y siguen aprendiendo a programar más allá de su primer curso.

1.2.1. Lectura con atención

Para poder programar es necesario leer con atención todo lo relacionado con el problema que se esté solucionando. Es casi imposible construir una buena solución si no se han leído con cuidado las condiciones de lo que se está pidiendo ni las restricciones para la solución.

Muchas veces los problemas a los que se enfrentan los estudiantes que empiezan a programar no tienen que ver con la programación en sí misma, sino que tienen que ver con que el estudiante no entendió el problema que tenía que resolver.

¡Nunca empiece a programar sin entender antes lo que le están preguntando!

1.2.2. Práctica deliberada y reflexiva

The only way to learn a new programming language is by writing programs in it.

—Dennis Ritchie, creador de C y Unix

Al igual que cualquier otra actividad basada en habilidades, programar requiere practicar. Así como no se puede aprender a tocar violín o a montar bicicleta leyendo todos los libros disponibles sobre el tema, para aprender a programar se necesita practicar programando.

Más aún, para hacer más eficiente su proceso de aprendizaje, un estudiante de programación debería esforzarse por hacer una práctica deliberada y reflexiva. Práctica deliberada hace referencia a tener un objetivo específico cuando se practica. Por ejemplo, cuando un futbolista practica no se limita a jugar futbol, sino que en cada sesión repite ejercicios diseñados para ayudarlo a desarrollar una determinada habilidad. De igual forma, en cada sesión de práctica los pianistas más exitosos definen un objetivo particular (practicar un tipo de técnica, resolver un fragmento de una pieza) en lugar de simplemente sentarse a tocar piano.

Por otro lado, práctica reflexiva hace referencia al proceso que debería hacer un estudiante al terminar una práctica. En lugar de simplemente dar el ejercicio por terminado, el estudiante debería tomarse un momento para reflexionar sobre lo que hizo, lo que aprendió, los problemas que enfrentó y las conclusiones que se podrían sacar de la experiencia. Se ha visto en diversas situaciones que el esfuerzo invertido en este proceso de reflexión hace que la práctica sea mucho más efectiva y termina reduciendo el esfuerzo total que se debe hacer.

Este libro incluye numerosos ejercicios, seleccionados para ejercitar habilidades particulares relacionadas con cada uno de los temas. A medida que vaya avanzando, procure resolver los ejercicios haciendo una reflexión sobre lo que aprendió al final de ellos.

1.2.3. Lectura de código

Al igual que un pintor no podría pintar sus propias obras sin haber visto las de otros, o un escritor no podría escribir una novela sin haber leído las de muchos otros, para escribir programas es necesario poder leer programas escritos por otros. Sin embargo, no se trata de hacer una lectura superficial, sino de hacer una lectura cuidadosa que nos permita identificar las características y objetivos de cada uno y nos permita confrontar nuestras propias dudas y vacíos en nuestro conocimiento.

A lo largo de este libro encontrará numerosos fragmentos de código que ilustran conceptos particulares. Además, encontrará también programas más largos y complejos que retarán sus habilidades de lectura. ¡Haga el esfuerzo de leer estos programas, así no los entienda completamente en un primer momento! En el nivel 1 le daremos algunas recomendaciones adicionales sobre cómo leer código.