Aprendiendo a programar

No es fácil saber cual es la mejor forma de aprender. Ir desde un alto nivel de abstracción hasta los detalles permite enfocar la mente, y entender cual es el sentido de cada parte. Asi por ejemplo, el ver una red de computadoras desde la perspectiva del nivel de aplicación (el mismo navegador donde uno lee esto)  facilita el enteder qué labor desempeñan el nivel de red (el sistema operativo) o el físico (el cable o la radio que conecta el ordenador a internet). Pero esos niveles no son más que abstracciones.

Entender un concepto significa en cierta manera abstraer lo común para asi formar una idea que podemos aplicar para explicar o predecir otros fenómenos o incluso otros conceptos. Por ejemplo, uno puede estudiar, o experimentar con movimientos armónicos, como el de un péndulo, a la vez que teoría de la señal, como el transmitir una frecuencia pura. Y de ahí uno puede abstraer un concepto, el de análisis frecuencial, que puede aplicar no sólo a la transmision de señales de video, o al movimiento de un rascacielos, sino también a cosas como la economía.

Esos conceptos son las herramientas que utilizamos para enfrentarnos con el mundo, y son las que nos permiten controlar nuestro entorno y por ejemplo desde desarrollar la agricultura, hasta lograr estos hitos de la civilización moderna como son Gran Hermano o Operación Triunfo.

El problema con el aprendizaje sin embargo es que en realidad el concepto en definitiva es una abstracción que es útil y existe solamente dentro de uno mismo. Parece que al final no hay ningún mundo de las ideas… Y para intentar transmitir esas ideas inventamos el lenguage y las palabras, y después aprendimos a escribirlas, para que un concepto pudiera ser transmitido aquellos que están o demasiado lejos o son demasiado jóvenes como para escucharlas (y también para que pudieramos empezar a discutir sobre lo que en realidad significan).

Pero hasta que uno no aprehende esa abstracción que va relacionada con cada concepto, éste permance sin significado. Es fácil encontrar artículos donde parece que por utilizar palabras complejas uno habla de ideas muy profundas. Hasta una máquina sabe hablar utilizando un montón de términos técnicos, pero eso no significa que los entienda, y de hecho no lo hace. Y lo contrario también es cierto: el saber explicar fenómenos complejos con palabras sencillas, y sin recurrir a terceros conceptos demuestra el entenderlos con autoridad. Luego está obviamente la tercera posibilidad, utilizar palabras de borrego y no explicar nada, que es lo que hago yo, pero esa es otra historia…

 Y si quiero aprender a programar, ¿entonces qué hago? Una opción es aprender Java. Java es un lenguaje de alto nivel con una gran librería y que abstrae muchas de los conceptos que utiliza el ordenador. Así, cuando uno programa en Java no se tiene que preocupar de reservar memoria, liberarla o referenciar punteros a memoria, y se crean objetos muy complejos con dos líneas de código. Eso permite dar conceptos avanzados de programación, como diseño orientado a objetos, herencia, polimorfismo y cosas por el estilo.

Recuerdo que cuando tomaba mi primera clase de programación la burbuja de internet estaba en su apogeo, y el profesor nos explicaba que una de las razones para cambiar de Pascal a Java como el lenguaje que se utilizaba en la universidad era que había alumnos que en tercero ya estaban creando sus empresas de programación, y que, literalmente, uno no podía empezar a hacer aplicaciones en Pascal. Es mucho mejor escribirlas en Java, sin saber lo que se hace (luego se pregunta uno cómo es posible que aquello explotara).

Y no se trata de que Java sea un lenguaje bueno o malo, que un poco depende del cristal con que se mire, sino en como aprendemos las cosas. Un lenguaje de programación es sólo eso, un lenguaje, y es la herramienta que utilizamos para resolver los probemas que se plantean cuando uno escribe software. Pero, en el caso de la universidad, también para dar a conocer conceptos, y fenómenos nuevos. Como dijo el sabio, el primer paso para resolver un problema es entenderlo, y cuando no entendemos los bases de un problema, es dificil que sepamos resolverlo correctamente. Decía al principio que muchas veces ir desde lo general a lo detallado nos permite entender con facilidad muchas cosas, y ése es el poder de los conceptos abstractos, pero sin embargo el problema está cuando ese concepto general no se entiende. No sirve de nada intentar aprender mucho diseño orientado a objetos o trabajar en un lenaguaje portable si no se sabe como un programa reserva y utiliza su memoria o que hace un compilador, y por que eso hace que los binarios no sean portables en general. Cosas de las que, obviamente, yo no tengo ni idea.

Así que ya sabéis niños, si váis a aprender a programar, no lo hagáis en Java.

JoelOnSoftware tiene un artículo que está muy bien sobre por qué Java no debería utilizarse en las escuelas, y de hecho apunta a hasta qué punto es preocupante. Además, propone un test interesante para ver si de verdad uno sabe programar. Si no, todavía estamos a tiempo de aprender. 

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s