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 comentarios:

  1. Ya tengo una copia por parte de mis colegas en Campus GDL. Vamos a estar en contacto. Supongo que recuerdas de mi?

    Has visto el sitio de Greg Wilson sobre Software Carpentry? Yo estaba trabajando con el con ese proyecto el año pasado. La idea es un curso para científicos (no de computación) que les da suficiente sobre desarrollo de software (en Python) para hacer su investigación. Aqui va la liga: http://software-carpentry.org/blog/

    Tambien tiene el un libro de intro a computación con Python si no lo conoces. Tal vez debemos ver si nos puede ayudar con el esfuerzo que necesitamos hacer para preparar dar Python en nuestro institución. Si te interesa, tengo el contacto.

    Saludos,
    Ken

    ResponderBorrar
  2. Hola nuevamente Ken. Me da gusto que estemos otra vez en contacto. No conocía el sitio de Software Carpentry, pero parece muy interesante. Sobre el libro de Wilson, sí lo he visto en algún catálogo pero no he tenido oportunidad de revisarlo, aunque espero poderlo hacer pronto. Sería genial tener a alguien como Wilson apoyando en nuestra capacitación.

    ResponderBorrar
  3. Hola Ariel:

    Lo que no estas incluyendo es tu propuesta concreta para los nuevos cursos. Para poder opinar necesitamos saber exactamente qué se propone.

    Sugieres Python para el primer curso de programación, pero ¿cuál es el temario con los ajustes necesarios para este lenguaje? (y cual sería el tipo de aplicaciones que se podrían realizar).

    Luego ¿cuál sería el tiempo necesario para realizar la trancisión entre Python y C++? y ¿este tiempo se tomaría del primer curso o del segundo?

    Y finalmente cual es el temario del curso ¿Programación Orientada a Objetos?

    Pienso que la trancisión es importante, porque como tú bien lo mencionas, los alumnos son principiantes, y aunque los lenguajes se parezcan, necesitan hacer el proceso de trancisión de manera explícita.

    Saludos,
    Yolanda

    ResponderBorrar
  4. Hola Yolanda. Muchas gracias por tu comentario. A continuación procuro responder a tus preguntas.

    Para los cursos de "Fundamentos de programación" y "Solución de problemas con programación" mi sugerencia sería añadir el tema de diccionarios (equivalente a los mapas de Java), lo cual permitiría resolver algunos tipos de problemas bastante interesantes. Habría que hacer algunos reajustes en los tiempos, pero esto no sería mucho problema gracias a que Python es más simple en muchos aspectos. Una posible distribución de los temas podría ser la siguiente:

    1. Introducción (3 hrs)
    2. Conceptos básicos de programación (6 hrs)
    3. Funciones (6 hrs)
    4. Estructuras de control (9 hrs)
    5. Arreglos (6 hrs)
    6. Cadenas de caracteres (3 hrs)
    7. Diccionarios (6 hrs)
    8. Archivos (6 hrs)

    Los tipos de aplicaciones que se podrían construir con Python son muy variados. En esencia se puede hacer todo lo que estamos haciendo actualmente con Java. Pero ahora con Python además podemos usar diversas bibliotecas y frameworks para realizar cómputo científico (NumPy y SciPy), video juegos (PyGame) o programación de robots (Myro). Yo creo que el instructor del curso debe tener la libertad de poder enfocar el curso hacia donde considere más relevante según la clase de alumnos que tenga.

    La transición hacia C++ se debería realizar al inicio del curso "Programación orientada a objetos". La distribución de los temas podría quedar así:

    1. Conceptos generales de la programación orientada a objetos (3 hrs)
    2. Diseño orientado a objetos (3 hrs)
    3. Introducción al lenguaje C++ (6 hrs)
    4. Construcción de software orientado a objetos (12 hrs)
    5. Herencia y polimorfismo (6 hrs)
    6. Interfaces gráficas de usuario (GUI) (6 hrs)
    7. Manejo de excepciones (3 hrs)
    8. Programación genérica con templates (6 hrs)

    En el tema 3 se cubrirían aspectos básicos de tipos de datos, declaraciones, manejo de entrada y salida, y estructuras de control. Lo único que es realmente nuevo en C++ y que no vieron nuestros alumnos en Python durante el primer curso son las declaraciones explícitas de variables, parámetros y tipo de regreso de funciones. Lo demás es prácticamente la misma semántica, lo único distinto es la sintaxis.

    ResponderBorrar
  5. Después de realizar un pequeño análisis, me parece que hay que ajustar los tiempos del curso Programación Orientada a Objetos, de acuerdo con lo siguiente:

    Si se utiliza Python en el primer curso de programación, el tiempo necesario para dar a los alumnos los conceptos de C++ antes de los temas de Programación Orientada a Objetos sería como sigue:

    1) Tiempo mínimo requerido: 11 hrs, suponiendo que en clase se da solamente un ejemplo de cada tema y se encarga tarea de cada tema a los muchachos.

    2) Tiempo que permite practicar mejor cada tema en clase: 18 hrs, suponiendo también que se encarga tarea de cada tema a los muchachos.

    A continuación desgloso los temas y tiempos que estoy considerando:
    1. (1 hr)
    Mostrar el ambiente de programación.
    Explicar el concepto de compilación.
    Estructura de un programa en C++
    Estatutos de entrada y salida.
    Como se manejan los valores de tipo string (solo se usan comillas y no apóstrofes, y se requieren caracteres de escape para mostrar caracteres especiales \n, \t, \\, \’, \”)

    2. (1 hr)
    Tipos de datos de C++ y la necesidad de declaración de variables y constantes.
    Comentarios en C++
    Formateo de números
    Operadores aritméticos (recalcar el uso de /, explicar que no existe // ni **)
    Funciones predefinidas (las más utilizadas)

    3. (2 hrs)
    Operadores relacionales (explicar que no se puede 1 < x < 10, sino que se tiene que usar and)
    Operadores &&, || y !
    Estatuto if (explicar que no existe elif, sino que es una secuencia de ifs y elses)
    Estatuto switch
    Estatuto while (explicar que no hay else para el while)

    4. (2 hrs, aunque sería mejor 3 hrs para hacer suficientes ejercicios de contadores)
    Estatuto do-while
    Estatuto for
    Concepto de contador

    5. (2 hrs, aunque sería mejor 4 hrs para hacer suficientes ejercicios de funciones y paso de parámetros por valor y referencia)
    Estructura de una Funcion en C++
    Llamadas a funcion
    Variables globales y locales
    Estatuto return. Explicar que una función solamente puede regresar 1 valor en C++
    Parámetros por valor y por referencia

    6. (1 hr)
    Strings en C++

    7. (1 hr, aunque sería mejor 3 hrs para practicar matrices, que no han usado)
    Arreglos de 1 y 2 dimensiones en C++ (explicar que no existen los subíndices negativos y que no existen las listas ni los diccionarios de Python).

    8. (1 hr, aunque serían mejor 3 hrs para hacer suficientes ejercicios con archivos)
    Archvos en C++


    Espero sus comentarios

    ResponderBorrar
  6. Hola Ariel.

    Leyendo tu blog, en específico la parte de los lenguajes de programación para iniciarse en este mundo, me surge la duda: ¿no les cuesta trabajo a los alumnos cambiar de un lenguaje tan flexible como lo es Python a lenguajes más quisquillosos como lo es Java, C++ o C#? Lo pregunto porque yo inicié a programar en Java, y al principio me costó trabajo y muchas características que inicialmente las tomaba como receta (Streams y sus decoradores, por ejemplo) las entendí casi hasta el final de la carrera. Y cuando conocí Python fue un alivio poder dejar de lado muchos detalles.

    Estoy seguro que por la naturaleza de Python los alumnos se pueden concentrar en entender los conceptos en vez de distraerse con detalles sintácticos del lenguaje; pero ¿no se complica que se acostumbren a la forma en que funciona Python y después tengan que lidiar con esto?

    De antemano no conozco a nadie que se haya iniciado de esta forma, por lo que me parece bastante interesante.

    Saludos,

    Giovanni Murguía

    ResponderBorrar
  7. Hola seria interesante que revicen este enlace http://www.aprenderpython.org en el se encuntra una comunidad dedicada a Python en Español tienen un foro muy bueno, ademas de un blog excelente con buena documentacion, y tienen un canal de Videotutoriales en los cuales he visto que hablan temas de fundamentos de programacion y luego ya pasan al tema de Python, es un buen sitio les recomiendo mirarlo yo entendi muchos conceptos de programacion por los videos que tienen en la web, y la gran documentacion.

    Saludos Oscar

    ResponderBorrar