Por Jeffrey Elkner
Este libro debe su existencia a la colaboración hecha posible por el Internet y el movimiento de software libre. Sus tres autores—un profesor de colegio, un profesor de secundaria, y un programador profesional—(todavía tenemos que vernos cara a cara), hemos podido trabajar juntos y hemos sido ayudados por personas maravillosas quienes han donado su tiempo y energía para contribuir a hacer, de éste, un mejor libro.
Nosotros pensamos que este libro es una buena evidencia de los beneficios y futuras posibilidades de esta clase de colaboración, cuyo marco de referencia ha sido puesto en marcha por Richard Stallman y la Fundación para el Software Libre.
En 1999, el examen del College Board’s Advanced Placement (AP) de Informática se hizo en C++ por primera vez. Como en muchas escuelas a través del país, la decisión de cambiar el lenguaje tenía un impacto directo en el plan de estudios de informática de la escuela secundaria de Yorktown en Arlington, Virginia, donde enseño. Hasta ese momento, Pascal era el lenguaje de enseñanza en nuestros cursos del primer año y del AP. Conservando la práctica usual de dar a los estudiantes dos años de enseñanza del mismo lenguaje, tomamos la decisión de cambiar a C++ en el curso del primer año en el periodo escolar 1997-98, de modo que siguiéramos el cambio del College Board’s para el curso del AP el año siguiente.
Después de dos años, estoy convencido de que C++ no era una buena opción para enseñar informática a los estudiantes. Aunque es un lenguaje de programación de gran alcance, es también un lenguaje extremadamente difícil de aprender y de enseñar. Me encontré constantemente peleando con la difícil sintaxis de C++ y sus múltiples maneras de hacer las cosas, y, como resultado, estaba perdiendo muchos estudiantes innecesariamente. Como estaba convencido de que tenía que haber una mejor opción para nuestras clases de primer año, fui en busca de un alternativa a C++.
Necesitaba un lenguaje que pudiera correr en las máquinas de nuestro laboratorio de GNU/Linux, también en las plataformas de Windows y Macintosh que muchos de los estudiantes tienen en su casa. Quería que fuese un lenguaje de código abierto, para que los estudiantes lo pudieran usar en casa sin pagar por una licencia. Quería un lenguaje usado por programadores profesionales, y que tuviera una comunidad activa alrededor de él. Tenía que soportar la programación procedimental y orientada a objetos. Y lo más importante, tenía que ser fácil de aprender y de enseñar. Cuando investigué las opciones con éstas metas en mente, Python saltó como el mejor candidato para la tarea.
A uno de los estudiantes más talentosos de Yorktown, Matt Ahrens, le pedí que le diera a Python una oportunidad. En dos meses él no solamente aprendió el lenguaje, sino que escribió una aplicación llamada pyTicket que permitió a nuestro personal atender peticiones de soporte tecnológico vía Web. Sabía que Matt no podría haber terminado una aplicación de esa magnitud en tan poco tiempo con C++, y este logro, combinado con la evaluación positiva de Matt sobre Python, sugirió que este lenguaje era la solución que buscaba.
Habiendo decidido utilizar Python en mis dos clases de informática introductoria para el año siguiente, el problema más acuciante era la carencia de un libro de texto.
La documentación libre vino al rescate. A principios del año, Richard Stallman me presentó a Allen Downey. Los dos habíamos escrito a Richard expresando interés en desarrollar materiales educativos libres. Allen ya había escrito un libro de texto para primer año de informática, Cómo Pensar como un Informático. Cuando leí este libro, inmediatamente quise usarlo en mi clase. Era el libro de informática más claro y más provechoso que había visto. Acentúa los procesos del pensamiento implicados en la programación mas que las características de un lenguaje en particular. Leyéndolo me hizo sentir inmediatamente un mejor profesor.
Como Pensar como un Informático no solo fue un libro excelente, sino que también había sido publicado bajo la licencia publica GNU, lo que significa que podría ser utilizado libremente y ser modificado para satisfacer las necesidades de sus lectores. Una vez que decidí utilizar Python, se me ocurrió que podía traducir la versión original del libro de Allen (en Java) al nuevo lenguaje (Python). Aunque no habría podido escribir un libro de texto yo solo, tener el libro de Allen me permitió lograrlo, y al mismo tiempo demostró que el modelo cooperativo de desarrollo usado en la generación de software también podía funcionar para la generación de materiales educativos.
Trabajar en este libro por los dos últimos años ha sido beneficioso para mis estudiantes y para mi; y mis estudiantes tuvieron una gran participación en el proceso. Puesto que podía realizar cambios inmediatos, siempre que alguien encontrara un error de ortografía o una oración o un párrafo difícil, yo les animaba a que buscaran errores en el libro, dándoles un punto cada vez que hicieran una sugerencia que resultara en un cambio en el texto. Eso tenía la doble ventaja de animarles a que leyeran el texto más cuidadosamente y de conseguir la corrección del texto por sus lectores críticos más importantes: los estudiantes usándolo para aprender informática.
Para la segunda parte del libro sobre la programación orientada a objetos, sabía que para hacer el trabajo correctamente era necesario alguien con más experiencia en programación que yo. El libro estuvo incompleto la mayor parte del año hasta que la comunidad de software libre me proporcionó de nuevo los medios necesarios para su terminación.
Recibí un correo electrónico de Chris Meyers expresando su interés en el libro. Chris es un programador profesional que empezó enseñando un curso de programación el año anterior usando Python en el Lane Community College en Eugene, Oregon. La perspectiva de enseñar el curso llevó a Chirs al libro, y él comenzó a ayudarme inmediatamente. Antes del fin de año escolar él había creado un proyecto hermano en nuestro sitio Web http://openbookproject.net titulado Python for Fun y estaba trabajando con algunos de mis estudiantes más avanzados como profesor principal, guiándolos más allá de donde yo podía llevarlos.
La reescritura y uso de Cómo Pensar como un Informático por los últimos dos años ha confirmado la conveniencia de Python para enseñar a estudiantes principiantes. Python simplifica bastante los ejemplos de programación y hace que las ideas importantes en programación sean más fáciles de enseñar.
El primer ejemplo del texto ilustra este punto. Es el programa tradicional que muestra la oración “¡Hola todo el mundo!”, que en la versión C++ del libro se ve así:
#include
void main()
{
cout << "Hello, world." << endl;
}
y en la versión Python se convierte en:
print "Hello, World!"
Aunque éste es un ejemplo trivial, las ventajas de Python salen a la luz. El curso de Informática I en Yorktown no tiene prerrequisitos, es por eso que muchos de los estudiantes que ven este ejemplo están mirando a su primer programa. Algunos de ellos están un poco nerviosos, porque han oído que la programación de computadoras es difícil de aprender. La versión C++ siempre me ha forzado a escoger entre dos opciones que no me satisfacen: explicar las sentencias #include, void main(), { y }, y arriesgarme a confundir o intimidar a algunos de los estudiantes desde el principio; o decirles, “No te preocupes por todo eso ahora; lo retomaremos más tarde,” y tomar el mismo riesgo. Los objetivos educativos en este momento del curso son introducir a los estudiantes la idea de sentencia y permitirles escribir su primer programa y, de esa manera, acercarlos al mundo de la programación. Python tiene exactamente lo que se necesita para lograr esto, y nada más.
Comparar el texto explicativo de este programa en cada versión del libro ilustra más que lo que ésto significa para los estudiantes principiantes. Hay trece párrafos de explicación de <q>¡Hola todo el mundo!</q> en la versión C++; en la versión Python, solo hay dos. Aún más importante, los once párrafos restantes no hablan de las grandes ideas en la programación de computadores sino de minucias de la sintaxis de C++. Encontré la misma situación al repasar todo el libro. Párrafos enteros desaparecían en la versión Python del texto porque su sencilla sintaxis los hacía innecesarios.
Usar un lenguaje de muy alto nivel como Python le permite al profesor posponer los detalles de bajo nivel de la máquina hasta que los estudiantes tengan el bagaje que necesitan para entenderlos. Crea la habilidad de poner, pedagógicamente hablando, <q>primero lo primero</q>. Unos de los mejores ejemplos de esto es la manera en la que Python maneja las variables. En C++ una variable es un nombre para un lugar que almacena una cosa. Las variables tienen que ser declaradas con tipos, al menos parcialmente, porque el tamaño del lugar al cual se refieren tiene que estar predeterminado. Así la idea de una variable se liga con el hardware de la máquina. El concepto poderoso y fundamental de variable ya es difícil para los estudiantes principiantes (de informática y de álgebra). Los bytes y las direcciones de memoria no ayudan a esclarecerlo. En Python una variable es un nombre que se refiere a una cosa. Este es un concepto más intuitivo para los estudiantes principiantes y está mas cerca del significado de <q>variable</q> que aprendieron en los cursos de matemáticas. Este año tuve menos dificultades en enseñar el concepto de variable comparado con el año anterior, y empleé menos tiempo ayudándolos con problemas que involucraban tal concepto.
Otro ejemplo de cómo Python ayuda en la enseñanza y aprendizaje de la programación es su sintaxis para las funciones. Mis estudiantes siempre han tenido gran dificultad para entender las funciones. El problema principal se centra en la diferencia entre una definición de función y un llamado de función, y la distinción relacionada entre un parámetro y un argumento. Python viene al rescate con una bella sintaxis. Una definición de función empieza con la palabra clave def, y yo simplemente digo a mis estudiantes, “Cuando definas una función, empieza con def, seguido del nombre de la función que estás definiendo; cuando llames una función, simplemente llama (digita) su nombre.” Los parámetros van con las definiciones; los argumentos van con los llamados. No hay tipos de retorno, tipos para los parámetros, o traspasos de parámetros por referencia y valor, y ahora yo puedo enseñar funciones en menos de la mitad de tiempo que antes, con una mejor comprensión.
Usar Python ha mejorado la eficacia de nuestro programa de informática para todos los estudiantes. Veo un nivel general de éxito alto y un nivel bajo de la frustración que ya había experimentado durante los dos años que enseñé C++. Avanzo más rápido y con mejores resultados. Más estudiantes terminan el curso con la habilidad de crear programas significativos; esto genera una actitud positiva hacia la experiencia de la programación.
He recibido correos electrónicos de todas partes del mundo de personas que están usando este libro para aprender o enseñar programación. Una comunidad de usuarios ha comenzado a emerger, y muchas personas han estado contribuyendo al proyecto mandando materiales a través del sitio Web hermano http://openbookproject.net/pybiblio.
Con el continuo crecimiento de Python, espero que continúe y se acelere el crecimiento de esta comunidad de usuarios. La aparición de esta comunidad y la posibilidad que sugiere para otras experiencias de colaboración similar entre educadores, han sido para mi las partes más excitantes de trabajar en este proyecto. Trabajando juntos podemos aumentar la calidad del material disponible para nuestro uso y ahorrar tiempo valioso. Los invito a formar parte de nuestra comunidad y espero escuchar de ustedes. Por favor escríbame a jeff@elkner.net.