Sei sulla pagina 1di 15

Aprender a programar con Python: una experiencia docente

Andrs Marzal, David Llorens e Isabel Gracia e Universitat Jaume I


amarzal@lsi.uji.es, dllorens@lsi.uji.es, gracia@lsi.uji.es

Resumen La eleccin del primer lenguaje de programacin es un debate recuo o rrente entre los docentes universitarios de ingenier informticas. La as a Universitat Jaume I ha optado por una solucin poco convencional: en o el primer curso de dos titulaciones de ingenier informtica se aprende a a a programar con Python y C. Python es un lenguaje que est en auge a en el mundo del software libre y que presenta una serie de caracter sticas que lo hacen muy atractivo para ensear a programar. Como material de n apoyo hemos escrito un libro de texto (accesible gratuitamente) y desarrollado un sencillo entorno de programacin multiplataforma para Python o que se distribuye con licencia GPL: el entorno PythonG, formado por un intrprete interactivo, un editor, un depurador sencillo y una ventana con e salida grca. Con el material docente elaborado se facilita la formacin a o autodidacta para cualquiera que quiera aprender a programar desde cero. En este art culo reexionamos sobre la idoneidad de Python como primer lenguaje de programacin, describimos la experiencia docente de o ensear Python y C en primer curso y presentamos el entorno de progran macin PythonG. o

1.

Introduccin o

Hace aos hab un claro consenso en el mundo acadmico acerca del lenn a e guaje de programacin con el que ensear a programar: Pascal. Era considerado o n elegante y sencillo, a la vez que ofrec soporte para el paradigma de programaa cin imperante: la programacin estructurada. Son pocos los que an consideran o o u seriamente que Pascal sea adecuado y no faltan razones: las deciencias del Pascal estndar, que obligan a usar variantes dialectales incompatibles entre s la a ; ausencia de modularidad para ayudarse en el desarrollo de software de medio y gran tamao; la falta de apoyo a paradigmas de programacin como la pron o gramacin orientada a objetos; su escas o sima presencia en el mundo empresarial (exceptuando la de algn derivado de Pascal, como Delphi) o en el desarrollo u de software libre. . . En el entorno acadmico se opta hoy por diferentes lenguajes para introducir e a los estudiantes en la programacin. Es corriente optar por C, C++ o Java, y o ms raramente por otros como Modula-2, Ada o Scheme. Quienes optan por a lenguajes como Modula-2 o Ada lo hacen principalmente por su elegancia y por el soporte que dan a ciertos aspectos de la programacin: modularidad, chequeo o

Figura 1: El entorno de programacin PythonG. o

esttico de tipos, etc. Scheme, un derivado de Lisp, forma parte del curr a culum de algunas universidades estadounidenses (en buena medida gracias al libro de Abelson et al. [1]) y permite una aproximacin funcional a la programacin, o o aunque los paradigmas imperativo y orientado a objetos sean hoy dominantes. Mucho se puede criticar de C (y cualquiera que haya programado en C puede escribir un tratado sobre ello), pero frente a una visin puramente acadmica de o e la programacin, C contrapone su fuerte presencia en ((el mundo real)). Quienes o consideran que C no resulta un buen primer lenguaje de programacin pero o siguen con la mirada puesta en ((el mundo real)), se decantan generalmente por C++ o Java, atractivos por su orientacin a objetos y fuerte implantacin en la o o industria. Dos titulaciones de informtica de la Universidad Jaume I hacen una apuesa ta diferente: en primer curso no se ensea un lenguaje de programacin, sino n o dos, Python y C.1 Python no slo es un lenguaje acadmicamente interesante, o e muy expresivo y con una sintaxis limpia y sencilla: es, adems, un lenguaje ya a presente y con mucho futuro en ((el mundo real)). Los lenguajes de script (lenguajes interpretados de muy alto nivel, como Perl y Python) gozan de creciente importancia e implantacin en el mundo del software libre. Pero Python no es o suciente para abordar el contenido de muchas asignaturas que requieren un lenguaje de programacin de sistemas, ni para colmar los conocimientos prctio a cos de programacin en el curr o culum de un informtico. Una vez han aprendido a a programar con Python, los alumnos pasan a estudiar el lenguaje C. La gran ventaja de esta aproximacin es que, al haber aprendido ya a programar, las o peculiaridades de C pueden estudiarse como lo que son: peculiaridades (por emplear una expresin amable). o Para impartir las prcticas de la asignatura se ha desarrollado un sencillo a entorno de programacin, llamado PythonG (ver gura 1), con un editor de o textos orientado a Python, intrprete interactivo de rdenes Python, terminal e o grco y depurador. El software desarrollado se distribuye con licencia GPL. a
1 Dedicamos

a cada 45 horas de teor a/problemas y 30 horas de prcticas a cada lenguaje. a

El mercado editorial ofrece innidad de t tulos para aprender programar en C, C++ y Java. No ocurre lo mismo con Python, al menos no en Espaa. Este n problema se ha superado escribiendo un curso completo que cubre el temario de la asignatura. Se trata de un libro de apuntes que supone en el alumno unos conocimientos previos prcticamente nulos y que ha sido escrito con un a estilo expositivo muy prximo al de una clase presencial [6]. El libro puede o utilizarse para el aprendizaje autodidacta de la programacin y que se distribuye o gratuitamente en la red. Este art culo est estructurado como sigue. En la seccin 2 se presentan las a o caracter sticas que, a nuestro juicio, debe reunir un lenguaje de programacin o utilizado para aprender a programar. En la seccin 2.1 se examina Python bajo o esta luz y se justica su idoneidad como primer lenguaje de programacin. El o apartado 2.2 resume las ventajas de aprender C una vez se sabe programar con Python. Los apartados 3 y 4 presentan el entorno de programacin PythonG o y el libro de texto de la asignatura. Finalmente, en el apartado 5 se apuntan algunas conclusiones.

2.

La cuestin del primer lenguaje o

La primera pregunta que hemos de hacernos es qu requisitos debe reunir e un lenguaje de programacin para que pueda considerarse un buen lenguaje de o iniciacin? Debe tenerse en cuenta que el objetivo de un curso introductorio a o la programacin no es la enseanza en profundidad de un lenguaje de prograo n macin concreto, sino la asimilacin de una serie de estrategias para el diseo o o n y desarrollo de soluciones a problemas que usan, como veh culo de expresin, o un lenguaje de programacin. El lenguaje de programacin es instrumental y lo o o ideal es que interera lo menos posible en la implementacin de los algoritmos. o El primer aspecto a tener en cuenta es la sintaxis. El lenguaje debe tener cierto sentido de la econom en el uso de s a mbolos auxiliares y sus estructuras deben seguir unos principios sencillos que permitan generalizaciones efectivas. Muchos errores de programacin de los aprendices se deben a la omisin o uso o o incorrecto de terminadores y delimitadores de bloque (que frecuentemente pasan inadvertidos al compilador por no provocar errores sintcticos o semnticos). a a Estos errores no siempre se deben a un mal diseo del algoritmo por parte del n estudiante, sino al pobre soporte que ofrece el lenguaje de programacin para o una expresin concisa y clara del algoritmo. Esto nos lleva a una segunda caraco ter stica deseable: el lenguaje debe ser expresivo, es decir, debe poder ((decir mucho con poco)). Para ello, el lenguaje debe ofrecer estructuras de control exibles y presentar una coleccin de tipos y estructuras de datos que permita expresar o relaciones complejas entre datos con una notacin sencilla (por ejemplo, dando o soporte sintctico a estructuras secuenciales como las listas). La semntica del a a lenguaje tambin debe ser sencilla. Contribuye a ello que el lenguaje sea muy e ortogonal, es decir, si una construccin o mtodo funciona con una estructura o e de datos, debe funcionar de modo similar con aquellas otras que guardan alguna semejanza (si cierta funcin o mtodo calcula la longitud de una cadena, o e por ejemplo, deber calcular tambin la longitud de una lista, pues ambas son a e secuencias). Programar es una actividad que, especialmente en fases tempranas del aprendizaje, se basa en el mtodo de prueba y error. Es deseable que el lenguaje vaya e

acompaado de un entorno de programacin que facilite un ciclo de edicinn o o ejecucin rpido. Resulta cr o a tico, adems, que se detecten y sealen correctaa n mente los errores de todo tipo (lxicos, sintcticos, semnticos estticos y de e a a a ejecucin): nada hay ms frustrante para un estudiante que un programa dado o a por bueno por un compilador y que, ((inexplicablemente)), falla en la ejecucin o con un mensaje tan parco como ((violacin de segmento)), sin indicar siquiera en o qu l e nea se produjo el error. Las caracter sticas citadas son, a nuestro entender, fundamentales. Un lenguaje que las presente menguadas o que no las presente en absoluto no es un buen candidato. Hay otras caracter sticas que, aunque deseables, son secundarias. Entre ellas tenemos, por ejemplo, su presencia en el ((mundo real)), aunque teniendo en cuenta que est fuertemente sometido al dominio de las modas y a la mercadotecnia. Hace aos, C reinaba absolutamente; al poco, irrumpi con n o fuerza C++; hoy parece que Java domina buena parte del mercado; y Microsoft se ha empeado en que C# sea lo ms. Pero, si examinamos el mundo de n a la pequea y mediana empresa, Visual Basic es el amo. Sin comentarios. En n cualquier caso, no perdamos de vista la creciente presencia de Perl y Python en el mundo de la programacin. El entorno LAMP (Linux-Apache-MySQLo Perl/PHP/Python) [4] ha introducido estos lenguajes en el curr culum de muchos programadores profesionales. Otra caracter stica deseable es la existencia de un rico conjunto de mdulos o librer que facilite la programacin de ciertas o as o tareas: entrada/salida, funciones y constantes matemticas, expresiones regulaa res. . . y, por qu no, aplicaciones web, serializacin de objetos, comunicacin e o o entre ordenadores, interfaces grcas, . . . Tambin resulta deseable que el entora e no de programacin est disponible en el mayor nmero posible de plataformas o e u (incluso en las que no son libres, ya que un efecto secundario de este aspecto es que facilita la migracin de los estudiantes a la plataforma GNU/Linux; pero o eso es otra historia).

2.1.

Python como primer lenguaje

Aunque Python no goce an de amplia reconocimiento en el mundo acadmiu e co nacional, pretendemos demostrar en esta seccin que puede compararse muy o favorablemente con los lenguajes adoptados en la mayor de universidades y a que, en consecuencia, este reconocimiento puede ser cuestin de tiempo. De heo cho, son varias las universidades extranjeras que ya han adoptado Python como parte de sus curr cula en informtica o como herramienta para la introduccin a o a la programacin de no informticos2 . o a La sintaxis de Python es extremadamente sencilla. Ilustremos esa sencillez con un ejemplo: el tradicional ((Hola, mundo.)) con el que se presentan muchos lenguajes de programacin. Un lenguaje como C obliga a incorporar la o cabecera de una biblioteca estndar, a denir una funcin principal que devuela o ve un valor nulo (obligatorio en C99) y a codicar el salto de l nea de una forma cr ptica (al menos para una persona que no ha visto un programa en su vida):
#include <stdio.h>
2 Universidad de Irvine, California (EEUU); Wartburg College, Iowa (EEUU); Centre College, Kentucky (EEUU); Universidad de San Diego (EEUU); Universidad de Helsinki (Finlandia); Trinity College, Melbourne (Australia). . .

int main(void) { printf("Hola, mundo.\n"); return 0; }

Quince componentes lxicos (sin contar la directiva del preprocesador)! La cosa e no mejora mucho en C++ (y eso sin entrar en la polmica de que cada ao, o e n casi, hay que escribir este programa ((cannico)) de una forma diferente!): o
#include <iostream> int main(void) { std::cout << "Hola, mundo." << std::endl; }

Y en Java, resulta complicado hasta lo inveros mil:


public class HolaMundo { public static void main(String [] args) { System.out.println("Hola, mundo."); } }

Cmo explicar a un estudiante que no ha visto un programa en su vida el o signicado de cada uno de los trminos sin solicitar un acto de fe tras otro? e Python va directo al grano:
print Hola, mundo.

Naturalmente, el programa ((Hola, mundo.)) no es determinante a la hora de escoger un lenguaje de programacin, pero s deber suscitar una seria reeo a xin acera de la excesiva e innecesaria complejidad a la que se somete a los o principiantes a la programacin. o No podemos desgranar todos los elementos que, a nuestro juicio, hacen de Python un lenguaje de sintaxis sencilla, pero s queremos destacar uno de ellos: los bloques se marcan con la indentacin del cdigo. He aqu un ejemplo o o de programa Python con bloques:
def f(x): return x**2 - 2*x - 2 def biseccion(a, b, epsilon): c = (a + b) / 2.0 while f(c) != 0 and b - a > epsilon: if f(a)*f(c) > 0: a = c elif f(b)*f(c) > 0: b = c c = (a + b) / 2.0 return c print x =, biseccion(0.5, 3.5, 1e-10)

Como se puede comprobar, no hay terminadores de sentencia (como el punto y coma de C/C++/Java) ni marcas de inicio/n de bloque (como las llaves de esos mismos lenguajes). La indentacin como forma de marcar bloques o 5

elimina errores propios de los lenguajes citados y que son frecuentes en los estudiantes (y tambin en programadores profesionales!): sentencias condicionales e sin accin por aadir un punto y coma incorrecto, bucles con una sola sentencia o n cuando el alumno cree que hay dos o ms (por omisin de llaves con un sangraa o do inadecuado del programa), sentencias con semntica ((alterada)) por usar una a coma cuando corresponde un punto y coma o por omitir un punto y coma al declarar un registro antes de una funcin, etc. La indentacin slo resulta molesta o o o cuando el tamao de un bloque de cierta profundidad excede del tamao de la n n ventana del editor, pero ese caso no es frecuente en los programas de un curso introductorio. El entorno PythonG es un editor adaptado a la programacin o que elimina las incomodidades de iniciar manualmente cada l nea con blancos o tabuladores3 . Un aspecto interesante de la indentacin forzosa es que disciplina o a los estudiantes en el sangrado correcto del cdigo en otros lenguajes de proo gramacin: hemos percibido que el cdigo C de nuestros estudiantes est mejor o o a indentado si empiezan aprendiendo Python. Python es un lenguaje interpretado. Los lenguajes interpretados permiten ciclos de desarrollo breves (edicin y ejecucin) que animan a los estudiantes o o a experimentar. Python dispone de un entorno de ejecucin que ayuda a detectar o los errores (incluyendo aquellos que slo se maniestan en ejecucin) sealndoo o n a los con mensajes muy informativos. Python ofrece, adems, un entorno interaca tivo con el que es posible efectuar pequeas pruebas o disear incrementalmente n n las soluciones a los problemas. Nuestro curso sugiere empezar a programar usando el entorno interactivo de Python como una calculadora avanzada. He aqu un ejemplo de una breve sesin interactiva de trabajo: o
>>> 2 + 2 4 >>> from math import sin, pi >>> pi 3.1415926535897931 >>> for i in range(4): ... print i, sin(i*pi/4) ... 0 0.0 1 0.707106781187 2 1.0 3 0.707106781187

La contrapartida de que se trate de un lenguaje interpretado es, obviamente, la menor velocidad de ejecucin. No obstante, esta menor velocidad no resulo ta en absoluto importante para los programas propios de un primer curso de programacin. o Python puede considerarse pseudocdigo ejecutable. Muchos cursos o de iniciacin a la programacin empiezan por presentar nociones bsicas con o o a pseudocdigo, es decir, con un lenguaje de programacin inexistente que aporta, o o eso s la exibilidad suciente para expresar cmodamente algoritmos. De este , o
es el unico editor adaptado a la sintaxis de Python. Editores como vim o Emacs/Xemacs tambin estn preparados para la edicin de programas Python. El entorno IDLE, que se e a o distribuye con el intrprete, tambin facilita el desarrollo de programas. e e
3 No

modo se evita tener que lidiar con la innitud de detalles propios de lenguajes de programacin tradicionales. Pero Python es muy expresivo y su sintaxis sencilla o interere poco en la implementacin de algoritmos, as que resulta un buen o sustituto del pseudocdigo, con la ventaja de que los algoritmos codicados en o Python s son ejecutables. Python es un lenguaje tipado dinmicamente. Cada dato es de un tipo a determinado (a diferencia de otros lenguajes de script, como Tcl, en los que muchos tipos son, en el fondo, cadenas) y slo se puede operar con l de formas o e bien denidas. La ventaja es que no hay que declarar variables antes de su uso. Esto, que en ciertos ambientes se considera sacr lego, resulta de gran ayuda para el que empieza a programar: las sutiles diferencias entre declaracin y denicin, o o por ejemplo, se obvian en Python. Cuando el estudiante se ha acostumbrado a usar variables y ha comprendido el concepto de tipo de datos, puede transitar fcilmente a C y entender con mayor facilidad las ventajas de la declaracin a o de variables en un lenguaje compilado. Curiosamente, quienes critican opciones como Python por no ser un lenguaje estticamente tipado aceptan de buen grado a opciones como C o C++, lenguajes en los que ((todo vale)) cuando se apunta a memoria. Esta caracter stica, que resulta util en la programacin de sistemas, se o presta a enorme confusin en el principiante. No es que Python evite el trabajo o con punteros, al contrario, en Python toda la informacin se maneja v punteros o a (referencias a memoria), sino que la memoria apuntada mantiene informacin o de tipo sobre los datos almacenados, evitando problemas de acceso a ellos con tipos errneos. o Hay una vertiente negativa en la no necesidad de declarar variables: los errores derivados de teclear incorrectamente identicadores de variables o de atributos de objetos. Si se comete un error al teclear el nombre de una variable o atributo en la parte izquierda de una asignacin, se crea una nueva variable. El o mismo problema, cuando ocurre en la parte derecha, es detectado por el entorno de ejecucin, as que no resulta tan grave. o Python facilita la deteccin y gestin de errores mediante excepcioo o nes. Las excepciones forman parte ya de los lenguajes de programacin modero nos (Java las incorpor desde el principio y C++ lo ha hecho ms recientemente) o a y eliminan la excesiva complejidad de la deteccin y tratamiento de errores con o lenguajes de programacin que, como C, fuerzan a detectarlos con valores espeo ciales de retorno y que no ofrecen un modelo claro de interrupcin de rutinas o para localizar su tratamiento en un solo punto. Python ofrece un rico conjunto de estructuras de datos exibles. El tipo lista de Python (un vector dinmico heterogneo) permite introducir con a e naturalidad el concepto de secuencia y presentar los algoritmos bsicos de maa nejo de secuencias. Que la indexacin empiece siempre en 0 ayuda a dar el salto o a C, C++ o Java. El entorno de ejecucin proporciona comprobacin de validez o o de los ndices, eliminando as una de las principales fuentes de problemas de C y C++. El hecho de que las listas sean redimensionables elimina al estudiante la necesidad de tomar decisiones acerca de la longitud mxima de los vectoa res demasiado pronto. Es el camino que ha adoptado ultimamente C++ con la STL (aunque, alguien se atreve a presentar la STL en las primeras semanas de

formacin de un programador, con todas sus sutilezas y esa sintaxis endemoo niada?). Por otra parte, Python es un lenguaje muy ortogonal : una vez se ha aprendido a manejar listas, por ejemplo, se sabe manejar cadenas, ya que ambos tipos son secuenciales y presentan conjuntos de operadores con igual nombre y semntica. Adems de listas y cadenas, Python ofrece tuplas (listas inmutables) a a y diccionarios (vectores asociativos). Python simplica la gestin de memoria. El modelo de memoria de Pyto hon es sencillo: todo valor reside en el ((heap)) y toda variable contiene una referencia a su valor. A ello se suma un sistema de recogida automtica de a basura (garbage collection) que evita los punteros colgantes (dangling pointers), las fugas de memoria, las violaciones de segmento, etc. Estos errores de ejecucin, habituales en lenguajes como C o C++, son dif o ciles de detectar y convierten el desarrollo de programas en una actividad ms frustrante de lo que a es razonable, especialmente para el principiante. Python ofrece una ampl sima coleccin de mdulos (bibliotecas). Hay o o mdulos para cualquier actividad imaginable: escritura de CGI, gestin de correo o o electrnico, desarrollo de interfaces grcas de usuario, anlisis de documentos o a a HTML o XML, acceso a bases de datos, trabajo con expresiones regulares, etc. No es que haya que presentar al estudiante todos estos mdulos (no hay tiempo); o pero s es posible organizar actividades alrededor de la asignatura de programa cin (seminarios, talleres,. . . ) que introduzcan diferentes campos de aplicacin. o o Acostumbrar al estudiante a consultar la documentacin de las bibliotecas diso ponibles desde bien temprano ayuda a hacer de ellos programadores ecientes. Una ventaja adicional de Python es, pues, que hace posible organizar seminarios sobre temas ((modernos)) y que alumnos de primer curso los sigan con aprovechamiento: CGI, anlisis de texto con expresiones regulares, interfaces a grcos de usuario, etc. a El mecanismo de paso de parmetros es unico. Los parmetros se pasan a a a funciones y mtodos por referencia a objeto. En la prctica, se comporta de e a forma similar al paso de parmetros de Java: el paso de objetos bsicos (de tipo a a escalar) se realiza con efectos similares al paso por valor y el de objetos ms a elaborados (vectores, diccionarios, instancias de clase, etc.) por referencia.
def parametros(a, lista): a += 1 lista.append(10) x = 1 l = [1,2,3] parametros(x, l) print x no se ha modificado:, x print pero a l se le ha a~adido el elemento de valor 10:, l n

Si bien el paso de parmetros de C es ms exible (incluye una forma de paso a a de parmetros por referencia basada en el paso por valor de un puntero), el a comportamiento por defecto con respecto al paso de variables de tipo bsico y a vectorial es anlogo al de Python, haciendo sencilla la migracin. a o

Python es orientado a objetos. A diferencia de Java, Python permite una programacin puramente procedimental. La orientacin a objetos, aunque pero o fectamente soportada, es opcional (a menos, naturalmente, que se recurra a ciertos mdulos en los que se denen clases). El soporte a la programacin orieno o tada a objetos es similar al de lenguajes como Smalltalk: la resolucin de los o nombres de mtodo y atributos es dinmica. Ello elimina la necesidad de come a plicadas jerarqu de herencia (aunque Python soporta la herencia mltiple), as u clases virtuales e interfaces. Cuestiones como el diseo de contenedores genricos n e est tambin resuelta, pues el sistema de tipos dinmico ofrece la exibilidad a e a suciente.
class Pila: def __init__(self, n): # Mtodo constructor. e self.index = -1 self.buffer = [None] * n def push(self, value): # Apila un elemento. if self.index >= len(self.buffer): raise "Error: Pila llena." self.index += 1 self.buffer[self.index] = value def top(self): # Consulta la cima de la pila. if self.index < 0: raise "Error: Pila vaca." return self.buffer[self.index] def pop(self): # Extrae la cima de la pila. if self.index < 0: raise "Error: Pila vaca." self.index -= 1 return self.buffer[self.index+1] p = Pila(5) p.push(3) p.push(2) print p.top() print p.pop() print p.pop()

(Hemos de decir que el primer ao que impartimos el curso incluimos un n tema de orientacin a objetos. Los resultados no fueron satisfactorios, quiz en o a buena medida porque la celeridad con que impartimos el temario de Python (un cuatrimestre) no permite alcanzar la madurez necesaria para asimilar los conceptos propios de esta metodolog En la actualidad explicamos los tipos de a. datos compuestos mediante registros.)

2.2.

C como segundo lenguaje

Aprender C una vez se sabe programar con otro lenguaje resulta ms sencillo. a El estudiante ya conoce los conceptos fundamentales (tipo de dato, variable, bucle, seleccin condicional, etc.) y tiene cierta soltura en el diseo de algoritmos. o n La introduccin al nuevo lenguaje puede plantearse inicialmente en trminos de o e traduccin de programas Python cuyo comportamiento es bien conocido por los o 9

estudiantes. El discurso sobre los abundantes detalles de C se puede plantear pues, en el marco de las abstracciones que ya conocen. Python permite introducir todos los conceptos con una sintaxis minimalista y preservando suciente abstraccin como para que los conceptos se aprendan en su esencia. El estudio o de C obliga a repasar todos estos conceptos y a examinarlos desde una ptica o ligeramente (a veces radicalmente) diferente. El resultado es una visin doble de o los conceptos y, por tanto, ms slida. Una lista, por ejemplo, es una secuencia a o de elementos sobre la que es posible implementar ciertas operaciones. Esa es la esencia. Cmo se implementa en C (bien con punteros a bloques contiguos o de memoria dinmica, bien con registros enlazados) es una cuestin relacionada a o con las caracter sticas propias del lenguaje.4 Haber aprendido Python ofrece la ventaja aadida de haber disciplinado al n estudiante en cuestiones elementales de legibilidad del cdigo, como ya hemos o apuntado antes. La indentacin, por ejemplo, es un concepto ya interiorizado. o Los tipos y estructuras de datos se presentan en C como versiones ms pobres a de aquellas que ya conocen por Python: los vectores, por ejemplo, no presentan operaciones ((nativas)) como la concatenacin o el clculo de su longitud. Un ejero a cicio interesante es explotar estas limitaciones para proponer al estudiante que implemente operaciones y mtodos cuyo comportamiento conoce bien gracias a e Python (inversin, bsqueda, ordenacin, extraccin de cortes, etc.). o u o o Habr quien piense que impartir dos lenguajes de programacin en primer a o curso ha de hacerse, necesariamente, en detrimento de la cantidad de conceptos aprendidos. No es as El temario propuesto considera todos los aspectos rele. vantes de un primer curso de programacin: tipos de datos, estructuras secueno ciales, estructuras de control, funciones, cheros y una introduccin al anlisis o a de algoritmos. Ensear dos lenguajes de programacin tiene una ventaja aadida: acostumn o n bra al estudiante a una realidad con la que se ha de enfrentar: la diversidad de herramientas que deben formar parte de su ((banco de trabajo)). Se concibe un programador ecaz que use un slo lenguaje de programacin? Se es produco o tivo desarrollando software slo en C? Cada problema demanda una forma de o trabajo y cada herramienta se adapta a un tipo de problema.

3.

El entorno PythonG

Como material de apoyo al curso hemos desarrollado un entorno de programacin para Python: PythonG. El objetivo fundamental es ofrecer un entorno o sencillo y cmodo de usar. PythonG [5] (ver gura 1) incluye un editor de texto o dirigido por la sintaxis (coloreado automtico, sugerencia automtica de indena a tacin), una consola de entrada salida, un intrprete interactivo, un terminal de o e salida grca (con rutinas de acceso a teclado y ratn) y un depurador muy sena o cillo. El entorno de distribuye con licencia GPL y est accesible en la direccin a o http://marmota.act.uji.es/MTP. El editor de texto tom como punto de partida el que ofrec el entorno IDLE. o a Se ha procurado emular el comportamiento de Emacs/XEmacs: las combinaciones de teclado para las acciones bsicas de edicin son las mismas (aunque se a o han aadido algunas que los estudiantes echaban en falta, como las comunes n
4 No decimos que d igual hacerlo de un modo u otro. En el mismo curso, ms adelante, se e a ense a al estudiante a escoger en funcin del coste computacional de cada opcin. n o o

10

en operaciones de cortar/copiar/pegar). De este modo facilitamos al estudiante la transicin, durante el segundo semestre, al editor que usamos en las sesiones o prcticas: XEmacs. a PythonG es multiplataforma, al igual que el entorno estndar de Python, a pues utiliza la biblioteca estndar para diseo de interfaces, Tkinter (un rea n cubrimiento de la biblioteca Tk). El estudiante puede descargar el software e instalarlo fcilmente en cualquier distribucin de Linux o cualquier otro sistemas a o operativo en el que corra el intrprete de Python. e Una caracter stica reseable y que hace atractivas las prcticas es el acceso n a que facilita a funciones grcas bsicas y de interaccin con teclado y ratn. a a o o De este modo los estudiantes pueden empezar, desde bien temprano, a disear n programas con salida grca y cierto nivel de interaccin sin la necesidad de a o aprender antes Programacin Orientada a Objetos y algn marco conceptual o u excesivamente sosticado. Creemos que estas posibilidades son muy motivadoras para los estudiantes: el profesorado est acostumbrado a interactuar con a su software a travs de la consola o la l e nea de comandos, pero la imagen que tienen los estudiantes del ordenador es fundamentalmente grca, as que suea len mostrar aversin por los programas de consola y una cierta inclinacin por o o los programas grcos. Orientar un curso entero a programas de consola es, en a opinin de muchos estudiantes, frustrante. En los dos ultimos cursos, los estuo diantes han podido mejorar su calicacin nal realizando trabajos voluntarios o atractivos: un juego interactivo donde unos robots dan caza a un personaje (una versin de Daleks), un mdulo para trazar grcos de tortuga (similar a la funo o a cionalidad del lenguaje Logo), una versin completa de Tetris (ver gura 2) y o un rompecabezas con Pentominos. (Los enunciados estn accesibles en la pgina a a web reseada ms arriba). n a
Siguiente:

Puntos: Velocidad:
Records: pepe juan pepe 51 58 58

5 9

Figura 2: Pantalla del juego de Tetris que implementan los estudiantes en el entorno PythonG.

Las funciones grcas y de acceso a teclado y ratn estn disponibles en un a o a mdulo independiente, de modo que los programas desarrollados no necesitan o ejecutarse desde el entorno de programacin. Es posible, pues, implementar o programas portables con salida grca sencilla. a El entorno ofrece un modo de depuracin simplicado (gura 4). Cuando se o activa, se muestra la l nea actual destacada con fondo azul. Una botonera da acceso a las acciones bsicas de control de ujo: ejecucin paso a paso, ejecucin a o o

11

(a)

(b)

(c)

(d)

(e)

(f)

(g)

(h)

Figura 3: Salida de los programas de demostracin que acompaan al entoro n no PythonG. (a) Ilustracin de las posibilidades grcas. (b) Una simulacin o a o gravitacional con tres cuerpos. (c) Un programa de visualizacin en 3D con o ocultacin de caras. (d) Una demostracin de la capacidad para mover (gruo o pos de) objetos. (e) Una animacin. (f) Un programa para dibujar guras con o engranajes. (g) y (h) Demostraciones de interaccin con entrada de ratn. o o

Figura 4: Modo de depuracin del entorno PythonG. o

12

continua hasta la l nea del cursor (que acta como ((breakpoint))), ejecucin u o hasta n de funcin, reinicio de la ejecucin, etc. Bajo la ventana de edicin se o o o muestran las variables locales y globales en un instante dado y bajo la consola se muestra el estado de la pila de llamadas a funcin. o

4.

Un libro de texto

Uno de los problemas con que se enfrenta el profesorado que opta por usar Python como primer lenguaje de programacin es la relativa ausencia de libros o de texto adecuados. La bibliograf sobre Python no cesa de crecer y se cuena ta ya con algunos libros de introduccin a la programacin. Podemos destacar o o tres: ((Python Programming: An Introduction to Computer Science)) [6] (borrador disponible en web y pendiente de publicacin como libro); ((How to Think o Like a Computer Scientist: Learning with Python)) [2]; y ((Learn to Program Using Python)) [3]. Otros libros sobre Python suelen incluir una introduccin o rpida al lenguaje, pero asumen conocimientos de programacin y/o resultan a o excesivamente breves para un curso como el propuesto. A estas monograf se suma la que hemos escrito como material para claas ses de teor y problemas. Se trata de un libro de texto en castellano con una a aproximacin ligeramente diferente de las seguidas en estos tres libros. El libro, o titulado ((Introduccin a la programacin. Volumen I: Python)) [6], disponible o o gratuitamente en la web (para autodidactas e instituciones pblicas de enseanu n za), no tiene por objeto presentar la totalidad del lenguaje de programacin o Python, sino ensear al estudiante los conceptos bsicos de la programacin y n a o las estrategias seguidas al desarrollar los programas propios de un primer curso. Se asume que el lector no tiene conocimiento alguno de programacin y el nivel o de matemticas necesario para seguir el discurso es el propio de la educacin a o secundaria. Tras una breve introduccin a los computadores y la programacin o o en general, se presenta a los estudiantes el entorno interactivo de Python. Con la excusa de su utilizacin como calculadora avanzada, se introducen las expreo siones y los tipos de datos bsicos (entero, otante y cadena), as como algunas a funciones de la biblioteca matemtica. El siguiente cap a tulo presenta el concepto de programa y las funciones de entrada salida, a la vez que incluye un breve tutorial del entorno PythonG. El siguiente cap tulo se dedica a presentar las estructuras de control (seleccin condicional y bucle). El estudiante pasa entonces o a estudiar listas (en realidad, vectores dinmicos) y a disear algoritmos que a n manejan secuencias de datos. El diseo de funciones se aprende a continuacin. n o El siguiente cap tulo presenta registros5 . El ultimo cap tulo se dedica al manejo de cheros. La prxima edicin incorporar cap o o a tulos dedicados al manejo de diccionarios, la programacin orientada a objetos y un apndice dedicado al o e diseo de interfaces grcas. Aunque no hay tiempo material para impartir el n a material adicional en el curso actual, estos nuevos cap tulos dotarn de cierta a completitud al libro como material de aprendizaje de Python. El libro est plagado de ejemplos completamente desarrollados y que, en a ocasiones, se presentan siguiendo los caminos equivocados que suelen tomar los estudiantes y que conocemos gracias a la experiencia docente de varios aos. n El objetivo es, precisamente, reexionar sobre la naturaleza de los errores que
5 Python no proporciona soporte nativo para registros, sino para clases e instancias, as que los registros se implementan con un mdulo extra. o

13

suelen cometer. Se han incluido numerosos cuadros otantes con informacin o adicional que profundizan en determinados aspectos o que pueden despertar la curiosidad del estudiante por materias que guardan cierta relacin con los o asuntos tratados en el cuerpo del texto. En la ultima edicin, los programas o estn apuntados por enlaces desde el documento PDF para facilitar las pruebas a y evitar, en la medida de lo posible, erratas en el cdigo presentado. o A lo largo del texto, e intercalados con las explicaciones, se proponen cerca de 480 ejercicios que van desde preguntas simples para constatar que se ha asimilado lo expuesto, a pequeas aplicaciones o sencillos videojuegos que hacen n necesario combinar lo aprendido en diferentes cap tulos. Con el n de hacer ms amena su lectura y estimular la curiosidad de algunos estudiantes, el libro a se acompaa de numerosas digresiones que abordan cuestiones muy dispares n relacionadas con el mundo de la programacin. o En 2002 se liber en la red una primera versin del libro que tuvo muy o o buena acogida, tanto por estudiantes universitarios y autodidactas espaoles n como latinoamericanos.

5.

Conclusiones

Algunas universidades norteamericanas han empezado a adoptar Python como lenguaje de programacin bsico. En Espaa, de momento, ya hay una o a n experiencia piloto: la Universidad Jaume I. Durante los cursos 2001/2002 y 2002/2003 se ha puesto en prctica la enseanza de la programacin con Pyta n o hon y C. Creemos que Python es un lenguaje particularmente adecuado como primer lenguaje de programacin. Uno de los resultados de la experiencia es el o material docente confeccionado: un sencillo entorno de programacin, una bio blioteca simplicada para la implementacin de programas grcos y un libro o a de texto. El material se encuentra disponible en Internet y puede utilizarse para el aprendizaje autodidacta de la programacin. o La experiencia docente ha sido muy satisfactoria. En un breve plazo de tiempo (un cuatrimestre), los estudiantes aprenden todos lo aspectos bsicos de la a programacin. Completamos su formacin bsica en la materia con la enseanza o o a n del lenguaje C en el segundo semestre. La formacin previa con Python es de o gran ayuda para asimilar el nuevo lenguaje y entender las cuestiones tcnicas e que determinan ciertas cuestiones de diseo de C. n

Referencias
[1] Abelson, H., Sussman, G. J. and Sussman, J.: Structure and Interpretation of Computer Programs, Segunda edicin, 1996, MIT Press/McGraw-Hill. o [2] Allen Downey, Je Elkner and Chris Meyers: How to Think Like a Computer Scientist: Learning with Python. Green Tea Press. ISBN: 0971677506. http://www.ibiblio.org/obp/thinkCSpy/dist/thinkCSpy.pdf. [3] Alan Gauld: Learn to Program Using Python: A Tutorial for Hobbyists, Self-Starters, and All Who Want to Learn the Art of Computer Programming. Addison-Wesley. ISBN: 0201709384.

14

[4] LAMP: The Open Source Web Platform. http://www.onlamp.com. OReilly & Associates. [5] David Llorens, http://www3.uji.es/~dllorens/PythonG/. [6] Andrs Marzal e Isabel Gracia: Introduccin a la programacin. Volumen I: e o o Python. Coleccin ((Materials)), 147, Servei de Publicacions de la Universitat o Jaume I. Disponible en http://marmota.act.uji.es/MTP. [6] John Zelle: Python Programming: An Introduction to Computer Science. Pendiente de publicacin. Borrador del libro disponible en o http://mcsp.wartburg.edu/zelle/python.

15

Potrebbero piacerti anche