Este documento discute el lenguaje de programación Logo y su enfoque didáctico. Explica que Logo se basa en listas pero que tradicionalmente se ha enseñado enfocándose en su capacidad gráfica. Luego discute que enseñar a programar en Logo es diferente de enseñar a programar con Logo, y que para aprender el lenguaje se requieren conocimientos más avanzados de geometría, álgebra y topología. Finalmente, introduce las listas como la estructura fundamental de Logo y ofrece algunas
1. Una aproximación a la Didáctica del Logo. (parte 2)
Enrique Araújoviedo (2001): Foro Local de Informática Educativa, Localidad Octava. Bogotá.
Logo es un lenguaje basado en listas. Pero realmente es poco lo que se muestra de él sobre
esto. Casi todos los tratados o trabajos están basados en su capacidad gráfica, de la que no
carecen –hoy por hoy- la mayoría de los lenguajes de programación. Por tanto no vamos a
resaltar -pero sí utilizar su capacidad gráfica, que no podemos desconocerlo, es excepcional-
en éste trabajo esta potencialidad sino preocuparnos un poco más en esa ventaja que tiene
sobre muchos lenguajes maduros y experimentados. Logo, por supuesto es un lenguaje
maduro y experimentado, pero tiene un adalid que son las listas y las capacidades mentales
que requieren para su tratamiento. Hé visto recientemente un trabajo sobre cómo abordar el
trabajo gráfico con Logo utilizando diagramas de flujo; es un gran esfuerzo, pero muy
reforzado. Los diagramas de flujo (libres) no son una buena estructura para abordar la
programación en Logo y en general los lenguajes basados en listas como Lisp.
La pretensión de éste apartado es mostrar cómo aprovechar el potencial de Logo (la
programación en estructuras de listas) para desarrollar un tipo de pensamiento específico: el
heurísitico.
Los docentes de informática sabemos que el lenguaje, por antonomasia para enseñar a
programar es el Lenguaje Pascal; hoy existen versiones de lenguajes libres muy buenas como
Léxico, sin embargo, haciendo a un lado la discusión acerca de cómo empezar a enseñar a
programar –cuando de enseñar a programar se trata- muchos creemos que Logo en la etapa
primaria cumple cabalmente las expectativas tanto de la estructuración de la programación
como las de desarrollo de pensamiento. Igualmente mucha gente defiende que el lenguaje que
hay que enseñar es el C++ -cosa que no discuto porque comparto, pero en una etapa final de la
Educación Básica-. De manera semejante, creo que es horrendo enseñar VisualBasic –no
porque sea un lenguaje malo; no, todo lo contrario, es un lenguaje profesional que requiere
madurez para obtener resultados que ameriten su uso; cosa parecida pasa con Java-.
Retomando nuestro asunto que es la formación inicial en la programación y en esto hacemos
alusión a enseñar a programar a niños entre los 8 y los 12 años. En este espacio son también
muy buenos entornos de trabajo como como KPL (basado en lenguaje Basic) y scracth (basado
en lenguaje Logo). Pero una cosa son los entornos de trabajo y otra bien diferente son las IDE
(los ambientes de desarrollo). En éstas últimas por ejemplo, existe la posibilidad de la
compilación y por tanto la ejecución del producto independiente del entorno.
Enseñar a programar a los niños y jóvenes con Logo ha seguido una directriz, que consiste en
enseñar a elaborar figuras según una secuencia de comandos. Cuando las figuras son básicas o
que requieren un patrón predeterminado, es decir con una geometría a lo más definidas a
patrones de simetría axial, o grupos básicos la dificultad es mínima; pero cuando requiere de
estructuras geométricas más exigentes (teselaciones, fractales,…) el ejercicio de la
programación se vuelve engorroso y tortuoso en la medida que se requieren fuertes
conocimientos geométricos previos. En este sentido el fracaso no radica en el lenguaje sino en
2. su didáctica; en pretender abordar un desarrollo sin los concebidos prerrequisitos
geométricos. Surge la pregunta: ¿se debe tener fuertes conocimientos geométricos para
aprender a programar en Logo? Antes de responder, debe aclararse que una cosa es enseñar a
programar con Logo y otra es enseñar a programar en Logo. El objetivo de la enseñanza de la
programación es la primera; pues como se manifestó arriba se puede “enseñar a programar
con Pascal”, “se puede “enseñar a programar con C++”, se puede “enseñar a programar con
Delphi”, etc. El fin último es enseñar a programar, el lenguaje es la herramienta; el medio. Pero
si de lo que se trata es de enseñar el lenguaje como tal, se requieren precisamente esas
estructuras de programación y otros recursos como la diagramación libre, la estructurada y en
general los lenguajes de representación. Aprender un lenguaje de programación se puede
hacer desde cero o desde el púlpito de un Gurú. Mucha gente, después de haber trabajado por
años con un lenguaje, tuvo que aprender un nuevo lenguaje en pocas semanas; de no haber
tenido esas estructuras de programación habrían durado mucho más e incluso tardar años en
la reconversión. En alguna medida las didácticas de una segunda lengua se asemejan a las
didácticas de la enseñanza de un lenguaje de programación y éstas se diferencian de las
didácticas de la programación. Esto es que aprender a programar se puede realizar sin el
conocimiento de un lenguaje de programación, como lo propone precisamente el proyecto
Léxico. Así pues, enseñar Logo, a programar en Logo es muy diferente a aprender a programar
con Logo. Para aprender a programar con Logo, la metáfora de las figuras y el uso de una
geometría básica está bien; pero para aprender a programar en Logo, esa metáfora no es útil.
Primero porque realmente sí se requieren serios conocimientos geométricos, algebraicos y
topológicos y segundo porque en este enfoque no es evidente el trabajo subyacente de las
listas, que es la razón de ser de Logo. Los lenguajes, en general, tienen unos espacios de
definición: intentad hacer una página web con C++; intentad hacer un protocolo de red con
Cobol o Fortran (que se puede se puede, claro. A costa de que?) Semejante cosa ocurre con
Logo. Su diseño inicial y su pretensión no es ser un lenguaje profesional (quizás para ello esté
LISP) sino ser un lenguaje para la enseñanza y dentro de éste campo para desarrollar
estructuras de pensamiento. Tal vez por ello, muchos de los entornos Logo están elaborados
en lenguajes profesionales; un excelente entorno (Logográfico –argentino-) ha sido
desarrollado con VisualBasic; los clásicos (WMSLogo, FMSlogo) han sido desarrollados en C++;
un entorno muy bueno (el Xlogo) ha sido desarrollado en java y el último entorno que conocí
fue elaborado en Python. No conozco ningún compilador de C++ o Pascal elaborado en Logo
(eso sería como elaborar un diccionario de español elaborado en inglés).
Después de estas disquisiciones entremos en materia. Lo que pretendemos es enseñar a
programar en Logo y por ello su enfoque serán las listas. Tampoco vamos a ir muy lejos –el
tiempo y el espacio apremian-, solamente trataremos lo básico; lo necesario para trabajar con
listas.
LAS LISTAS
En general, todos sabemos que es una lista; las entendemos como una secuencia (horizontal o
vertical) de expresiones que pueden estar ordenadas o no. Así, un directorio telefónico es una
lista con algunos tipos de identificadores para separar segmentos de expresiones. Un párrafo
3. es una lista de palabras con algunos tipos de identificadores para separar segmentos de
palabras. El párrafo tiene un identificador de inicio (usualmente un espacio previo y una letra
mayúscula) y otro indicador de final (usualmente el punto aparte y un espacio posterior). Un
“punto seguido” es un indicador de separación de un segmento del párrafo y divide el párrafo,
pero no lo concluye; cosa semejante podría decirse de la “coma” y el “punto y coma”. Un
“espacio en blanco” es un delimitador de separación.
En Logo las listas están asociadas a un tipo de estructuras arbóreas (ver artículo sobre
estructuras en árbol) que nos permiten establecer la secuencia de los elementos que contiene
la lista. Una lista en Logo tiene un identificador de inicio (el paréntesis cuadrado “[“ ) y un
identificador de terminación (el paréntesis cuadrado “]“ ). Los elementos de la lista deben
una relación matemática : → ℕcon el conjunto de elementos de la lista. Dos listas son
estar contenidos entre estos dos identificadores. Los elementos están ordenados de acuerdo a
diferentes si dadas : → ℕ y : → ℕ se tiene que ≠ . Más específicamente
,
diríamos que y deben ser tales que : → ⊊ℕ y : → ⊊ con ≠ .
ℕ
Una lista puede ser vacía. En este caso su único elemento es el “caracter en blanco”. El
“caracter en blanco” o “espacio en blanco” sólo se considera como elemento en éste único
caso, en los demás se considera como un indicador de separación entre elementos. Es claro
pues que no se puede utilizar el espacio en blanco dos veces seguidas para indicar por
ejemplo: (caracter)(espacio en blanco)(espacio en blanco)(caracter). Pues esto sería lo mismo
que: (caracter)(espacio en blanco)(caracter). Y por tanto no se admite: (espacio en
blanco)(espacio en blanco)(espacio en blanco)(espacio en blanco)…(espacio en blanco)(espacio
en blanco). Ya que todos ellos equivaldrían a uno solo.
Logo además de considerar las listas, dispone de otros tipos de datos como las “palabras”.
Una palabra es un conjunto de caracteres (letras, números, caracteres especiales:
alfanuméricos, símbolos de puntuación, símbolos de acento, etc.). Se tiene pues que el
“carácter en blanco” define la “palabra vacía”. Ejemplos de palabras serían: a, 4, color,
amarillo, ioki, aníbalnicolás, siuleuquirneojuaraodeivo, a2009m11d26, 1+4=5, 9^2igual81,
unodostres. Para el intérprete del lenguaje Logo (que en adelante llamaremos simplemente
Logo) una palabra puede ser cualquier cosa que contenga un caracter o muchos siempre y
cuando no estén separados por el delimitador “espacio en blanco”. A su vez una lista no es
más que un conjunto de palabras o de listas o de combinaciones de palabras y listas.
Existen muchas definiciones de lista.
La primera y más elemental es decir que:
Definición 1: Una lista es un conjunto de palabras.
Ejemplos: a) [ a e i o u]; b) [ 1 2 3 4]; c) [ a A7 i(8) águila uh!]; d) [ … y Aladino dijo: ábrete
sésamo!]; e) [ uno dos tres]; f) [ uno tres dos]; g) [ 1 dos 3]; h) [ unodostres]; i) [ ].
Es claro que las listas (e) y (f) son distintas porque aunque los elementos son los mismos, el
orden es distinto. En las listas (e) y (g) los elementos son distintos; en la lista (h), hay un solo
elemento, lo mismo que en la lista (i).
4. Esta definición es bastante débil por cuanto no admite listas como:
a) [ a [ e i o u] ]
b) [ a [ e i] o [u] ]
c) [ [ ] [ a [ e ] ] [ [ i ] [ [o] ] [u] ]
Una definición más precisa sería:
Definición 2: Secuencia ordenada de palabras y/o listas delimitadas entre los indicadores “[“ y
“]”.