Imaginaos que un día os levantáis y decidís que queréis aprender a programar. Os puede parecer absurdo, pero ¿acaso no es absurdo que haya personas que fotografíen una tostada y la cuelgue en Instagram?

Lo primero es elegir un objetivo a largo plazo, una visión en la que nos imaginemos creando la reencarnación del PCFútbol, mi propia mascota virtual en el móvil o una web para colgar fotos de tostadas. Claro que a día de hoy no tenemos ni idea, pero esa visión será la que nos ayude a navegar entre las enormes cantidades de información, a superarnos y a elegir en cada momento las batallas adecuadas.

Tu visión personal será la que te ayude a aprender a programar.

Lo segundo es equiparse con todo lo necesario para programar. No queremos que por una mala planificación no podamos avanzar, y no sabemos qué otro día nos levantaremos con ganas. Para programar se necesitan 4 cosas:

1. Un ordenador

Un ordenador adquirido en los últimos 10 años te vale. Y no tengas miedo, la programación no se va a cargar tu ordenador. Descargar películas y libros piratas sí.

2. Un lenguaje y un entorno de desarrollo

La primera decisión de calado es elegir el lenguaje. Muchos habréis escuchado frases del tipo "Java es mejor que C++", "Javascript es el nuevo Java", "Lo mejor para empezar es Haskell" o "Yo programo en Excel". Paparruchas. Los que ya estén familiarizados con el mundo de la informática seguramente conozcan a E.W. Dijkstra [2], una de las voces más influyentes en la informática al que se le recuerda más por su chorrada de algoritmo [3] que por su apasionada obsesión por hacer programas que funcionen correctamente y su postura frente a la enseñanza de la programación. Detrás de los cientos de lenguajes de programación que existen, se encuentran no más de 5 paradigmas diferentes. Dijkstra defendía que el aprendizaje debía dirigirse hacia los paradigmas de programación en lugar de centrarse en los lenguajes. Cuando una persona aprende un segundo lenguaje, empieza ver las relaciones entre ambos y establece patrones comunes. Esos patrones son los que definen un paradigma. De esta manera, un programador que no aprende al menos dos lenguajes que siguen el mismo paradigma es un programador incompleto; y un programador que conoce un paradigma puede aprender un lenguaje en horas.

El objetivo debe ser aprender un paradigma de programación, no un lenguaje.

El primer objetivo en la formación de un programador debe ser el aprendizaje del paradigma de la programación estructurada. Aquí encajan lenguajes clásicos como C o Pascal. Sin embargo el paradigma predominante hoy en día es una evolución de la programación estructurada denominada programación orientada a objetos. Lenguajes como C++, Java, C#, Ruby o Scala siguen este paradigma. Como es deseable aprender varios lenguajes y la programación orientada a objetos introduce elementos innecesarios para las primeras etapas del aprendizaje, el lenguaje elegido será C.

El entorno de desarrollo es la aplicación (o conjunto de aplicaciones) que nos permitirá escribir código en un lenguaje y que de forma mágica consiga ejecutarlo. Será el encargado de hacer realidad nuestros sueños y de darnos a la vez muchos quebraderos de cabeza. Existen multitud de entornos de desarrollo y elegir el adecuado puede ser una tarea ardua. Yo os recomiendo que comencéis a utilizar Eclipse [1]. Escucharéis opiniones en contra y a favor. Mi consejo es que os evitéis debates espúreos y que lo descarguéis y lo instaléis. Es gratuito, está disponible en todos los sistemas operativos y soporta múltiples lenguajes. Así si un día cambiáis de ordenador o aprendéis un nuevo lenguaje, el trauma por cambiar de entorno será casi inexistente.

3. Un buen libro

La definición de "buen libro" puede ser tan subjetiva como la de "mejor equipo de fútbol" o la de "mejor plato". Hay muchas posibles decisiones y cada persona recomendará uno distinto (algunos incluso a sabiendas de que es malo). Sólo hay una cosa peor que tomar una mala decisión y es no tomarla. Así que dejémonos de debates estériles y vayamos a hablar de EL LIBRO [4] de Herbert Schildt, para mi gusto el mejor escritor de libros didácticos de programación. Un libro con más ejemplos que texto no puede ser malo. Además obliga al lector a poner en práctica los conocimientos y a relacionarlos de forma constante, ofreciendo soluciones a todas las preguntas que plantea. Tiene libros de otros muchos lenguajes como C++, Java o C# que siguen la misma metodología y que son realmente buenos.

4. Motivación

Este aspecto es más importante que cualquiera de los anteriores. Debes creerte capaz de hacer cosas y pensar en que algún día realizarás tu visión. Pronto aprenderás que los retos más difíciles pueden resolverse con facilidad y la mayor chorrada puede suponerte un enorme obstáculo. Pero al final todos los problemas se resuelven y la recompensa debe merecer la pena. Invierte tiempo en buscar tu motivación.

¿Y qué hago ahora?

Muy fácil: equípate. Hazte con un ordenador, instala Eclipse CDT [1], localiza ese libro y dibuja tu visión. Pronto volveré con retos que espero que os motiven.

Referencias

[1] Eclipse CDT.
[2] Puedes leer algo más sobre E.W. Dijkstra aquí.
[3] Si quieres saber qué es y para qué sirve el algoritmo de Dijsktra echa un vistazo aquí.
[4] Herbert Schildt. "C: Guía de autoenseñanza". Ed. McGraw-Hill 2001, ISBN 9788448132040. Lo podéis encontrar en la mayoría de bibliotecas universitarias.

6 septiembre, 2014

Posted In: Aprendiendo a programar, Tecnologería

One Comment

Corrían los años 80 y los ordenadores personales comenzaron a hacerse un hueco en los hogares. Su aspecto y características eran de lo más dispares pero todos tenían un aspecto en común: nadie sabía qué hacer tras encenderlo la primera vez. Tan solo parpadeaba un pequeño cuadrado que parecía indicar que la máquina esperaba algo de ti. Así que tenías dos opciones: o leías un grueso manual o te conformabas con un pisapapeles muy caro. En aquella época todavía la lectura de manuales estaba bien vista, y las madres todavía eran capaces de manejar el video Beta o VHS con soltura.

Detrás de ese "prompt" se escondía un mundo apasionante

Estos manuales eran monstruos de 500 páginas [1] que te entretenían durante más de 30 antes de poder tocar una sola tecla. Pero era entonces cuando se abría un mundo de comandos que hacían que poco a poco esa máquina inerte empezara a cobrar vida. Poco a poco aprendías a manejar procesadores de texto, dibujabas con el Dr. LOGO [2] y jugábamos a los primeros videojuegos. En mi caso, con un Amstrad CPC 6128 en mi poder y tras mucho sobar el manual acabé descubriendo un anexo titulado "Que usted lo disfrute" donde aparecían líneas de códigos indescifrables esperando a ser transcritos en el teclado con paciencia. En ese momento no sabías qué ibas a encontrar al final del camino, pero asumías el reto de explorar. El premio era doble: tenías un juego gratis (el gusto por lo gratis es intemporal) y descubrías que existía una forma de crear juegos y estaba a tu alcance. Mi padre, mi hermano y yo nos alternamos durante horas hasta que escribimos "RUN". Y de repente una pelota rebotaba por la pantala rompiendo cuadrados de colores. Y todos sentimos curiosidad por descubrir qué significaba aquel extraño lenguaje que nos daba el poder de controlar una máquina: el BASIC [3].

No se puede ser más precario y divertido

Algunos decidimos llevar esa curiosidad más allá, devorando los pocos libros y revistas que caían en nuestro poder para aprender a sacarle el máximo partido a la máquina para algún día poder controlarla. Así fue como muchos de una generación empezamos a crear nuestros primeros juegos (o un intento de ellos) y utilizábamos la programación como forma de expresar nuestra creatividad, tan válidas como el dibujo, la escritura, un regate de Mágico González o cualquier otro arte.

Y los profesores vieron que aquello era bueno. Los colegios que podían permitírselo (privados la mayoría) comenzaron a adquirir ordenadores personales y a impartir cursos en horario extraescolar y posteriormente como asignatura opcional en bachillerato. Ya existían por aquel entonces los primeros PCs con MS-DOS que seguía manteniendo la misma cara inerte de aquellos ya obsoletos ordenadores con su cursor parpadeante. No era extraño que en estos colegios pioneros se enseñara LOGO y BASIC. Su valor didáctico era indudable: resolver problemas haciendo uso de una herramienta con tantas posibilidades como una navaja suiza. Estos lenguajes tan básicos exigían al que los programaba pensar de una manera diferente, debiendo conocer qué era capaz de hacer la máquina y qué no. Te obligaba a estructurar la mente de una forma diferente, más creativa, más procedimentada. Y el premio final era suficiente como para que la motivación por resolver problemas no fuera un problema.

Tal fue el impacto de la programación en aquella generación que allá por el año 1997 se creó la I Olimpiada Informática Española [4], la edición española de su homólogo internacional que llevaba celebrándose desde 1989. El objetivo de esta olimpiada era fomentar la programación informática en los alumnos y profesores de institutos así como en las administraciones responsables de la educación [5]. En esta Olimpiada los alumnos debían resolver diversos problemas bien en lenguaje C, bien en Pascal. La mayoría de los institutos enseñaban BASIC con lo que aquellos alumnos que se manejaban con alguno de estos lenguajes era porque habían tomado un libro de la biblioteca municipal o que se había comprado un libro de programación en El Corte Inglés. A pesar de este requisito se consiguieron más de 400 participantes en toda España. Yo era uno de esos 400 y participé dos años seguidos, consiguiendo clasificarme para la fase final en Madrid a mi segundo intento. Aquella aventura no fue más allá de un 10º puesto en la final, pero todo aquello indudablemente marcó mi futuro y el de mucho de los allí presentes. La mayoría comenzamos los estudios de Ingeniería en Informática con la esperanza de seguir encontrando respuestas a nuestras inquietudes y convertir aquella afición en una profesión.

Informe anual de la 1ª OIE

En los dos primeros años, cursas hasta 4 asignaturas de programación, salpicadas por otras 20 que en ese momento te parecen que no tienen nada que ver con la informática (a día de hoy 15 de esas 20 siguen en esa lista). Para mí fue sencillo: te enseñan lenguajes que ya conoces, aprendes algún algoritmo para resolver aquel problema que en su momento te llevó días y te das cuenta que los problemas que se planteaban en aquella Olimpiada eran tan difíciles o más que los que se plantean en la carrera. Para la mayoría de los compañeros el salto era brutal. Programar exige una forma de pensar diferente. No es sólo cuestión de aprender un lenguaje, que es pura sintáxis, sino que debes conocer sus implicaciones, cómo funciona una máquina, y debes comprender que tu forma de pensar y resolver problemas no es la forma en la que una máquina los resuelve. Debes desarrollar una habilidad para comunicarte con las máquinas en su lenguaje. Y ese lenguaje no es sólo C, Pascal o BASIC. Ese lenguaje requiere interpretar tu problema en base a problemas más pequeños, apoyarte en conocimientos matemáticos y comprender que un ordenador es la máquina más tonta del mundo que sólo es capaz de mover información de un lado para otro y hacer pequeñas operaciones aritméticas y lógicas. Y eso no se aprende viendo cómo un profesor habla, viendo cómo resuelve problemas en una pizarra o en su canal de Youtube. A hablar un idioma se aprende hablando, y a programar se aprende programando.

A día de hoy la mayoría de los alumnos que aprenden informática lo hacen sobre un papel. Y no sólo me refiero a la ingeniería informática sino también al resto de ingenierías que imparten programación. Para comprobar si un alumno sabe programar basta con vomitar líneas de código en varios folios y prueba superada (o no). ¿Acaso para demostrar que sabemos conducir nos basta con un examen teórico? ¿Acaso para aprender un idioma nos basta con demostrar que somos capaces de escribir? Y si encima esas pruebas utilizan la técnica de "rellena el hueco" para facilitar su corrección, el atentado contra el aprendizaje es aún mayor. Con este enfoque encontramos a multitud de alumnos que estudia con papeles y que va a tutorías a preguntar a un profesor si su programa funciona, teniendo el compilador al lado. Este tipo de enseñanza no persigue el desarrollo de mentes creativas, la resolución de problemas complejos, ni por supuesto se demuestra efectiva para discernir entre el alumno que es capaz y el que no. Con estas metodologías estamos creando dos universos en la programación: el que existe en el papel (que lo aguanta todo) y el que existe en el ordenador y sólo uno de ellos es real.

El número de alumnos no es excusa para justificar esta metodología. Las propias Olimpiadas y Google Code Jam [6] obtienen los resultados de forma inmediata con sistemas automáticos de puntuación; se organizan cursos masivos online con correcciones masivas. Con el papel lo único que logramos es que el alumno desconozca una parte importante de su práctica profesional, que adquiera un desdén por la programación y trasladamos el problema a años subsiguientes y por qué no, a las propias empresas que contratan a estos graduados. Es más, estoy convencido de que a día de hoy el 90% de los alumnos recién titulados en ingeniería de España son incapaces de resolver cualquier problema de una Olimpiada informática en un tiempo razonable.

Hoy retomo el blog con dos objetivos claros: Despertar el interés por la programacion y enseñar a pensar como un programador.

El año pasado no pude enviar a candidatos adecuados para 6 puestos de trabajo en diferentes empresas que buscaban a programadores excepcionales, con salarios muy por encima de mercado. Esto puede deberse a dos razones: mi incapacidad de encontrar talento existente en la Escuela y la incapacidad de la propia Escuela para crear talento. En cualesquiera de los dos casos, voy a intentar aportar mi granito de arena. Hoy retomo el blog con dos objetivos claros: Despertar el interés por la programacion y enseñar a pensar como un programador a quien se deje. Si no sabes programar, espero que te sirva para lanzarte a la piscina. Si te enseñaron mal, olvídate de todo. Si sabes programar algo, intentaré enseñarte amar la programación. Si ya sabes programar, colabora 😉

Para empezar a profundizar en estos objetivos en los próximos días publicaré distintos retos para cualquiera que se atreva a evaluar sus capacidades de programación, pensaré en voz alta y trataré de enseñar el apasionante mundo de la programación desde una perspectiva diferente. Espero conseguir "que usted lo disfrute".

PD: En algún momento organizaré alguna actividad presencial de la que informaré vía Twitter. Seguiremos informando.

Referencias

[1] Si tuviste un manual AMSTRAD y eres un nostálgico échales un vistazo aquí.
[2] Aunque no lo creas LOGO sigue vivo. Échale un vistazo a su historia y evolución.
[3] Hay quien todavía usa BASIC en una de sus múltiples reencarnaciones.
[4] La Olimpiada Informática Española sigue existiendo a día de hoy
[5] Hoy mismo se anuncia que la comunidad de Madrid comenzará a impartir Programación este mismo curso en 15 institutos, ampliándolos a todos el curso 2015-16.
[6] Google Code Jam

4 septiembre, 2014

Posted In: Tecnologería

Leave a Comment

Hoy inauguro una nueva sección de mi web que he bautizado como "La Tecnologería". Sección donde contaré todo aquello que me parezca interesante sobre distintas tecnologías. Hace unos días leía sobre cómo escribir blogs de una manera sostenible en el contexto educativo. Me encontré con una regla que es la que voy a aplicar hoy: "si te preguntan algo 2 veces, escribe la respuesta en una entrada". Así que a ello voy. (más…)

6 mayo, 2012

Posted In: LaTeX, Tecnologería

Etiquetas:

2 Comments

« Página anterior