![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
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.
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.
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.
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.
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 [email protected].
Jeffrey Elkner
Escuela Secundaria Yortown
Arlington, Virginia
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |