Artículo invitado
Python como primera aproximación a la programación
Rosalía Peña
Universidad de Alcalá
Resumen
Esta es la “segunda parte” del artículo de acpetación del Premio AENUI a la Innovación y Calidad Docente 2014. El primer
artículo, Paseo por la Programación Estructurada y Modular con Python, apareció en el número anterior de esta revista.
Se analiza la adecuación del lenguaje Python a la docencia de primer curso de programación para estudiantes de Ingeniería
Informática, detectando escollos clásicos del primer acercamiento a la programación, que potencialmente resuelve y nuevos con
que potencialmente tropezarán los alumnos.
Palabras clave: Programación, Primer lenguaje, Python.
1. Introducción mentarlo en un lenguaje de programación, la primera fase es
el objetivo fundamental de esta asignatura [10], la segunda
La primera asignatura de programación (CS1) supone el apoya la primera. Esta afirmación sugiere que la elección del
primer acercamiento a las técnicas de resolución de proble- lenguaje es poco relevante, sin embargo, nos debatimos en-
mas con el ordenador. El frustrante grado de abandono y los tre sortear las deficiencias pedagógicas que conlleva tal o cual
bajos rendimientos académicos causan que una y otra vez nos lenguaje de programación relevante en la industria o apoyar-
replanteemos si Procedimental u Orientación a Objetos (OO) nos en un lenguaje especialmente diseñado para la docencia,
primero (u otros enfoques con menos seguidores) y la adecua- que tememos desmotivador para el alumno, al parecerle me-
ción del lenguaje de programación empleado como apoyo de nos rentable su esfuerzo. Y. . . nos lanzamos a la caza y cap-
nuestra tarea docente (las actas de JENUI lo muestran reite- tura de un lenguaje:
radamente). No es un problema endémico de España [3, 13]. que disponga de multitud de motivadores recursos do-
Incluso, parece que esta dificultad es una concreción de un centes (lo valoraremos en la Sección 4.1),
problema más general: la dificultad aparece ante la primera
asignatura que les enfrenta con la resolución de problemas [5] que permita estructurar bien el código (4.2),
en cualquier titulación universitaria. con conceptos claros y sintaxis muy legible (4.3),
El paradigma OO nació para barajar la complejidad, mien-
con mensajes de error (tanto de sintaxis como en tiempo
tras que necesariamente los ejercicios primeros han de ser
de ejecución) fáciles de comprender y oportunos (4.4),
simples. Es deseable poner en práctica el aprendizaje teórico
cuanto antes, sin enfrentar al alumno a líneas de código inin- que fomente el establecimiento de buenos hábitos de
teligibles (al principio). Podría, por tanto, no estar justificado programación (4.5),
el enfoque OO primero. Sin embargo, los defensores de esta
propuesta argumentan que aparece un problema de «despla- que permita usar sus recursos de forma incremental,
zamiento de paradigma» [7], según el cual les resulta difícil proporcionando rápida retroalimentación a las enseñan-
aprender OO justo porque han conocido Procedimental. zas teóricas (4.6) y
De las dos fases en el proceso de resolver un problema con fundamentos similares a los de otros lenguajes, para
mediante un programa: (i) diseñar el algoritmo y (ii) imple- facilitar la transición (4.7).
ReVisión vol. 8, núm. 2. Mayo 2015 17
ISSN 1989-1199
18 ReVisión. Vol. 8, núm. 2
Y, adicionalmente, 3. Python en docencia
que no requiera un desembolso económico y que sea En 1999 Van Rossum [26] defiende la conveniencia de que
multiplataforma (para facilitar el acceso al alumnado) todos los usuarios de ordenadores sean programadores. Con-
(4.8), cibe la programación como una habilidad básica (paralela al
lenguaje natural y las matemáticas) y propone incluirla en el
que facilite la transición entre paradigmas (4.9) y currículo de la escuela elemental. Adquiere el compromiso de
dotar al lenguaje Python de herramientas y material pedagó-
que sea relevante en el mercado laboral (4.10). gico, arropando una comunidad de usuarios. Dicho artículo
referencia una exitosa experiencia de la Universidad Carnegie
¡Ahí es nada lo que pedimos! Seguro que aún he olvidado Mellon entrenando programadores noveles. Catorce años des-
algún requisito fundamental. pués, la programación está en los cv de los países más avan-
Me acerco, en este artículo, una vez más, al tópico del len- zados en educación.
guaje adecuado como soporte a la docencia de CS1, poniendo Stajano [27] resalta que el gran conjunto de librerías dis-
la mira en Python. Tras breve presentación del lenguaje, el ar- ponibles en Python permiten proponer a los alumnos trabajo
tículo analiza el uso de Python en la docencia, evalúa el grado útil e interesante en CS1, en vez de quedar confinados a ejer-
de satisfacción respecto a cada punto de la anterior desidera- cicios sosos y desmotivadores, cuya vida acaba el día que han
ta y propone la estructura del curso. No seré exhaustiva en la obtenido el aprobado en la asignatura (poblados de listas de
documentación que corrobore las tesis que expongo. Debiera números, en las que les pedimos que busquen las cosas más
decir hipótesis, en vez de tesis, pues de hecho, no he impartido inverosímiles e inútiles). Este tipo de ejercicios se ha venido
docencia con él. Sólo me he proyectado en cómo organizarla en llamar throw-away code (código de usar y tirar, o de un
apoyada en este lenguaje. Un artículo anterior presenta la par- solo uso). Si adelantamos la subprogramación en el temario
te procedimental del lenguaje (en su versión 3.4.1), en un in- todo lo posible, la fortaleza y versatilidad de las bibliotecas de
tento de facilitar el camino al profesor que se plantee abordar Python (manejo de caracteres, protocolos de correo electróni-
dicha experiencia. co y XML, la interfaz a S.O. gráficos, paquetes matemáticos,
fechas y tiempo, compresión de datos, control de calidad) per-
mite desde los primeros ejercicios proponer problemas reusa-
2. ¿Quién es Python? bles y útiles en su futuro profesional.
Muchas experiencias posteriores resultan exitosas usan-
Creado a principios de los noventa por Guido van Rossum. do Python en CS0 y CS1, incluso en CS1 y CS2, dejan-
Es un lenguaje de programación interpretado de libre distribu- do para el tercer semestre el acercamiento a otros lengua-
ción. Soporta programación imperativa, orientación a objetos, jes [25, 1, 2, 17]. Python se ha convertido en el lenguaje más
y, en menor medida, programación funcional. Tiene tipos di- popular para CS1 entre las universidades mejor ubicadas en
námicos, conversión de tipos explícita, maneja excepciones y la clasificación de universidades de Estados Unidos [12] (8 de
es multiplataforma. las 10 primeras y 27 de las 39 primeras).
En la primera página del manual, una poesía: Varias universidades españolas (Oviedo, UJI, UNED de
Granada, Deusto, Alicante,. . . ) [9] ofrecen actualmente cur-
Bello es mejor que feo sos de Python, ya sea como primer lenguaje o posterior; apo-
Explícito es mejor que implícito yándose en Arduino o no; ya sea para alumnos de ingenie-
Simple es mejor que complejo ría informática, como para físicos, químicos y estudiantes de
La legibilidad cuenta otras ingenierías.
Los errores nunca deben dejarse pasar silenciosa-
mente
(a menos que hayan sido silenciados explícita- 4. Características deseables en un len-
mente)
Frente a la ambigüedad, rechaza la tentación de guaje para CS1
adivinar
En este apartado evaluamos en Python cada una de las ca-
Debería haber una —y preferiblemente sólo
racterísticas enumeradas anteriormente como deseables para
una— manera obvia de hacerlo
el lenguaje utilizado en CS1.
Ahora es mejor que nunca
Si la implementación es difícil de explicar, es una
mala idea 4.1. Disponibilidad de recursos docentes
Si la implementación es fácil de explicar, puede
que sea una buena idea Como ya he mencionado, no pretendo ser exhaustiva en
este documento, y desde luego no lo voy a ser en este apar-
Mezclar poesía e informática es sugerente. tado; pero podemos afirmar que la disponibilidad de recursos
Peña: Python como primera aproximación a la programación 19
docentes no será el aspecto por el que desterrar el lenguaje 4.2. Estructurable
bajo consideración.
El teorema estructurado (Arquitectura de von Neumann,
En cuanto a entornos de edición, Python puede trabajar 1946) establece que toda función computable puede ser ex-
en interactivo, como cualquier lenguaje interpretado, lo cual presada en términos de secuencia, alternativa (if – then) y bu-
simplifica los primeros pasos y las dudas posteriores sobre cle 0 − n (while). La programación estructurada ha proba-
el comportamiento. Adicionalmente, junto con la instalación do que produce programas más legibles y mantenibles, menos
estándar viene un confortable entorno de edición, con todas propensos a errores [14]. En esta metodología, todo progra-
las facilidades deseables: posibilidad de tener varias venta- ma está estructurado en bloques y cada bloque tiene una única
nas abiertas simultáneamente, cortar y pegar, distinción en- entrada y una única salida La inclusión de las instrucciones:
tre palabras clave, identificadores y comentarios, búsqueda y alternativa doble (if – then – else),múltiple (case), el bucle
sustitución, ejecución sin cerrar la edición, emparejamiento 1 − n (do – while) y la subprogramación, aportan claridad,
de delimitadores (“(” y “)”) documentación en línea, y ayuda evitan redundancia de código y esta última facilita la reutiliza-
sensible al contexto, como presangrado de bloques o especifi- ción. La programación estructurada simplifica la depuración,
cación de las cabeceras de función. También es cómodo, pero incrementa el rendimiento de los programadores y produce
más flojo, en depuración. Existen muchos entornos de edición programas de mayor calidad [4].
alternativos. Por ejemplo bpython o IPython que implemetan Sea cual sea el lenguaje soporte, conceptualmente nos res-
autocompletado de instrucciones. tringimos, en CS1, a este subconjunto de instrucciones y lo
Hay disponibles herramientas de visualización. Guo [11] que no exista en el lenguaje lo simularemos.
muestra paso a paso lo que ocurre en el ordenador cuando se Por supuesto Python dispone de los elementos básicos de
ejecuta una sentencia en la línea de instrucciones. Esta he- la programación estructurada, pero sorprende la ausencia de
rramienta puede servir como depurador o sólo para ayudar a la alternativa múltiple y mucho más la del bucle 1 − n.
comprender el funcionamiento interno del lenguaje (está dis- La alternativa múltiple se usa, bien para gestionar el flu-
ponible en Internet). El visualizador de Zingaro [29] incorpora jo de ejecución (típica situación de un menú), que habremos
los casos de prueba diseñados por el profesor lo que permite de resolverlo con alternativas anidadas, bien para la elección
detectar sobre la marcha, en el propio laboratorio, dónde están de un valor entre varios. Esta última situación se resuelve de
fallando los alumnos. forma elegante e incluso con ventaja en mantenibilidad, acce-
Python no pasa desapercibido. Sus seguidores lo son fer- diendo al elemento correspondiente de una secuencia. En el
vientemente. La documentación así generada rezuma entu- Cuadro 1 se propone un ejemplo de solución de estos dos pa-
siasmo y un inusual grado de informalidad, rindiendo culto trones y el código equivalente con el switch de C, a modo de
al humor. No en vano, el nombre del lenguaje es un homenaje comparación. Gana el acceso a secuencia por goleada (cuando
al famoso grupo cómico británico. es aplicable).
FORTRAN fue criticado por la carencia de bucle 1 − n
Es muy probable que el primer libro que caiga en tus ma- en los entornos pedagógicos. Una pena que Python caiga en
nos sea pedagógicamente satisfactorio (para mí fue el libro de la misma falta. En el Cuadro 2 se recogen 3 posibles maneras
Payne [21]), y que encuentres colecciones de breves y metó- de paliar esta ausencia. Algunos programadores (por ejemplo
dicas notas que ponen el dedo justo en la llaga de aspectos del Ortiz [20]) optan por una cuarta vía con un while True, que
lenguaje que pueden acarrear una dificultad al novicio y ex- me niego a considerar como opción.
perto en otros lenguajes, escritas por puro placer, por ejemplo
por un músico [18] (al que no le da de comer la programa-
ción). En castellano tenemos un libro de Marzal y Gracia [15] 4.3. Legibilidad de la sintaxis y claridad de
de libre acceso. Con un planteamiento muy práctico, afron- conceptos
ta de forma progresiva los programas, acompañando al lector
El lenguaje es limpio, en el sentido de que está basado en
novel en su proceso de maduración. Tiene el inconveniente de
la combinación de pocos y potentes constructores ortogonales.
estar escrito para la versión 2. El libro de Dierbach [8] está
Está libre de elementos mantenidos sólo por compatibiliza-
diseñado para impartir CS1, centrado en resolución de pro-
ción con versiones anteriores. Python potencia la legibilidad.
blemas. Dispone de complemento para el profesor, multitud
Por ejemplo:
de ejercicios resueltos y colecciones de diapositivas.
Se dispone de acceso gratuito a colecciones de ejercicios. los operadores !, k y && de C, en Python se escriben
Cito sólo el de Punch [22] por poner un ejemplo, con más de not, or y and, y se escribe
100 proyectos de programación interesantes, clasificados por
temas y grados de dificultad, con directrices de resolución, 2<=n<=10 en vez de (2<=n) AND (n<=10).
planificación temporal, etc. No requiere terminadores de instrucción (“;”). Meyer, ad-
Quiero pensar que es probable que el alumno encuentre mirado pedagogo, recoge en su libro [16], no sin cierto grado
cercano y motivador el estilo desenfadado característico del de frustración «the main reason his students loved the notation
entorno Python y se contagie del entusiasmo que le rodea. (de EIFFEL) is that they do not need semicolons— a comment
20 ReVisión. Vol. 8, núm. 2
Cuadro 1: Gestión de múltiples alternativas y comparación con switch
de C. (*) PRE: 1 ≤ num ≤ 7
Cuadro 2: Tres alternativas para simular el bucle 1 − n.
Peña: Python como primera aproximación a la programación 21
which any future language designer, with or without grandiose elegancia.
plans, should find instructive or at least sobering.» Permite sobreescribir las funciones del lenguaje. Esta op-
Python no tiene indicador de inicio y fin de bloque (del ción puede generar confusión:
tipo { }, o begin/end). El bloque es marcado por su sangrado
(apreciable por el compilador). De modo que, todo código que >>> abs=3
escriba el programador novel está correctamente sangrado, so >>> abs(-5)
pena de que no funcione. Traceback (most recent call last):
Generalmente, aceptamos pseudocódigo como herramien- File "<pyshell#1>", line 1, in <module>
abs(-5)
ta adecuada para expresar algoritmos. El pseudocódigo no dis-
pone de terminadores de línea y marca los bloques, precisa-
mente, mediante sangrado. Ciertamente, un algoritmo escrito ¡¿Cómo que abs no es llamable?!
en Python y en pseudocódigo tiene un aspecto muy parecido. Existen en el lenguaje dos tipos de funciones: internas
De otra parte, la experiencia docente con otros lenguajes (built-in), que se invocan en la forma habitual de la progra-
indica que el trabajo con punteros resulta especialmente difícil mación procedimental, y funciones específicas de cada uno
al alumno. En Python no existen punteros, o mejor dicho, todo de los tipos de datos, que se invocan como método del obje-
son punteros. En Python hay que ver una variable como una to solicitante (objeto.metodo(arg)), al estilo OO. ¿re-
referencia a un valor, no como el nombre de una posición de sultará problemático saber cual es de cada tipo? ¿Por qué
memoria. En principio me aterró pensar que tendría que pre- len(cadena) y sin embargo cadena.upper()?
sentar punteros en mi segundo contacto con el alumno, pero Quizá, el elemento menos brillante en cuanto a legibili-
conforme lo he ido madurando, este enfoque es más homogé- dad del código generado son las cabeceras de subprograma:
neo e intuitivo. No hay dos tipos distintos de variables (tipo ni se especifica el tipo de la función, ni el de los argumentos.
y puntero a tipo), toda variable es una referencia. Intuyo que A cambio, ofrece un servicio de valor añadido: la documenta-
esto va a simplificar la conceptualización. ción de los subprogramas es opcional, pero si el programador
El modo del paso de parámetros (entrada/salida/entrada- la incluye, aparece al escribir el nombre de la función en el
salida) es otro de los escollos que encuentran nuestros alum- editor. Adicionalmente, los argumentos se comportan como
nos en Pascal o FORTRAN, y es una escarpada cumbre en C las variables de su tipo respecto a la asignación. A ojos de un
(con sus lindas estrellitas y “andpersandes”). Es un tema para programador de otro lenguaje, como paso por valor cuando
el que hemos tenido que buscar recursos mimados que cla- son de tipos inmutables y por referencia para el resto de tipos
rifiquen cuando poner var. He vivido un proceso equivalente (así, ¡sin previo aviso!). Esto puede provocar pesadillas en el
al de la asignación: ¡Horror! ¡No tengo manera de indicar el programador. Es imprescindible explicar muy bien la gestión
modo! Pero ¿Hay algo más claro que el que todos los argu- de memoria en Python, antes de entrar a la subprogramación o
mentos que entran sean “de entrada” y devolver (a la salida) al menos antes de entrar a los tipos mutables, para prevenirlo.
los que deseo, además que sean de salida? A continuación me Aún así es previsible que los programadores procedentes de
pregunto, ¿y si quiero que me devuelva más de un valor? El otros lenguajes tropezarán aquí.
subprograma intercambiar(x,y) es un clásico entre los
Aunque el hábito no hace al monje. . . el nombre que
clásicos. ¡Ah! ¡Vale! En Python una función puede devolver
demos a las cosas condiciona tremendamente nuestra visión
una tupla (1 o varios elementos).1
sobre ellas. En el entorno Python, a la instrucción “varia-
Posiblemente, este enfoque acaba con esta dificultad clá-
ble=expresión”, deberíamos llamarla referenciación. Propon-
sica de CS1.
go evitar llamarla asignación.
Pese al entusiasmo poético por la calidad del software en
este entorno, aún encontramos usos inadecuados de las estruc- Y, hablando de la importancia de los nombres, otros dos
turas de control (con menos frecuencia que en documentacio- comentarios
nes de otros lenguajes, especialmente de C), contra los que
debemos advertir a los alumnos y que tienen fácil alternativa. 1. Python llama set a su tipo de datos conjunto mutable y
Ejemplos típicos se muestran en el Cuadro 3. frozenset a la contrapartida inmutable. Por una senci-
lla regla de tres, la contrapartida inmutable de listas se
Como aspectos negativos: llama. . . Pues no. Se llama tupla
Las secuencias del mundo real empiezan en uno (enero
= 1, lunes = 1, elMejorDeMisAlumnos = 1),
pero en los lenguajes de programación suelen empezar en 2. La afirmación «A es una variable de tipo inmutable»
cero. Esto genera cantidad de “−1” distribuidos por el códi- chirría. Estimo que hubiera ayudado a dulcificar el ca-
go, que dificultan la lectura (Pascal permite decidir de dónde mino de transición entre lenguajes (en ambos sentidos)
a dónde van los índices). Python comienza en 0, y aquí ha haber elegido el calificativo “estático/dinámico”, en vez
desperdiciado también una oportunidad de distinguirse en de “mutable/inmutable”
1 En el documento de presentación de Python se resuelve este ejercicio. De hecho, como la gestión de tuplas es tan ponente, ni siquiera necesito subprogramar
(x,y=y,x). Perdimos un clásico.
22 ReVisión. Vol. 8, núm. 2
Cuadro 3: Algunos errores clásicos.
4.4. Claridad y oportunidad de los mensajes de Es importante fomentar la rigurosidad en el estudiante, a la
error hora de analizar un problema. Con frecuencia les cuesta traba-
jo detectar los casos especiales. En primer curso hay una lucha
Los mensajes de error, tanto de sintaxis como en tiempo de típica: «pero. . . si compila y funciona». Una de las actitudes a
ejecución, son muy claros y descriptivos. Simplemente pongo fomentar es el rigor. Debemos exigir que funcione (siempre y
algunos ejemplos: «ABS espera exactamente 1 argumento (2 sólo) cuando debe funcionar; no «a veces» (ejemplo: factorial
recibidos)»: de −1). Python dispone de un gestor de excepciones fácil de
usar, que puede facilitar esta tarea. En la Figura 1 se muestra
>>> abs(3,4)
Traceback (most recent call last): un programa ejemplo y el resultado de su ejecución.
File "C:/Python34/borar.py", line 1, in < Respecto a la modularidad, Python proporciona muy buen
module> control de la visibilidad y ámbito de las variables. Es imposi-
abs(3,4) ble hacer un uso no intencionado global de una variable inmu-
TypeError: abs() takes exactly one argument table. En cuanto se usa pasa a ser local. Hay que explicitar el
(2 given) uso global con global o nonlocal.
Como aspectos negativos:
«los objetos tupla no permiten la asignación de elementos»: Hace conversión implícita de valores numéricos para com-
patibilizar operaciones. Aunque esto resulte a la larga cómodo
>>> tupla = (1, 2, 3, 4) al programador, pedagógicamente es inconveniente (pero in-
>>> tupla[0] = 5
cluso Pascal lo hace).
Traceback (most recent call last):
File "<pyshell#55>", line 1, in <module>
En cuanto a la subprogramación, un subprograma o
tupla[0] = 5
hace algo, en cuyo caso su nombre es
TypeError: ’tuple’ object does not support
un verbo de acción: pintaX, imprimeY,
item assignment
limpiaPantalla. . . ), o
Los programas de los nóveles ganan en legibilidad por el calcula algo, y su nombre es justamente el nom-
uso obligatorio de la indentación. bre de lo que devuelve: perimetro, maximo, etc.
Python invita al programador a adherirse a unas normas de Es decir, sintácticamente el nombre de una función
estilo en su programación: PEP8.2 La adhesión a unas normas es un sustantivo. Excepto cuando devuelve un boo-
de estilo desde el inicio es pedagógicamente relevante, no sólo leano, circunstancia en que típicamente contiene los
por el incremento directo de la calidad del código generado, verbos ser o estar: esMayor, [esta]Encontrado.
sino por potenciar la uniformidad en el equipo de trabajo y Desafortunadamente, este lenguaje tampoco permite
reafirmar el concepto de estándar. el signo “?”,3 que nos permitiría escribir casi poe-
Dispone de conversión explícita entre todos los tipos, de sía: esMayor?(a,b). Es importantísimo establecer
modo que podemos forzar, metodológicamente, que la em- el hábito de mimar la semántica de los identificadores
pleen (en otros lenguajes no siempre está disponible). elegidos.
2 https://www.python.org/dev/peps/pep-0008/
3 Por cierto, si permite acentos en los identificadores.
Peña: Python como primera aproximación a la programación 23
Figura 1: Manejo de excepciones en Python.
El lenguaje Python no hace diferenciación entre procedi-
miento y función dificultando la claridad de este criterio se- >>> #error redondeo en reales
>>> 100./3.
mántico, pero una función puede no devolver nada (procedi-
33.333333333333336
miento). De otra parte, en Python, un subprograma puede de- >>> #elementos de una lista de tipos
volver una lista. Como los paréntesis son opcionales, puede >>> #diferentes. Incluso mutables
parecer que una función está devolviendo varios parámetros. >>> miLista=[1,’a’,[2,3]]
No tienen ningún inconveniente en devolver una lista si en- >>> len(miLista)
contramos, en el entorno, un nombre adecuado en el contexto. 3
Un ejemplo: >>> type(miLista[1])
<class ’str’>
def semana(): >>> type(miLista[2])
return ‘lunes’, ‘martes’, ...’domingo’ <class ’list’>
Por el contrario ¿Qué nombre le daríamos a una función
que devuelva el área y el perímetro de un círculo/circunfe-
4.6. Generalización a otros lenguajes
rencia? Incluso en la librería estándar se dispone de divmod Una cuestión que me preocupa en cuanto a la elección de
como función (que devuelve div y mod ), además de los ope- Python para CS1, reside justamente en lo que lo diferencia
radores // y % para división entera y módulo respectivamente. de otros lenguajes. Empiezo mi curso de fundamentos de la
Nuestra elección es por éstos últimos. programación con la transparencia de la Figura 2, que recoge
4.5. Rápida retroalimentación al aprendizaje “todo” lo que vamos a trabajar a lo largo del cuatrimestre.
Restringiéndome al paradigma procedimental y adoptan-
Entiendo que éste es uno de los puntos más fuertes de este do una metodología acorde con la programación estructurada
lenguaje. El consabido primer proyecto queda así de simple: y modular, afirmaba yo, que lo que estábamos trabajando era
bastante independiente del lenguaje seleccionado. Desde Ba-
>>>‘hola mundo’
sic, COBOL, FORTRAN, C, Pascal, PL/I, etc. Llámese record
‘hola mundo’
o struct, escríbase { } o begin/end, el concepto es equivalente.
Aparte de las diferencias sintácticas, ciertamente hay diferen-
A partir de aquí, el entorno interactivo permite usar los cias: el constructor cadena no es exactamente una especiali-
recursos del lenguaje de forma independiente e incremental, zación de arreglo en C. Puede existir, en el lenguaje elegido,
de modo que facilita la realización de pruebas y la demostra- el tipo date, o el complex, o puede que haya que construir-
ción directa de enseñanzas teóricas, proporcionando una rápi- lo. Puede no existir procedimiento (pero si funciones que no
da retroalimentación. El docente dispone del entorno de pro- devuelven nada), FORTRAN no tiene do-while (pero lo debe-
gramación en clase y, directamente, en una línea, confirma su mos simular). El switch case de C requiere un break tras cada
afirmación. Esta facilidad nos permitirá desterrar las transpa- caso, para que funcione como el de Pascal. En FORTRAN
rencias (Cano [6] opta por esta aproximación). En el primer se especifica si el parámetro de un subprograma es de entra-
día de clase, posiblemente se afirmará que no existen infinitos da/salida/entrada+salida, en Pascal no se distingue entre los
en informática y se hablará de los errores de redondeo. Más dos últimos, C sólo tiene parámetros de entrada, pero se pue-
adelante se afirmará que los elementos de una lista pueden ser de conseguir el mismo efecto a través de punteros y un largo
de cualquier tipo, etc. Veamos un ejemplo donde se corrobo- etc., que conocemos. Pero, cualquier persona que haya apren-
ran las dos afirmaciones anteriores: dido a programar en uno de estos lenguajes, dotada de una
24 ReVisión. Vol. 8, núm. 2
INGENIERO INFORMÁTICO = RESOLUCION PROBLEMAS CON EL ORDENADOR
proceso
solución
problema
datos ordenador
veces
asignación
1 llamada procedimiento
Entero
Booleano IF c THEN A [ ELSE B]
simple
Carácter
0o1 CASE ordinal
Real FOR
hacer
0on WHILE
iterativo
Datos Proceso 1on REPEAT
Arreglo Cadena n
RAM Estructura
recursivo
compuesto
Memoria 2º Fichero
barajar complejidad función
procedimiento
PASCAL, C, FORTRAN….
Figura 2: Contenido de la asignatura de Fundamentos de la programa-
ción.
chuleta con la sintaxis y conociendo pinceladas acerca de la Ya hemos comentado que este cambio de enfoque pue-
filosofía del nuevo lenguaje al que ha de enfrentarse, puede de eliminar algunos puntos frecuentes de tropiezo en otros
traducir sus programas al nuevo contexto, prácticamente línea lenguajes procedimentales, pero, en dirección contraria, ¿En-
por línea. Esta reflexión me permitía pensar que era bastante contrará dificultad un programador de Python al necesitar un
intrascendente la elección del lenguaje para primer curso. De contenedor auxiliar para intercambiar los valores de dos va-
hecho he usado casi todos estos lenguajes en la docencia del riables? ¡Con lo fácil que es simplemente cambiar el puntero
primer lenguaje, en algún momento (¡excepto C! ¡afortunada- al que referencia el indentificador!
mente! que hasta Strouptrup propone que no se empiece por Oye, igual lo que es complejo son los tipos de datos clási-
ahí [27, 28] para evitar al novel los detalles tediosos cercanos cos y no los punteros.
a la máquina). El enfoque es distinto a otros lenguajes, la potencia es dis-
Esta (aunque débil) equivalencia entre los lenguajes, no es tinta, de modo que la estructuración de los algoritmos también
aplicable a Python. No encontramos nada parecido a los cons- lo es y por tanto su elección es más arriesgada.
tructores de tipo array y struct (Numpy es una librería potente
que gestiona arreglos numéricos, de forma muy eficiente, pe-
4.7. Libre distribución y multiplartaforma
ro no forma parte del lenguaje básico). Peor aún, la gestión
de memoria es completamente diferente y esto implica que, El que Python sea de libre distribución y multiplatafor-
incluso los conceptos de variable y asignación son diferen- ma facilita el acceso al alumnado desde su ordenador y mi-
tes. En el resto de lenguajes, una variables es un “contenedor” nimizan los costes al centro docente. Hoy en día hay muchos
(donde colocar un valor de un determinado tipo). Es una po- productos que satisfacen estas caraacterísticas. Nada más que
sición de memoria, que tiene un determinado estado en cada ratificar que Python también.
momento de la ejecución y un nombre. En Python es un pun-
tero a un objeto. La instrucción: a=b en C (o a:=b en Pascal)
produce una copia de b, llamada a, en otra posición de me-
4.8. Transición entre paradigmas
moria, que puede ser modificada independientemente de b. En En principio, no tener que cambiar de lenguaje para cam-
Python a no es una copia de b, sino un puntero a b. biar de paradigma es una ventaja. Toda la sintaxis que co-
Las variables no se declaran, e incluso cambian de tipo a nocen los alumnos es válida. Nunca he impartido OO, pero
lo largo de la ejecución del programa. he presenciado los dificilísimos encajes de bolillos que hacía
Peña: Python como primera aproximación a la programación 25
un compañero para hacer entender el papel de self y las su- Tema 1: Resolución de problemas con el ordenador. Compo-
tiles diferencias entre métodos de clase y métodos de instan- nentes de un ordenador, almacenamiento en memoria:
cia. Además, uno de los escollos en el consabido “problema bit, byte, codificación y tipos. Lenguajes de programa-
del desplazamiento de paradigma”, que sufren los alumnos ción: compiladores e intérpretes. El ciclo de vida del
al saltar de la programación procedimental a la OO, es que software. Herramientas de diseño de algoritmos (3h).
en los subprogramas “les sobra” un argumento (al pastor de
mi abuelo le faltaba un burro, todas las noches al hacer el re- Tema 2: Concepto de tipo de datos. Variables y constantes.
cuento: sobre el que iba montado). En Python, al construir la Tipos simples. Referencia (asignación). Funciones in-
plantilla de una clase, el primer argumento es siempre self. A ternas y de tipo (2h).
programadores experimentados en OO, puede parecerles un Tema 3: Descomposición modular. Diagrama de contexto.
artefacto poco elegante, pero ciertamente ayuda a los progra- Definición del patrón de función. Llamada de función.
madores nóveles a entender quién hace qué y cómo funciona Ámbito y visibilidad. Globales. Documentación de sub-
la programación orientada a objetos. programas (2h).
Tema 4: Diseño de pruebas. Manejo de excepciones (1h).
4.9. Relevancia en el mercado laboral
El mercado laboral muestra reticencias en usar lenguajes Tema 5: Alternativa y bucle controlado por condición (2h).
interpretados, condición que actúa negativamente sobre los Tema 6: Tipos cadena, [complex,] conjunto congelado [y tu-
tiempos de ejecución (Python dispone de librerías rápidas para pla]. Instrucción for (3h).
tareas especializadas, y aceleradores para paliar este efecto).
En el entorno académico, sin embargo, podemos tomar ven- Tema 7: Uso de la biblioteca estándar: date, random, etc.
tajas de la inmediatez que proporciona el intérprete, sin que (1h).
nos afecten sus inconvenientes. En cualquier caso, el interés
de incluir este apartado en este documento es la hipótesis de Tema 8: Revisión del concepto de asignación en Python. Ti-
que trabajar con un lenguaje relevante en el mercado laboral po listas, [diccionario y conjunto]. Tipos mutables co-
pueda motivar a los alumnos, por lo que vamos estimarlo. mo argumentos (3h).
La organización asegura disponer de «decenas de miles» Tema 9: Ficheros (2h).
de usuarios [24], pero es difícil cuantificar los usuarios de una
herramienta de libre distribución. Más representativa informa- De forma suave, puede continuarse con OO, si se desea
ción aporta el listado de grandes proyectos realizados con Pyt- este enfoque.
hon, en un amplio rango de áreas [23]. Indiscutiblemente hay La Figura 4 recoge una visión general de la parte procedi-
tareas importantes en la lista. Muenchen [19] sugiere diferen- mental del lenguaje.
tes indicadores para medir la popularidad y posicionamiento El tipo complex es de manejo sencillo, pero no tiene una
en el mercado de herramientas de software (anuncios de tra- aportación relevante de cara a la resolución general de proble-
bajo, artículos académicos, libros publicados, blogs, populari- mas. Lo he incluido por completitud, pero puede ser elimina-
dad de los sitios web relacionados, resúmenes de uso, foros de do. Igualmente el tipo conjunto puede ser mencionado junto
discusión. . . ), cada uno de estos indicadores con sus ventajas a las listas (por el paralelismo tupla/lista, conjunto congelado/
e inconvenientes. Nos restringimos a un breve escarceo por conjunto) pero su estudio es prescindible. Para un breve curso
el primero que parece ser el más representativo. Indeed.com introductorio (como podría ser un CS0), tras el cual el alumno
es la mayor web de ofertas de mercado de trabajo en Estados pasara a conocer otros lenguajes, el subconjunto de temas 1,
Unidos. La Figura 3 recoge una comparativa del número de 2, 3, 5, 6 y 7 es conceptualmente reutilizable. Aun siendo la
ofertas en diferentes lenguajes en el contexto de análisis de gestión de memoria distinta a la de otros lenguajes, el com-
datos (de febrero de 2014), en la que Python ocupa el tercer portamiento es equivalente. Hay muchas cosas que se pueden
lugar, habiéndose puesto por encima de C (con sus variaciones hacer sin usar los tipos mutables.
agrupadas: C++, C#). Ante los acortamientos de créditos en los planes de es-
En España, Python sigue por debajo de C, tal como indica tudio muchos centros han eliminado el trabajo con ficheros.
el Cuadro 4. Sin embargo, las cifras permiten afirmar a nues- Me parece básico hacer algún trabajo de almacenamiento en
tros alumnos que Python está en el mercado laboral y, dado el memoria secundaria antes de iniciar el trabajo con Bases de
incremento de universidades que lo imparten, previsiblemente Datos
será más relevante en el próximo futuro.
6. Conclusiones
5. Estructuración del curso
La filosofía subyacente al lenguaje y la documentación
La ordenación de la exposición a los distintos componen- disponible pueden favorecer el establecimiento de buenos há-
tes de una asignatura puede ser la siguiente: bitos de programación, como son la documentación interna, la
26 ReVisión. Vol. 8, núm. 2
Figura 3: Lenguaje solicitado en las ofertas de empleo. (Marzo de 2014
Indeed.com).
Lenguaje Tecnoempleo Infoempleo Infojobs
java 836 264 1338
C 110 292 250
Python 79 28 163
Cuadro 4: Ofertas de empleo en diferentes lenguajes. (Septiembre de
2014).
Peña: Python como primera aproximación a la programación 27
Figura 4: Elementos del lenguaje Python.
modularización y el reuso, aspectos fundamentales en el pro- [4] Corrado Bohm y Giuseppe Jacopini: Flow Diagrams,
ceso actual de desarrollo de software. Turing Machines and Languages with Only Two Forma-
El entorno interactivo que permite poner en práctica las tion Rules. Communications of the ACM vol. 9 , núm.
exposiciones teóricas desde el primer momento, con muy ba- 5, pp. 366-–371. doi:10.1145/355592.365646. Mayo de
jo esfuerzo; la claridad de los mensajes del compilador y de 1996
los errores de ejecución; el entusiasmo que se percibe en los
[5] R. Brookshire y S. Palocsay: Factors contributing the
programadores de este lenguaje y en la documentación que
success of undergraduate Businnes Students in Mana-
ellos generan; el sencillo manejo de excepciones hacen de Pyt-
gement Science Courses. Decision Sciences Journal of
hon una alternativa extraordinaria para iniciar al alumno en los
Innovative Education vol. 3 , núm. 1, pp. 99–108. 2005.
procesos de abstracción requeridos para la construcción de al-
goritmos. [6] http://cacheme.org/
Python permite iniciar el acercamiento desde la perspec- curso-online-python-cientifico-ingenieros/
tiva del paradigma procedimental, facilitando el salto al para- Universidad de Alicante
digma OO, minimizando el problema del desplazamiento de
paradigma. [7] Tim DeClue: OO and the principles of learning theory
Mantiene diferencias fundamentales respecto a otros len- a new look at problems and benefits. SIGCSE 1996, pp.
guajes de programación dentro del paradigma procedimental, 232–236.
de modo que el aprendizaje es menos transportable. [8] Charles Dierbach: Introduction to Computer Science
Algunos de los puntos problemáticos clásicos desapare- Using Python: A Computational Problem-Solving Fo-
cen, pero a cambio surgen otros. Tendremos que buscar nue- cus, John Wiley & Sons. 2012
vos recursos que los aclaren.
Puede que ni el cambio de paradigma ni el de lenguaje, [9] http://www.aenui.net/jenui2014/48.pdf
resuelvan el problema, pero vale la pena intentarlo. ¡¡Por no- http://www.aenui.net/jenui2014/64.pdf
sotros no va a quedar!! http://cacheme.org/
curso-python-ingenieria-alicante/
http://paginaspersonales.deusto.es/
Referencias dipina/python/ProgramacionbasicaenPython.
doc
[1] KK Agarwal, A Agarwal, ME Celebi: Python puts a http://www3.uji.es/~vjimenez/PL/
squeeze on java for CS0 and beyond. Journal of Com- python-by-vilar.pdf
puting Sciences in . . . , 2008
[10] Hans Fangohr: A Comparison of C, MATLAB, and Pyt-
[2] KK Agarwal, A Agarwal, L Fife: Python and Visual hon as Teaching Languages in Engineering. Lecture No-
Logic c : a good combination for CS0. Journal of Com- tes in Computer Science Volume 3039, 2004.
puting Sciences in . . . , 2012
[11] Philip J. Guo: Online python tutor: embeddable web-
[3] J Bennedsen, ME Caspersen: Abstraction ability as an based program visualization for CS education, Procee-
indicator of success for learning object-oriented pro- dings of the 44th ACM technical symposium on Com-
gramming? ACM SIGCSE Bulletin vol. 38 , núm. 2, pp. puter Science Education Denver, Colorado, USA. 6 a 9
39 – 43. Junio de 2006 de marzo de 2013.
28 ReVisión. Vol. 8, núm. 2
[12] Philip Guo: Python is Now the Most Popular [25] David Ranum, Bradley Miller, John Zelle, Waverly y
Introductory Teaching Language at Top U.S. Mark Guzdial: Successful approaches to teaching intro-
Universities http://cacm.acm.org/blogs/ ductory computer science courses with Python. ACM
blog-cacm/176450-python-is-now-the-most- SIGCSE Bulletin vol. 38, núm. 1, pp. 396–397. Marzo
popular-introductory-teaching-language-at de 2006.
-top-us-universities/fulltext
[26] Guido van Rossum: Computer Programming for Every-
[13] J. Kasurinen y U. Nikula: Lower Dropout Rates and Bet- body (Revised Proposal): A Scouting Expedition for
ter Grades through Revised Course Infrastructure. En the Programmers of Tomorrow. CNRI Proposal 90120-
actas del 10th International Conference on Computer 1a, Corporation for National Research Initiatives. Julio
And advanced Technology in Education 2007. de 1999. Disponible en https://www.python.org/
doc/essays/cp4e/
[14] P Kraft: The industrialization of computer program-
[27] Frank Stajano: Python in Education: Raising a Genera-
ming: from programming to ’software production’- Case
tion of Native Speakers. Proceedings of 8 th International
studies on the labor process. New York: Monthly Re-
Python Conference. 2000.
view Press, 1979
[28] Bjarne Stroustrup: Learning Standard C++ as a New
[15] Andrés Marzal e Isable Gracia: Introducción a la pro- Language, The C/C++ Users Journal. Mayo de 1999.
gramación con Python. Publicacions de la Universi-
tat Jaume I. Disponible en http://www.uji.es/bin/ [29] Daniel Zingaro, Yuliya Cherenkova, Olessia Karpova y
publ/edicions/ippython.pdf Andrew Petersen: Facilitating code-writing in PI clas-
ses. En Proceeding of the 44th ACM technical sympo-
[16] Bertrand Meyer: Object-oriented Software Construc- sium on Computer science education. pp. 585–590. Mar-
tion, 2nd ed. Prentice Hall, 1997. zo de 2013.
[17] B Miller, D Ranum: Freedom to succeed: a three course
introductory sequence using Python and Java. Journal of
Computing Sciences in Colleges, 2006
Rosalía Peña: Estudiando tercero de
[18] http://elclubdelautodidacta.es/wp/
Químicas en la Universidad de Murcia,
indice-python/
inició su experiencia laboral, como por
[19] Bob Muenchen: Job Trends in the Analytics Market: casualidad, en el Centro de Proceso de
New, Improved, now Fortified with C, Java, MATLAB, Datos en 1977, donde continúo hasta
Python, Julia and Many More! http://r4stats. terminar su doctorado en Ciencias en
com/2014/02/25/job-trends-improved/. 25 de
el 1984. Desde entonces ha ido saltan-
febrero de 2014 do del ejercicio profesional en empresa
a la docencia, compatibilizándolo a ve-
[20] Ariel Ortiz: http://edupython.blogspot.com. ces y completando diversos estudios.
es/2013/08/donde-quedo-el-do-while.html Titular de Escuela en el Departamento de Informática de la
Universidad de Murcia hasta el 1988. Trabajó durante de 9
[21] James Payne: Beginning Python. Wiley Publishing. años en el Departamento de Nuevas Tecnologías de ERIA y
2010. en ERITEL en el Departamento de Multimedia. Ha sido pro-
fesora en la Universidad Europea de Madrid, actualmente es
[22] William Punch y Richard Enbody: CS1 titular en la Universidad de Alcalá.
Python Programming Projects Archive. Master en Bioquímica clínica por la Universidad Complutense
http://www.cse.msu.edu/~cse231/ en 1994 e Ingeniero en Informática de Gestión por la Univer-
PracticeOfComputingUsingPython/index.php. sidad Carlos III de Madrid en 2006.
Ubicación provisional, accedido el 12/09/2014. Se Es autora de libros sobre Bases de datos, Protección de la In-
puede solicitar a
[email protected] formación, y Gestión de la información digital, así como de
más de 25 ponencias y 15 artículos en revistas nacionales e
[23] Python Success Stories. https://www.python.org/ internacionales. Ha colaborado en más de 40 cursos de for-
about/success mación continuada en informática para adultos.
Siempre interesada en la pedagogía y la formación integral
[24] How many people are using Python? https: del individuo es miembro fundador de AENUI (Asociación
//docs.python.org/2/faq/general.html\ de Enseñantes Universitarios de Informática) y ha estado 10
#how-many-people-are-using-python años en el comité de Programa de JENUI. Premio AENUI a
Peña: Python como primera aproximación a la programación 29
la calidad docente en 2014. tive Commons Reconocimiento-NoComercial-SinObraDerivada 4.0
Internacional que permite copiar, distribuir y comunicar públicamen-
te la obra en cualquier medio, sólido o electrónico, siempre que se
acrediten a los autores y fuentes originales y no se haga un uso co-
2015 R. Peña. Esta obra está bajo una licencia de Crea- mercial.