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.
Switching to English as part of my mission (and mission of our institution) to promote the effective use of said language in addition to Spanish.
ResponderBorrarPlus I'm telling some of my colleagues that do not speak Spanish to come check this page out. Google translate or others should help them.
Ariel, I think it is key to point the "other engineering" sequence to Greg Wilson's work with Software Carpentry at http://software-carpentry.org/blog/
Greg has been looking at this problem for years and is a top notch educator and a great guy.
Cheers,
Ken
Ariel, justo leía en el blog de un reclutador en una de las grandes (no recuerdo si de MSFT u Oracle) que se quejaba de los programas de estudios que no salían de Java. Mencionaba especialmente el de Duke.
ResponderBorrarSegún él, para tener un feeling real del nivel del candidato, necesita evaluar cómo resuelven problemas con apuntadores, recursión y algunos patrones de diseño, cosa que los egresados de programas 100% java no necesariamente pueden probar (sean o no buenos candidatos).
Así las cosas me agrada que tú y el Tec estén como siempre a la vanguardia, proponiendo y diseñando a futuro. Saludos