16 de diciembre de 2010

Primera capacitación para profesores en la enseñanza del lenguaje Python

Del 13 al 15 de diciembre del 2010 tuvimos la oportunidad de impartir el CADi (Curso de actualización en las disciplinas) titulado Enseñando a programar con Python en las instalaciones del Tecnológico de Monterrey, Campus Estado de México. A éste asistieron casi una veintena de profesores de varios campus del Tecnológico de Monterrey, incluyendo Ciudad de México, Estado de México, Santa Fe, Toluca, Querétaro y Laguna. La profesora Ma. Elena Melón Jareda, el profesor Roberto Martínez Román y yo fuimos los instructores del curso.


Todo el grupo: instructores y participantes del curso.

Los objetivos del curso fueron los siguientes:
  • Introducir el lenguaje de programación Python, con una orientación hacia la resolución de problemas en las áreas de ingeniería, ciencias y medios digitales.
  • Presentar diversos enfoques de enseñanza aplicables a las materias de Fundamentos de programación y Solución de problemas con programación de los planes de estudio 2011 de las carreras profesionales del Tecnológico de Monterrey.
En total hubo seis sesiones: una sesión matutina y otra vespertina en cada uno de los tres días que duró el curso. Las sesiones matutinas estuvieron a mi cargo, y las utilicé para exponer los fundamentos del lenguaje Python (sintaxis, semántica y API básico), así como para dar lugar a que los participantes resolvieran ejercicios de algoritmos numéricos y de elaboración de dibujos con gráficas de tortuga. También pude cubrir una introducción a matplotlib para hacer gráficas científicas en 2D.

Ejercicios con gráficas de tortuga.

En las sesiones vespertinas se mostró como utilizar las siguientes herramientas/tecnologías:
  • El framework Myro para programar los robots Scribbler.
  • JES (Jython Environment for Students) para el procesamiento de imágenes.
  • El módulo PyGame para elaborar programas gráficos interactivos.
La sesión de robots estuvo a cargo del profesor Martínez, mientras que JES y PyGame fueron presentados por la profesora Melón.

Profesores programando al robot Scribbler.

Para concluir el curso, abrimos un espacio para que los participantes pudieran comentar respecto al material cubierto y también para conocer sus opiniones sobre el uso de Python en una primera materia de programación a nivel licenciatura. La mayoría de los profesores se expresaron de manera muy favorable respecto al CADi en sí. Algunos manifestaron que Python les pareció un buen lenguaje introductorio para las carreras que no son de computación, pero que tienen aún algunas reservas sobre si es conveniente usarlo como primer lenguaje en las carreras de las TIEs (Tecnologías de Información y Electrónica). Como lenguajes alternativos a Python, algunos profesores sugirieron considerar Processing (específicamente para las carreras de LAD y LCD), JavaFX y Groovy. Sin embargo, de JavaFX se señaló también que su futuro quedó un tanto incierto a partir de que Sun Microsystems fue adquirido por Oracle.

Personalmente disfruté mucho la oportunidad de poder impartir el curso a mis colegas del Tec. Es muy estimulante convivir con un grupo de académicos tan talentoso y comprometido con su labor docente. Sin embargo me queda claro que aún necesitamos hacer más labor de convencimiento si queremos que nuestra propuesta de usar Python prospere. Espero que tengamos la oportunidad de replicar el curso en Monterrey en los próximos meses y así poder llegar a más profesores del sistema.

El material que se utilizó para el curso está disponible en el siguiente URL: Enseñando a programar con Python.

20 de noviembre de 2010

Proyecto Euler

Al estar aprendiendo un nuevo lenguaje de programación resulta útil tener disponible una colección de ejercicios con que practicar. Project Euler es un sitio Web (en idioma inglés) que sirve justamente para este propósito.

Leonhard Paul Euler (1707-1783),
matemático y físico suizo.
Los problemas que aquí se encuentran (más de 300 al momento de estar escribiendo esto) son de naturaleza matemática, pero requieren de una computadora y de cierta destreza de programación para poderlos resolver correctamente. Para utilizar el sitio de manera efectiva es necesario registrarse (el registro no tiene costo). Los usuarios registrados pueden verificar si se han obtenido las soluciones correctas.

Los primeros problemas son los más sencillos, pero el nivel de dificultad aumenta conforme se va avanzando. Las personas a las que les gustan las matemáticas y los problemas de ingenio seguramente se toparán con retos muy interesantes.

El lenguaje Python resulta bastante adecuado para resolver muchos de los problemas presentados en Project Euler. Por ejemplo, el primer problema consiste en encontrar la suma de todos los números menores a 1,000 que sean múltiplos de 3 o 5. El siguiente programa en Python 3.1 encuentra la solución de este problema:
suma = 0
for i in range(1000):
    if i % 3 == 0 or i % 5 == 0:
        suma += i
print(suma)
Al correr el código se imprime la respuesta correcta: 233,168.

Para los amantes del código compacto, el mismo programa se puede escribir en una sola línea de código valiéndonos de la función predefinida sum y una list comprehension que genera la lista de los números que requerimos:
print(sum([i for i in range(1000) if i%3==0 or i%5==0]))
En una próxima entrada de este blog presentaré otro sitio, llamado Sphere Online Judge, que también es un excelente recurso para desarrollar la capacidad de resolver problemas, pero en un ámbito que va más allá de las matemáticas.

18 de agosto de 2010

El circo volador

Las representaciones artísticas asociadas al lenguaje Python (por ejemplo las portadas de libros y los logotipo de sitios web como es el caso de este blog) muy a menudo hacen alusión a la serpiente constrictora originaria de Asia y África.


Sin embargo, el nombre del lenguaje Python realmente proviene de otro lado. Guido van Rossum, reconocido computólogo holandés y autor del lenguaje, decidió nombrarlo así en honor de "Monty Python's Flying Circus", un programa cómico de la televisión inglesa producido por la BBC durante la década de los años setenta1. Esto refleja de algún modo la naturaleza divertida y juguetona que tiene el lenguaje.


Mi impresión es que Monty Python es poco conocido en México. No tengo idea si es más popular en otros países de habla hispana. Sin embargo, sí se nota la influencia de esta serie de televisión entre los geeks de habla inglesa. Por ejemplo, el término spam que usamos hoy en día para referirnos al correo electrónico no solicitado tiene su origen en un sketch de Monty Python. En este sketch una viejecita llega acompañada de su pareja a un changarro de comida repleto de vikingos y le pregunta a la mesera sobre el menú. La mesera le menciona todos los platillos disponibles, los cuales invariablemente incluyen spam (jamón de cerdo enlatado, elaborado por Hormel Foods), pero a la viejecita no le gusta el spam. Sugiero ver el video en YouTube si el lector desea conocer el desenlace de esta historia.


Guido menciona en el tutorial de Python que hacer alusiones a los sketches de Monty Python en la documentación no es tan solo permitido, sino que se exhorta a hacerlo2. He aquí algunos lugares en donde se hace una clara referencia a Monty Python:
  • En lugar de usar las clásicas variables metasintácticas foo y bar, en los programas de ejemplo de la documentación de Python se usa spam y eggs.
  • IDLE es el ambiente de desarrollo integrado (IDE por sus siglas en inglés) que viene con la distribución más popular de Python. El nombre es en honor de Eric Idle, uno de los miembros originales del elenco de Monty Python.
  • Bicycle Repair Man es una herramienta que simplifica la refactorización de código escrito en lenguaje Python. El nombre es en honor a un super héroe cuyo super poder consiste en saber cómo reparar bicicletas. Este sketch también está disponible en YouTube.
El humor de Monty Python es muy inglés y muy particular de los años setenta. En algunas ocasiones llegó a ser muy irreverente e incluso generó bastante controversia dentro de algunos círculos religiosos, específicamente por las películas Monty Python and the Holy Grail (1975) y Life of Brian (1979).

Alguna gente llega a preguntar: ¿me tiene que gustar "Monty Python's Flying Circus" para aprender a programar en Python? Por supuesto que no, pero puede ser que ayude. Además, nadie espera a la Inquisición española.


Referencias

1 General Python FAQ: Why is it called Python?
2 The Python Tutorial: Whetting Your Appetite

14 de agosto de 2010

Aprendizaje activo

El aprendizaje activo es una técnica en donde los estudiantes hacen más que sólo escuchar la clase que dicta el maestro. El énfasis principal es el desarrollo de habilidades, mientras que la simple transmisión de información pasa a segundo plano. Los alumnos logran un razonamiento de orden mayor (por ejemplo: análisis, síntesis y evaluación), entablan actividades entretenidas (por ejemplo: discusiones y resolución de problemas) y reflexionan sobre sus actitudes y valores.

En el Tec de Monterrey llevamos bastante tiempo incorporando el aprendizaje activo a nuestros cursos mediante la aplicación de diversas técnicas didácticas (por ejemplo: aprendizaje colaborativo, aprendizaje basado en problemas, aprendizaje orientado a proyectos). Sin embargo nunca está de más conocer algunas nuevas actividades que fomenten el aprendizaje activo dentro del salón de clases. Una buena fuente de inspiración para actividades relacionadas a las clases de computación es CS-Unplugged. Aunque dicho material está diseñado para niños de primaria, yo he visto que resulta muy interesante y entretenido incluso también para personas de edad adulta. Los temas cubiertos ahí incluyen cosas como números binarios, representación de imágenes, compresión de textos, algoritmos de búsqueda, autómatas de estado finito, y protocolos de criptografía. El sitio de CS-Unplugged está en inglés, pero ahí mismo hay un PDF en idioma español, el cual incluye la descripción completa de la mayoría de las actividades.

Durante la segunda clase de mi grupo de Fundamentos de programación realicé la actividad 12 de CS-Unplugged titulada "Siguiendo Instrucciones — Lenguajes de Programación". El resumen de esta actividad es el siguiente:
Las computadoras generalmente se programan usando un "lenguaje", que es un vocabulario limitado de instrucciones que pueden obedecer. Una de las cosas más frustrantes de la programación es que las computadoras siempre obedecen las instrucciones al pie de la letra, aunque produzcan resultados absurdos. Esta actividad proporciona a los niños cierta experiencia con este aspecto de la programación.
A una alumna voluntaria le pedí que describiera oralmente la siguiente imagen a sus demás compañeros (quienes no la habían visto previamente) con el fin de que cada quien la reprodujera por su cuenta.

Se permitió que los demás hicieran preguntas para clarificar las instrucciones. El propósito era ver qué tan rápido y preciso se podía realizar el ejercicio. La siguiente imagen muestra cómo quedó el dibujo de un alumno:


Posteriormente se repitió el ejercicio tres veces más, pero en estas tres ocasiones no se permitió hacer preguntas al responsable de describir las imágenes.


Estos fueron algunos resultados:


Al finalizar los ejercicios le hice notar al grupo que esta forma de comunicación es la más parecida a la que experimentan los programadores cuando escriben sus programas. Dan una serie de instrucciones a la computadora y no saben qué efecto tendrán sino hasta después. Independientemente de qué lenguaje se esté utilizando, un programador debe ser suficientemente hábil para especificar exactamente lo que quieren que haga la computadora. A diferencia de los humanos, una computadora sigue las instrucciones de manera literal, incluso si éstas no tienen mucho sentido.

11 de agosto de 2010

Iniciando un nuevo semestre

El lunes pasado comenzamos el semestre correspondiente al periodo agosto-diciembre 2010. Algo que vale la pena comentar aquí es que estaré enseñando el curso de Fundamentos de programación para los alumnos de primer semestre de la licenciatura en arte y animación digital (LAD).


Junto con la profesora Ma. Elena Melón Jareda, quien tiene este semestre el otro grupo de Fundamentos de LAD, estaremos enseñando el lenguaje de programación Python usando el enfoque de media computation basándonos en el libro de texto titulado "Introduction to Computing and Programming in Python: A Multimedia Approach" escrito por Mark Guzdial y Barbara Ericson.


El enfoque de media computation busca enseñar computación a través de la manipulación y generación de medios digitales, tales como imágenes, sonido, video y páginas web. Mi intención es ir documentando en este espacio las experiencias que vayamos teniendo en clase.

Esta es la primera vez que enseño a alumnos de un área artística. Esta es también la primera vez, en mis 22 años de experiencia docente, en la que tengo un grupo conformado principalmente por mujeres. Otra cosa que pude notar en la primera clase es que muchos de los chicos del grupo son bastante extrovertidos, por lo menos más de que lo estoy acostumbrado con mis alumnos de las carreras de computación. Esto me gusta, al menos por ahora. Anticipo que voy a aprender muchas cosas con este grupo, y creo que será un proceso divertido para todos.

Ligas de interés

14 de julio de 2010

Python para alumnos de educación media

El pasado miércoles 14 de julio tuvimos como parte de las actividades del CampTECh el taller Aprendiendo a programar con Scribbler impartido por la profesora Patricia Chávez. Dirigido a niños y niñas de secundaria y preparatoria, el CampTECh busca cambiar la percepción que tienen las nuevas generaciones hacia el área de las Tecnologías de Información mediante actividades interesantes y divertidas.

La siguiente imagen muestra un robot Scribbler:


Este pequeño robot cuenta con dos motores independientes, una bocina, tres leds, tres tipos distintos de sensores, un puerto para comunicación serial y un orificio para colocar un plumón y así poder pintar sobre el piso. En el puerto serial se le inserta un tarjeta Fluke la cual permite la comunicación vía Bluetooth. Esta misma tarjeta cuenta además con una cámara fotográfica, sensores adicionales y un indicador de batería baja.

Hay varias formas de programar el Scribbler, pero en el CEM hemos optado por usar el software y material didáctico desarrollado por el Institute for Personal Robots in Education (IPRE). Este instituto desarrolló el framework Myro (My Robot) el cual permite programar el robot utilizando el lenguaje de programación Python.

El taller impartido en el CampTECh tuvo una duración de dos horas aproximadamente. Los 55 participantes (ninguno con experiencia previa usando Python) se dividieron en 13 equipos de cuatro o cinco integrantes cada uno. A cada equipo se le prestó un robot Scribbler con su tarjeta Fluke correspondiente y una laptop con un adaptador Bluetooth USB. A los participantes primero se les instruyó en los conceptos necesarios para poder hacer que el robot tocara tonos musicales, se moviera hacia adelante y girara. También se les enseñó a definir funciones sencillas y hacer repeticiones usando la instrucción for. Como actividad por cuenta propia, cada equipo tuvo que programar a su robot para que dibujara una estrella.

La siguiente foto muestra la solución de un equipo compuesto exclusivamente por niños de secundaria:



Dicho equipo escribió primero una función para dibujar un triángulo:
def triangulo(robot):
    for i in range(3):
        robot.forward(1, 1)
        robot.turnLeft(1, 2.25)
Luego ejecutaron la función una vez, rotaron su pliego de papel, y volvieron a ejecutar la función para obtener una estrella de David. No está nada mal para un grupo de principiantes tan jóvenes.

Un equipo de chicos de preparatoria logró programar una estrella mucho más elaborada (algunos miembros de este equipo ya tenían experiencia programando en otros lenguajes):


La parte final de la actividad consistía en que cada equipo disfrazara a su robot. Así es como terminaron los 13 robots:


El resultado del taller fue definitivamente muy gratificante tanto para los participantes como para los que pudimos facilitar la experiencia.

Para estudiantes entre 12 y 17 años de edad, la introducción a la programación resulta más sencilla usando herramientas como Alice o Scratch. De hecho, el día anterior la profesora Ma. de los Angeles Junco impartió un taller de Alice a estos mismo chicos también como parte del CampTECh. Sin embargo, el poder programar robots usando Python les brinda la oportunidad de conocer un lenguaje de programación de verdad en un dominio que les resulta muy estimulante. Todo esto se logra cubrir en poco tiempo gracias a que no se requiere inundar a los alumnos con un montón de nimiedades sintácticas tal como ocurriría se tuviéramos que usar otros lenguajes.

12 de julio de 2010

¿Qué sigue después de Python?

Una pregunta que normalmente surge con la propuesta de usar Python como primer lenguaje de programación es la siguiente: ¿qué sigue después? Específicamente, ¿se debe seguir usando Python en cursos de programación posteriores, o se debe migrar a otro lenguaje? A mi me parece que ambas son alternativas viables, pero voy a elaborar a continuación mi punto de vista en el contexto de los planes de estudio 2011 del Tec de Monterrey.

Tal como comenté en mi entrada anterior, existen dos versiones del curso de introducción a la programación: una para las carreras del área de las Tecnologías de Información y Electrónica (TIEs) y otra para el resto de las carreras de ingeniería. De hecho, en lo que a programación se refiere, hay que considerar dos líneas de materias, tal como lo muestra la siguiente figura:

La propuesta concreta que se ha manejado hasta el momento es usar Python tanto en el curso de Fundamentos de programación como en el de Solución de problemas con programación.

El curso de Métodos numéricos podría beneficiarse también de utilizar Python por las siguientes razones: 1) los alumnos no tendrían que aprender un lenguaje nuevo, 2) Python tiene varias características que lo hacen más amigable hacia el cómputo numérico que lenguajes como C/C++ o Java. Los referencias [1, 2] son libros de texto que tienen un enfoque hacia los métodos numéricos y la programación científica.

En lo que respecta a las materias de Programación orientada a objetos y Estructura de datos, soy de la idea de que se debe utilizar un solo lenguaje para ambos cursos y que sí conviene moverse en este etapa a un lenguaje más convencional/comercial. Habiendo dicho lo anterior, veo tres candidatos potenciales: Java, C++ o C#. Sin embargo, considerando que los alumnos de las TIEs requieren en cursos posteriores escribir programas que interaccionan directamente con la plataforma anfitriona (hardware y/o sistema operativo), podría resultar más conveniente cubrir el lenguaje C++ en estas dos materias.

Personalmente, C++ no es de mis lenguajes favoritos, sin embargo me parece que resultaría en un buen complemento de Python para nuestros alumnos. Por un lado, Python es un lenguaje normalmente interpretado (de ejecución lenta), con tipos dinámicos y administración automática de memoria. Por otro lado, C++ es un lenguaje típicamente compilado (de ejecución rápida), de tipos estáticos con declaraciones explícitas y generalmente con administración manual de memoria. Tienen en común que son lenguajes orientados a objetos basados en clases, pero también soportan de manera muy natural el estilo de programación procedural. Python y C++ comparten estructuras de control (condiciones, ciclos y excepciones) muy parecidas, lo mismo que los operadores aritméticos, lógicos y relacionales. En términos generales, la lógica de programación que desarrollan nuestros alumnos con Python es básicamente la misma que requieren para usar adecuadamente C++.

En resumidas cuentas, me parece que Python y C++ tienen suficientes elementos en común como para facilitar el proceso de migración del primero hacia el segundo, pero también tienen suficientes diferencias como para resultar en una experiencia de aprendizaje muy enriquecedora en el área de la ciencia de la computación.

Por último, los alumnos de la carrera de Ingeniero en Sistemas/Tecnologías Computacionales (a la cual usualmente me refiero usando la expresión regular /I[ST]C/) tendrán otras materias en las que podrán aprender y practicar Java y C#. Me vienen a la mente las siguientes: Desarrollo de aplicaciones web, Diseño y arquitectura de software, y tres proyectos integradores. Si nuestros alumnos conocen Python y C++, aprender Java y C# no les será muy complicado.


Referencias

[1] Kiusalaas, J. Numerical Methods in Engineering with Python, 2nd ed. Cambridge University Press, 2010.
[2] Langtangen, H. P. A Primer on Scientific Programming with Python. Springer, 2009.

9 de julio de 2010

El nombre del primer curso de programación

El primer curso de programación ha tenido varios nombres desde que se ofrece en el Tecnológico de Monterrey. Algunos de los nombres que recuerdo desde los años ochenta son: Computación electrónica I, Computación I y más recientemente Fundamentos de programación. Con el diseño de los planes 2011 surgió la inquietud sobre el nombre que debía tener ahora esta materia. Este es el tema de esta entrada del blog, pero debo iniciar presentando algo de contexto.

Los planes 2011 reconocen la relevancia que juega la programación no sólo en el área de Tecnologías de Información y Electrónica (TIEs) sino en todas las demás carreras de ingeniería. Como resultado de esto, las siguientes 27 carreras del Tec incorporan una materia de introducción a la programación:

Carrera en el área de Ciencias de la Salud
  • Ingeniero Biomédico (IMD)

Carreras en el área de Humanidades y Ciencias Sociales
  • Licenciado en Animación y Arte Digital (LAD)
  • Licenciado en Comunicación y Medios Digitales (LCMD)

Carreras en el área de Ingeniería y Arquitectura
  • Ingeniero Agrónomo (IA)
  • Ingeniero en Agrobiotecnología (IAB)
  • Ingeniero en Biotecnología (IBT)
  • Ingeniero Civil (IC)
  • Ingeniero en Diseño Automotriz (IDA)
  • Ingeniero en Desarrollo Sustentable (IDS)
  • Ingeniero Físico Industrial (IFI)
  • Ingeniero en Industrias Alimentarias (IIA)
  • Ingeniero Industrial y de Sistemas (IIS)
  • Ingeniero Mecánico Administrador (IMA)
  • Ingeniero Mecánico Electricista (IME)
  • Ingeniero en Producción Musical Digital (IMI)
  • Ingeniero en Mecatrónica (IMT)
  • Ingeniero Químico Administrador (IQA)
  • Ingeniero Químico y de Sistemas (IQS)
  • Licenciado en Ciencias Químicas (LCQ)

Carreras en el área de Tecnologías de Información y Electrónica
  • Ingeniero en Negocios y Tecnologías de Información (INT)
  • Ingeniero en Sistemas Computacionales (ISC)
  • Ingeniero en Sistemas Digitales y Robótica (ISD)
  • Ingeniero en Tecnologías Computacionales (ITC)
  • Ingeniero en Tecnologías Electrónicas (ITE)
  • Ingeniero en Tecnologías de Información y Comunicaciones (ITIC)
  • Ingeniero en Telecomunicaciones y Microelectrónica (ITM)
  • Ingeniero en Telecomunicaciones y Sistemas Electrónicos (ITS)
En algún momento se decidió que debían haber dos versiones de la materia de introducción a la programación: una para las carreras de las TIEs y otra para las demás ingenierías. No estoy seguro donde quedan los LADs y los LCMDs, pero supongo que estarían junto con las TIEs.

El 17 de junio pasado nos llegó por correo electrónico una encuesta a varios profesores del sistema de parte del comité de carrera ITC. La encuesta iniciaba con el siguiente mensaje:
El nombre actual del primer curso de programación registrado en Vicerrectoría para el plan 2011 es "Programación". Con el propósito de definir un nombre más atractivo, y tal vez más innovador, estamos creando esta encuesta.
Y luego venía una lista con los siguientes nombres propuestos, a los cuales había que calificar con un número del 1 al 5, en donde 1 significa "es adecuado" y 5 significa "no es adecuado":
  • Solución de Problemas con Programación
  • Metodología de Programación
  • Metodología y Solución de Problemas con Programación
  • Pensamiento Algorítmico y Solución de Problemas utilizando Metodología de Programación
  • Programación para la Solución de Problemas
  • Programación como Herramienta para la Solución de Problemas
  • Pensamiento Algorítmico para la Solución de Problemas
  • Solución Creativa de Problemas con Programación
  • Metodología y Solución Creativa con Programación
  • Solución Eficiente de Problemas con Programación
  • Programación para la solución Creativa de problemas
  • Pensamiento Algorítmico para la Solución Creativa de Problemas
  • Fundamentos de Programación
  • Principios de Programación
  • Introducción a la Programación
  • Explorando la Programación
La encuesta incluía también un espacio para sugerir un nombre distinto a los explícitamente listados. De hecho, los profesores del departamento de computación del CEM nos pusimos de acuerdo para votar por otro nombre que nos sugirió la profesora Ma. de los Ángeles Junco: Soluciones Creativas con Programación. Intencionalmente quisimos eliminar la palabra "problemas" del nombre ya que nos sonaba potencialmente intimidante para alguien que casualmente leyera la tira de materias de alguna de nuestras carreras.

El 18 de junio nos llegó una nueva encuesta para realizar una segunda vuelta de votaciones considerando solamente los seis nombres más votados en la primera ronda:
  • Solución de Problemas con Programación
  • Programación para la Solución de Problemas
  • Soluciones Creativas con Programación
  • Fundamentos de Programación
  • Principios de Programación
  • Introducción a la Programación
La lista anterior aparecía dos veces: una vez para el nombre de la materia de las TIEs y otra para el nombre para las demás ingenierías.

Ese mismo día por la tarde nos dieron a conocer los resultados finales. El nombre más votado para el primer curso de programación de las TIEs fue:
Fundamentos de programación
Para las demás ingenierías, el nombre más votado fue:
Solución de problemas con programación
Personalmente no me desagradan estos nombres, sin embargo si el ejercicio buscaba "definir un nombre más atractivo, y tal vez más innovador" me parece que como academia nos vimos demasiado conservadores, sobre todo con el nombre de Fundamentos de programación, que es como actualmente se llama la materia en los planes 2009. Está difícil conservar nuestra posición de liderazgo en la educación superior de México si nuestra idea de ser innovadores consiste en dejar las cosas tal como están. Vale la pena reflexionar a este respecto.

Ya un poco tarde, seguí pensando en el nombre más adecuado para la materia y se me ocurrió el siguiente:
Cómo entrenar a tu PC
¿A poco no es atractivo e innovador? ;-)

Arte conceptual de Paul Shardlow para la películaCómo entrenar a tu dragón de DreamWorks Animation.

8 de julio de 2010

Python como primer lenguaje de programación

Hace unos días escribí un artículo algo extenso (16 páginas en total) el cual busca promover el uso de Python dentro del primer curso de programación a nivel licenciatura del Tecnológico de Monterrey. Procuro fundamentar de la mejor manera una propuesta que puede llegar a generar inicialmente cierto escepticismo y controversia.

Éste es el resumen del artículo:
El lenguaje de programación Python se ha convertido en años recientes en una herramienta muy valiosa para la enseñanza de la programación. Este documento propone utilizar dicho lenguaje en el primer curso de programación de los planes de estudio 2011 de las carreras profesionales del Tecnológico de Monterrey. Con el fin de justificar esta propuesta, se analizarán las características de Python que lo hacen una alternativa superior a otros lenguajes al momento de aprender a programar. Así mismo, se discutirán las investigaciones que se han hecho en diversas universidades sobre el uso de Python en la educación, así como las experiencias que ha tenido el Campus Estado de México en este mismo sentido.
El documento completo está disponible en formato PDF a partir de la siguiente liga:
primer_lenguaje_30_jun_2010.pdf
Invito a los lectores a que utilicen la sección de comentarios para compartir sus ideas, reflexiones, críticas y/o sugerencias respecto a la propuesta planteada.

7 de julio de 2010

print('¡Hola mundo!')

Bienvenidos al blog EduPython. Este es un espacio destinado a promover el uso del lenguaje Python para enseñar a resolver problemas.

En las universidades de México y gran parte del mundo, los maestros de los primeros cursos de programación nos hemos enfocado mucho a enseñar las idiosincrasias de lenguajes como Java o C++, pero poco a desarrollar la habilidad de resolver problemas. Esto es desafortunado, ya que los lenguajes se ponen de moda y luego unos años después son olvidados (¿alguien todavía usa o enseña Pascal?), pero la capacidad de resolución de problemas es una habilidad que sirve para toda la vida. Como educadores, debemos hacer lo que esté a nuestro alcance para remediar esta situación, y considero que usar el lenguaje Python es un paso importante en esta dirección. Y esta es la razón principal por la que me atrevo a asegurar lo anterior: Python impone una “baja carga cognitiva” en el estudiante. Esto significa que es relativamente fácil convertir a un programa las ideas necesarias para resolver un cierto problema.

Alan Kay, uno de los inventores de la programación orientada a objetos y del lenguaje Smalltalk, expuso este concepto muy claramente1:
Las cosas sencillas deben ser fáciles y las cosas difíciles deben ser posibles.
Veamos uno de los ejemplos más sencillos: el clásico programa que imprime ¡Hola mundo! en la pantalla. En Python se puede expresar en una sola línea de código:
print('¡Hola Mundo!')
En cambio en Java, el mismo programa es mucho más elaborado:
public class Hola {
   public static void main(String[] args) {
       System.out.println("¡Hola mundo!");
   }
}
Para un programa tan trivial, ¿realmente necesita un principiante saber qué es una clase, qué es un modificador de acceso público, qué es un arreglo de cadenas de caracteres, o dónde tienen que ir las llaves y los puntos y comas? Las veces que yo he tenido que enseñar Java en el primer semestre hago lo siguiente: les digo a mis alumnos que acepten este programa como “acto de fe”, y les prometo que todas las cosas se irán aclarando durante el transcurso del semestre. Y esto no es del todo cierto, ya que ni siquiera llegamos a cubrir lo que son los métodos estáticos.

La complejidad del código del lenguaje Java (o C++, C#, etc.) se puede justificar en el contexto de desarrollo de software a gran escala. Pero en programas pequeños, como los que hace un alumno que empieza a programar, tanto embrollo simplemente es contraproducente. Desde luego, los estudiantes de las carreras de TI deben conocer Java (o C++, C#, etc.) para ser competitivos en la industria, mas no necesitamos imponerles esta carga desde su primer curso. Si queremos que desarrollen la lógica para resolver problemas de programación, vale la pena considerar al menos lo que Python nos puede ofrecer.


Referencia:

1 http://en.wikiquote.org/wiki/Alan_Kay