Next Up Previous Hi Index

Prefacio

Por Jeff Elkner

Este libro debe su existencia a la colaboración hecha posible por la Internet y al movimiento de software libre. Sus tres autores, un profesor universitario, un profesor de instituto y un programador profesional, todavía tienen que conocerse cara a cara, pero hemos sido capaces de colaborar estrechamente y hemos recibido la ayuda de mucha gente maravillosa que han donado su tiempo y esfuerzo para ayudar a mejorar este libro.

Creemos que este libro es un testamento a los beneficios y futuras posibilidades de este tipo de colaboración, cuyo marco han establecido Richard Stallman y la Free Software Foundation.

Cómo y por qué vine a usar Python

En 1999, el examen de Advanced Placement (AP) de Ciencias de la Computación del Claustro Escolar se realizó por primera vez en C++. Como en muchos institutos en todo el país, la decisión de cambiar de lenguaje tuvo un impacto directo sobre el curriculum de informática en el Insituto de Yorktown en Arlington, Virgina, donde doy clase. Hasta ese momento, el lenguaje de enseñanza era Pascal tanto en nuestro curso de primer año como en el AP. Al seguir con la práctica anterior de dar a los estudiantes dos años de exposición al mismo lenguaje, tomamos la decisión de cambiar a C++ en el aula de primer año del curso 1997-98 de modo que estaríamos en sintonía con el cambio del Claustro Escolar para el curso AP del año siguiente.

Dos años más tarde, me convencí de que C++ era una mala elección para iniciar a los estudiantes en la informática. Aunque es un lenguaje de programación muy poderoso, también es extremadamente difícil de aprender y enseñar. Me encontré luchando constantemente con la difícil sintaxis de C++ y sus múltiples formas de hacer las cosas, y como consecuencia perdía muchos estudiantes sin necesidad. Convencido de que debía de haber una elección mejor para el lenguaje de nuestro curso de primer año, me puse a buscar una alternativa para C++.

Necesitaba un lenguaje que funcionase tanto en las máquinas de nuestro laboratorio de Linux como en las plataformas Windows y Macintosh que la mayoría de los estudiantes tenían en casa. Quería que fuera de código abierto, para que los estudiantes pudieran usarlo en casa sin importar su nivel económico. Quería un lenguaje utilizado por programadores profesionales, y que tuviera una comunidad activa de desarrolladores a su alrededor. Tenía que soportar tanto la programación procedural como la 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 estos obejetivos en mente, Python destacó como el mejor candidato.

Pedí a uno de los estudiantes más talentosos de Yorktown, Matt Ahrens, que probase Python. En dos meses, no sólo había aprendido el lenguaje, sino que escribió una aplicación llamada pyTicket que permitía a nuestro personal informar de problemas tecnológicos via Web. Sabía que Matt no podía terminar una aplicación de tal escala en tan poco tiempo con C++, y este logro, combinado con la positiva valoración de Python por parte de Matt, sugería que Python era la solución que buscaba.

Encontrar un libro de texto

Una vez decidido a usar Python tanto en mis clases de informática básica como en el año siguiente, el problema más acuciante era la falta de un libro de texto disponible.

El contenido libre vino al rescate. Anteriormente en ese año, Richard Stallman me presentó a Allen Downey. Ambos habíamos escrito a Richard expresando nuestro interés en desarrollar conenidos educativos libres. Allen ya había escrito un libro de texto de informática de primer año, How to Think Like a Computer Scientist. Cuando leí ese libro, supe inmediatamente que quería usarlo en mi clase. Era el libro de informática más claro y práctico que había visto. Ponía el énfasis en los procesos de pensamiento involucrados en la programación más que en las características de un lenguaje en particular. Su lectura me hizo inmediatamente un maestro mejor.

How to Think Like a Computer Scientist no era sólo un libro excelente, sino que se publicó bajo la licencia pública GNU, lo que significaba que podía usarse y modificarse libremente para ajustarse a las necesidades de su usuario. Una vez que decidí usar Python, se me ocurrió que podría traducir la versión original en Java del libro de Allen al nuevo lenguaje. Aunque no hubiera sido capaz de escribir un libro de texto por mi cuenta, tener el libro de Allen para trabajar a partir de él me hizo posible hacerlo, mostrando al mismo tiempo que el modelo cooperativo de desarrollo que tan buenos resultados había dado en el software podía funcionar también para el contenido educativo.

El trabajo en este libro durante los dos últimos años ha sido gratificante para mis estudiantes y para mí, y mis estudiantes desempeñaron un importante papel en el proceso. Como podía hacer cambios instantáneos cuando alguien encontraba un error ortográfico o un pasaje difícil, los animé a buscar errores en el libro dándoles un punto extra cada vez que hacían una sugerencia que terminaba como un cambio en el texto. Esto tuvo el doble beneficio de animarlos a leer el texto con más atención y tener el texto revisado en profundidad por sus críticos más importantes: los estudiantes que lo usan para aprender informática.

Para la segunda mitad del libro, acerca de la programación orientada a objetos, sabía que necesitaría a alguien con más experiencia real en programación de la que yo tenía para hacerlo bien. El libro se estancó en un estado inacabado durante buena parte de un año hasta que la comunidad de código abierto de nuevo proporcionó 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ó a impartir un curso de programación con Python el año pasado en el Colegio de Lane Community, en Eugene, Oregon. La perspectiva de impartir el curso llevó a Chris hasta el libro, y empezó a colaborar con él inmediatamente. Hacia el final del año escolar había creado un proyecto complementario en nuesto sitio web en http://www.ibiblio.org/obp llamado Python for Fun y estaba trabajando con algunos de mis estudiantes aventajados como profesor magistral, dirigiéndoles más allá de donde yo podía llevarles.

Presentando la programación con Python

El proceso de traducir y usar How to Think Like a Computer Scientist durante los dos últimos años ha confirmado la idoneidad de Python para enseñar a estudiantes principiantes. Python simplifica enormemente los ejemplos de programación y facilita la enseñanza de los conceptos importantes en programación.

El primer ejemplo del texto ilustra esta cuestión. Es el tradicional programa "hola, mundo", que en la versión C++ del libro es así:

   #include <iostream.h>

   void main()
   {
     cout << "Hola, mundo" << endl;
   }

en la versión Python se convierte en:

   print "Hola, Mundo"

Aunque es un ejemplo trivial, destacan las ventajas de Python. El curso de Informática I en Yorktown no tiene prerrequisitos, así que muchos de los estudiantes que ven este ejemplo están mirando su primer programa. Algunos de ellos están sin duda un poco nerviosos, tras haber oído que programar computadores es algo difícil de aprender. La versión C++ siempre me ha obligado a elegir entre dos opciones insatisfactorias: explicar las sentencias #include, void main(), {, y } y arriesgarme a confundir o intimidar a algunos estudiantes desde el principio, o decirles "No te preocupes de todo eso ahora, hablaremos de ello más tarde", y arriesgarme a lo mismo. Los objetivos educativos en este momento del curso son exponer a los estudiantes a la idea de una sentencia de programación y llevarles a escribir su primer programa, presentándoles de esta forma el entorno de programación. La programación con Python tiene exactamente lo que necesito para hacer estas cosas, y nada más.

La comparación del texto explicativo de este programa para cada versión del libro ilustra mejor lo que esto significa para los estudiantes principiantes. Hay trece párrafos de explicación de "¡Hola, mundo!" en la versión C++. En la versión Python sólo hay dos. Aún más importante: los once párrafos que faltan no tocan las "grandes ideas" de la programación de computadores, sino las minucias de la sintaxis de C++. Encontré que esto mismo sucedía por todo el libro. Párrafos enteros desapareciendo de la versión Python del texto porque la sintaxis clara de Python los hace innecesarios.

El uso de un lenguaje de muy alto nivel como Python permite que el profesor deje para más tarde hablar sobre los detalles de bajo nivel de la máquina hasta que los estudiantes tengan el fondo necesario para entender los detalles. De este modo crea la habilidad de poner pedagógicamente "antes lo primero". Uno de los mejores ejemplos de ello es la manera en la cual Python maneja las variables. En C++ una variable es un nombre para un lugar que contiene una cosa. Las variables deben declararse según su tipo en parte porque el tamaño del lugar al que apuntan tiene que determinarse de antemano. Así, la idea de una variable está ligada al hardware de la máquina. El concepto poderoso y fundamental de lo que es una variable ya es suficientemente difícil para estudiantes principiantes (tanto de informática como de álgebra). Octetos y direcciones no ayudan a la comprensión. En Python una variable es un nombre que señala una cosa. Este es un concepto mucho más intuitivo para estudiantes principiantes y está más cerca del significado de "variable" que aprendieron en su clase de matemáticas. Este año tuve muchas menos dificultades enseñando lo que son las variables que en el anterior, y pasé menos tiempo ayudándoles con los problemas derivados de su uso.

Otro ejemplo de cómo Python ayuda en la enseñanza y aprendizaje de la programación es en su sintaxis para las funciones. Mis estudiantes siempre han tenido una gran dificultad comprendiendo las funciones. El problema principal se centra alrededor de la diferencia entre la definición de una función y la llamada a una función, y la distinción asociada entre un parámetro y un argumento. Python viene al rescate con una sintaxis a la que no le falta belleza. La definición de una función empieza con la palabra clave def, y 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 a una función, simplemente di (escribe) su nombre". Los parámetros van con las definiciones; los argumentos con las llamadas. No hay tipo de retorno, tipos de parámetros, o parámetro por referencia y valor de por medio, por lo que ahora soy capaz de enseñar funciones en la mitad de tiempo que antes, con mejor comprensión.

El uso de Python ha mejorado la eficacia de nuestro programa de informática para todos los estudiantes. Veo un mayor nivel general de éxito y un menor nivel de frustración del que experimenté durante los dos años que enseñé C++. Avanzo más rápido con mejores resultados. Más estudiantes terminan el curso con la habilidad de crear programas útiles y con la actitud positiva hacia la experiencia de programación que esto engendra.

Formar una comunidad

He recibido correos electrónicos de todos los rincones del planeta de parte de gente que usa este libro para aprender o eneseñar a programar. Ha empezando a surgir una comunidad de usuarios, y muchas personas han contribuido al proyecto mandando materiales a través del sitio web complementario http://www.thinkpython.com.

Con la publicación de este libro en forma impresa, espero que continue y se acelere el crecimiento de la comunidad de usuarios. La emergencia de esta comunidad de usuarios y la posibilidad que sugiere para colaboraciones similares entre educadores han sido para mí las partes más excitantes de trabajar en este proyecto. Trabajando juntos, podemos incrementar la calidad de los materiales disponibles para nuestro uso y ahorrar un tiempo valioso. Les invito a unirse a nuestra comunidad y espero con impaciencia saber algo de ustedes. Por favor, escriban a los autores a feedback@thinkpython.com.

Jeffrey Elkner
Escuela Secundaria Yortown
Arlington, Virginia


Next Up Previous Hi Index