Boletín de Prensa #

ANGELA amarilla

Prólogo

Ángela Patricia Villota Gómez

Soy candidata a doctora en Informática de la Universidad Paris 1 - Panthéon Sorbonne (2019). Además, soy Ingeniera de Sistemas (2006) y tengo un máster en Ingeniería con énfasis en Ingeniería de Sistemas y Computación (2010), ambos en la Universidad del Valle. Mis temas de interés incluyen la ingeniería de líneas de productos, la ingeniería de lenguajes de programación, la programación por restricciones, los paradigmas de programación y las distintas aproximaciones para enseñar a programar.

Me desempeño como docente desde el 2006 cuando empecé a dictar cursos de programación usando distintos lenguajes en la Universidad del Valle. En Icesi arranqué en el 2011 como profesora de los cursos de algoritmos y programación en distintos niveles y luego fui coordinadora de los cursos de algoritmos y líder del bloque de formación en algoritmos y programación del departa- mento de TICs. Nací en Pasto y vivo en Cali desde que tenía 12 años, así que siento que pertenezco a ambas ciudades. Me considero una persona proactiva que disfruta aprender cosas nuevas y adentrarse en proyectos que impliquen retos. Disfruto la lectura, pintar, patinar y hacer cosas con mis propias manos.

___________________________

De acuerdo con la Real Academia Española, un hobby es una actividad que, como afición o pasatiempo favorito, se practica habitualmente en los ratos de ocio. Desde hace algunos años, en el Departamento de Tecnologías de Información y Comunicaciones promovemos y apoyamos al Club de Programación: una actividad extracurricular en la que los estudiantes de la Universidad Icesi se dedican a programar en su tiempo libre. Me imagino a algunos lectores un poco sorprendidos, tal vez incrédulos, y muchos se estarán preguntando con extrañeza: ¿cómo es posible que alguien programe por gusto?

Sin temor a equivocarme, puedo afirmar que la mayoría de los lectores sorprendidos tuvo una primera mala experiencia que les causó cierto rechazo –casi traumático– a todo lo que tiene que ver con algoritmos y lenguajes de programación. Comprendo dicha reacción perfectamente, porque programar y no lograr el resultado deseado es increíblemente frustrante. Esas ganas de mandar lejos el computador y no ver nunca más los múltiples mensajes de error que vienen coloreados de rojo, y que muy a menudo parecen incomprensibles, es un sentimiento que he experimentado personalmente y he observado en programadores de distintos niveles y contextos. No obstante, también están las ganas de hacer funcionar las cosas, una mezcla de terquedad y perseverancia que te motivan a seguir buscando nuevas formas de solucionar el problema.

Pienso que aprender a programar depende mucho de la experiencia en el aula, especialmente de la interacción entre el profesor y el alumno. Aprender a programar se parece mucho a aprender a nadar. He escuchado anécdotas de amigos que cuentan cómo, cuando niños, un adulto bien intencionado les enseñó a nadar tirándolos al agua para que “aprendan a defenderse”, porque “tragar un poquito de agua no les va a hacer daño”. De aquellos que pasaron por esta experiencia, algunos aprendieron a nadar, mientras otros no entran a una piscina a menos que estén seguros de que pueden tocar el fondo con los pies. A muchas generaciones de ingenieros les enseñaron a programar así, tragando agua y es por esto que algunas personas prefieren mantener distancia con todo aquello relacionado con la programación. Así como actualmente hay formas distintas de introducir a los niños a la natación para hacer de ésta un aprendizaje placentero, existen hoy estrategias didácticas, metodologías y herramientas que hacen a la programación más cercana a todos los públicos. Iniciativas como Code.org, La Hora del Código y a nivel local las iniciativas de eduteka, entre otros, buscan hacer masiva la enseñanza-aprendizaje de conceptos de programación a través de su temprana introducción en la educación.

¿Cuándo aprendí a programar?

Formalmente, el primer curso de programación lo tomé en la Universidad del Valle, cuando estaba en primer semestre de Ingeniería de Sistemas. Unos semestres más adelante, cuando estudiaba los conceptos de los lenguajes de programación me di cuenta de que, en realidad, había aprendido a programar mientras aprendía a leer, escribir, sumar y restar. ¿Cómo es esto posible? Bueno, estaba en primero de primaria, en el colegio de las Bethlemitas en Pasto, cuando llegaron los primeros computadores y se introdujo el curso de informática.

Aquí, como en los flashbacks de las películas, retrocedemos a 1988. Tenía cinco años y al ver un computador por primera vez quedé maravillada. Estábamos estrenando la sala de sistemas que olía a nuevo y tenía unas 20 máquinas con unas pantallas con letras verdes. En la primera clase de sistemas estaba, junto con mis compañeras, observando todo con mucha curiosidad cuando de repente el com- putador nos habló. El profesor que estaba usando un programa que convierte texto a voz nos animó a hacerle preguntas a nuestro nuevo amigo, quien a su vez nos contestaba con una voz robótica. Minutos después, el profesor nos explicó que en realidad el computador no es autónomo y que estaba “diciendo” las respuestas que el profesor tecleaba, porque “los computadores hacen lo que uno les dice”. Esta situación podría haber sido causa de desilusión, pero en cambio,  yo quedé maravillada porque entendí que YO también podía darle órdenes al computador y entonces sentí que ¡el poder estaba en mis manos! (¿o en mi cabeza?).

Tuve la fortuna de tomar mis primeros cursos de informática cuando ni Windows ni Office estaban a mi alcance, así que empecé a familiarizarme con comandos de DOS y aprendí a dibujar con LOGO. Desde el punto de vista de una niña de primaria, las clases de sistemas consistían en ir a la sala a dibujar en el computador dando instrucciones a un triángulo que se llamaba tortuga. De esta forma, y sin darme cuenta, aprendí las nociones de algoritmo (secuencias de instrucciones), variables (para guardar valores), funciones (para no tener que escribir las mismas ins- trucciones una y otra vez), parámetros (para hacer figuras de distintos tamaños) e incluso de diseño y estrategias de solución de problemas (primero dibujamos en papel lo que queremos que la tortuga dibujara y luego escribimos las instrucciones de cada pedacito del dibujo).

Hoy en día, como ingeniera de sistemas y profesora valoro esos aprendi- zajes. Todavía me siento a hacer dibujos, que ahora se llaman modelos, y a pensar en los pasos necesarios para solucionar el problema antes de sentarme a programar, es decir, a diseñar algoritmos. En mi labor de profesora busco crear experiencias que permitan anclar los aprendizajes. Es por eso que el lápiz y el papel están de primeros en el material de la clase, usamos cartas para practicar los algoritmos de ordenamiento y cajas de cartón para representar los nodos de las estructuras de datos. Cada vez que en una práctica alguien suelta frases como: “eso no quiere funcionar”, “no entiendo por qué hace eso”, procuro retransmitir la lec- ción que aprendí en mis primeras clases de informática: los programas no funcionan por arte de magia, el computador no es autónomo, los computadores hacen lo que uno les dice. Aquí también me gusta recurrir a las historias fantásticas que tanto me gustan, a esa escena de Harry Potter y la piedra filosofal cuando Hagrid le dice a Harry: “eres un mago”. Bueno, me gusta mucho repetirles a mis estudiantes de primer semestre que nosotros somos los magos, porque quien programa es quien tiene el poder de hacer funcionar las cosas.

La programación a nivel competitivo

La programación tiene distintas facetas, hace parte del quehacer de distintos profesionales que se dedican a crear soluciones en forma de programas (e.g., ingenieros de software, telemáticos, electrónicos, dise- ñadores de medios, entre otros). También es una asignatura básica de la formación de la mayoría de los ingenieros y de otros profesionales a quienes se les introducen las nociones de programación con el objetivo de desarrollar habilidades relacionadas con la abstracción y solución de problemas. A mí me gusta más la visión de Donald Knuth, científico de la computación y ganador del premio ACM Turing (que puede ser considerado el premio nobel de las ciencias de la computación), quien considera la programación como un arte, porque permite aplicar co- nocimiento sobre el mundo, porque requiere habilidad e ingenuidad y especialmente porque produce objetos de belleza: los programas. En su ensayo de 1974 titulado La programación como un arte, Knuth nos recuerda que la palabra arte viene de ars en latín, que significa habilidad, y que un programador que se ve a sí mismo como un artista; disfruta lo que hace y por tanto se desempeña mejor en su trabajo.

Las competencias de programación permiten y promueven este disfrute artístico. Los competidores están dispuestos a ir más allá en su apren- dizaje, a desarrollar nuevas habilidades y aprender técnicas distintas a las que se ven en los programas de sus cursos de algoritmos.

Las competencias de programación son desafiantes. Consisten en re- solver, en el menor tiempo posible, un cuestionario escrito en inglés con al menos diez problemas de programación que requieren poner en práctica conocimiento en temas de matemáticas, geometría y ciencias de la computación, entre otros. Por tanto, los participantes necesitan mucho entrenamiento para tener buenos resultados.

Hay cosas en la vida que nos producen pequeños placeres, momentos en los que nos sentimos bien y que nos liberan momentáneamente de las preocupaciones cotidianas. Las personas que programan tienen uno de esos momentos cuando ejecutan un programa y este pasa todas las pruebas. Ser el autor de un programa que hace lo que se espera es una victoria que empodera. Ahora bien, programar una solución correcta en una competencia es un cóctel de emociones que tiene como ingredientes adicionales 1.) la satisfacción de haber sido capaz de identificar el tipo de problema y conocer las técnicas para solucionarlo, y 2.) la certeza de saberse victorioso en un contexto en donde los problemas a resolver son realmente difíciles. Todo catalizado con la adrenalina de la competencia.

Las competencias de programación se llaman también maratones porque son jornadas extenuantes que desafían física y mentalmente al competi- dor. Por ejemplo, la competencia interuniversitaria de la Association for Computing Machinery (ACM) –una de las competencias más importan- tes– empieza a las 8:30 a.m., cuando los competidores y su entrenador se registran y se alistan para el calentamiento. Este calentamiento tiene un aire festivo, en la misma sala están reunidos los estudiantes y profesores que tienen distintos roles en la jornada: competidores, entrenadores, jueces y organizadores. En el calentamiento hay dos o tres problemas sencillos que sirven para probar el entorno de la competencia. Por tanto, nadie compite como tal, es un ambiente relajado y propicio para dar consejos de último momento y asegurarse de que todo esté bien para la tarde. Cerca de las 11:00 a.m. los competidores salen a comer algo, ir al baño y organizarse, porque posteriormente les espera la competencia oficial con una duración de cinco horas.

Durante la competencia oficial los participantes quedan totalmente aislados, no tienen acceso a internet, teléfonos celulares o cualquier dispositivo electrónico. Tampoco se les permite hablar con otros equi- pos, jueces ni entrenadores, incluso deben ir acompañados al baño. ¿Y entonces con quiénes interactúan, a quiénes les hacen preguntas, cómo saben los resultados de la competencia? La respuesta es: el único intermediario capaz de determinar de forma imparcial si una solución puede resolver cientos de instancias de un mismo problema, cumpliendo los límites de tiempo, identificando el tipo de error –si lo hay– y de asignar un puntaje, considerando el orden de llegada de la solución, es... ¿ya adivinaron de quién se trata? Sí, de un programa.

Se llama Juez en Línea y es asistido por un conjunto de jueces-humanos que validan sus veredictos. Y a pesar de los muchos beneficios de usar un programa como juez, las desventajas están en la retroalimentación que reciben los competidores y que se resumen en una de estas cinco opciones: fuera del límite de tiempo, error en tiempo de ejecución, error de compilación, error en la presentación y el muy deseado: aceptado. En estas condiciones las victorias son escasas.

En los últimos años, la mayoría de los 40 equipos que clasifican a la competencia latinoamericana de programación resuelve uno o dos pro- blemas. Hay países latinoamericanos que nunca han participado en una competencia mundial. Y Colombia, en contadas ocasiones, ha sido representada por equipos provenientes de universidades fuera de Bogotá. Hasta la fecha, sólo un equipo caleño ha representado al país en una competencia mundial. Así que, si los equipos de Icesi querían buenos resultados, la única opción viable era entrenar, entrenar mucho.

El club de programación de la Universidad Icesi

El club de programación nació como una respuesta a la necesidad de ofrecer un espacio de entrenamiento para los estudiantes que quisieran representar a Icesi en las competencias interuniversitarias de programación. Sin experiencia y sin conocimiento de la dinámica de las competencias, arranqué como entrenadora a finales del 2011. Al principio los entrenamientos tenían como objetivo fortalecer las bases de ciencias de la computación de los competidores. De esa forma cometí ese error común del ejercicio docente: darle más valor a la acumulación de conocimiento que a la aplicación de lo aprendido. Logramos conformar tres equipos para la maratón nacional de programación y unas semanas antes de la competencia empezamos a entrenar. Todavía recuerdo esas primeras reuniones en las que no sabía qué temas discutir o estudiar. Entonces empecé a documentarme.

Durante las primeras sesiones discutimos temas y asignamos ejercicios, como si estuviéramos en clase, pasando por alto que en la competencia hay otras habilidades que también son necesarias. En consecuencia, los resultados no fueron los mejores y la mayoría de estudiantes quedaron desmotivados. Los entrenamientos continuaron con el único equipo que clasificó a la competencia latinoamericana –sí, hubo clasificados, así de buenos son estos muchachos– y un par de curiosos que querían saber cómo lo habían logrado. Y en este escenario, la profe también quería aprender, el equipo clasificado había participado en otras competencias y, por tanto, contaba con más experiencia que yo. Entonces hicimos un cambio en la dinámica y el tablero pasó a manos de quien pudiera explicar la estrategia para obtener la solución. Sin la presión de la competencia, los encuentros se convirtieron en espacios para compartir aprendizajes, y mi papel pasó de ser entrenadora a aprendiz y promotora de espacios de entrenamiento.

El siguiente año nos dimos cuenta de que las sesiones de entrenamiento (una tarde de sábado cada tres semanas) no era suficiente. Para mejorar el desempeño en las competencias era necesario encontrarnos semanal- mente. Y así surgió El Club de Programación, ese fue el primer nombre que se me ocurrió para hacer la reserva de la sala de cómputo y que, poco a poco, nos dio identidad ante los demás estudiantes y profesores del departamento de TIC.

El siguiente paso fue empezar a colaborar con la Red de Programación Competitiva, una asociación latinoamericana de estudiantes, profesores y profesionales entusiastas de las maratones de programación. Con ellos aprendimos que además de competidores, podemos ser autores de nuestras propias maratones. Nos sumergimos en las competencias de programación aprendiendo a proponer y solucionar problemas, configurar y ser jueces en las competencias.

Para finales del 2013 construimos nuestro primer conjunto de problemas en lo que llamamos La Maratón de Programación de los Cursos de Algoritmos. De esta forma, los aprendizajes de El Club de Programación empezaron a permear las clases, porque a partir de este momento las maratones se integraron a las actividades de los cursos con el apoyo de los profesores del bloque de algoritmos. Ahora el club organiza una maratón semestralmente y estas competencias han crecido al punto en que tenemos tres distintas categorías y en el primer semestre de 2019 organizamos la primera competencia interuniversitaria en Cali, además de dos campamentos de programación con talleristas internacionales y participantes de distintas universidades del suroccidente de Colombia.

Hemos crecido mucho en estos años, a nivel personal y profesional. También hemos conseguido mejores resultados en las competencias de programación. Anualmente tenemos equipos clasificados en la maratón latinoamericana y en las últimas maratones nacionales (2018-2019) hemos clasificamos entre cuatro y seis equipos de los cuales dos de ellos se han destacado en el puesto 10 y 6 de los alrededor de 120 participantes.

Personalmente, aún me considero aprendiz de programación. Algunos de mis colegas insisten que eso es algo que se me pasará a medida que me vaya ocupando en otras cosas (cuando sea más grande, no en vano los profesores de programación son los más jóvenes). Pienso que es poco probable, porque siento que hay muchas cosas que me faltan por aprender y cada día habrá más y más. Así que desde El Club de Programación seguiremos compartiendo y entrenando. En el camino hemos aprendido que no existen recetas o fórmulas mágicas para aprender a programar y llegar a ser un buen programador. No hay secretos, sólo hay que estar dispuesto a imaginar o buscar nuevas alternativas hasta solucionar el problema o como dice el logo de la Red de Programación Competitiva:

while (true) {

keepTraining();

}

Esta historia empezó en singular, pero termina en plural porque la historia del club surgió como una tarea asignada a una persona, pero se convirtió en una iniciativa de comunidad. Con el pasar de los años nos hicimos fuertes porque aprendimos que a través de la comunidad y las relaciones personales podemos construir experiencias, desarrollar habilidades, adquirir conocimiento, crear alianzas y redes de colaboración. Es precisamente esta identidad de grupo la que permite darle continuidad al Club de Programación a pesar de que las personas salgamos de la universidad a continuar con nuestros proyectos de vida. Por tanto, para terminar este texto quiero agradecer a todos los maravillosos estudiantes y colegas que son protagonistas de esta historia. En particular a todas aquellas personas cuyos rostros aparecían en mi mente mientras estaba escribiendo: Héctor Tobón, David Durán, Orlando Argüello, Johnny Ocampo, Miguel Jiménez, Checho Figueroa, Diego Arango, Camilo Barrios, Camilo Ortegón, Cristian Amú, Vicky Yuan, Juan Prada, Andrés Villegas, Juanes López, Felipe Clement, Camilo Muñoz, Julio Arboleda, Steven Varela, Hugo Morales. Quiero agradecer también y de manera especial a Álvaro Pachón, por su apoyo incondicional en esta travesía; a Juan Manuel Reyes, quien ha sido la cabeza del club durante mi doctorado, y a Fabio Avellaneda, compañero fundador la Red de Programación Competitiva.

 Libro completo:  Las Profes. Ellas enseñan, ellas relatan

Más informes: 

Ángela Patricia Villota Gómez Profesora del Departamento de Tecnologías de Información y Comunicaciones, Facultad de Ingeniería. Esta dirección de correo electrónico está protegida contra spambots. Necesita activar JavaScript para visualizarla.