propuesta y estudio de un lenguaje y entorno mínimos para

68
GRADO EN INGENIERÍA INFORMÁTICA Propuesta y estudio de un lenguaje y entorno mínimos para la enseñanza de la programación de ordenadores. Proposal and study of a minimum language and environment for teaching computer programming. Realizado por José María Pérez Bravo Tutorizado por Francisco José Vico Vela Departamento Lenguajes y Ciencias de la Computación Universidad de Málaga MÁLAGA, JUNIO, 2020

Upload: others

Post on 22-Feb-2022

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Propuesta y estudio de un lenguaje y entorno mínimos para

GRADO EN INGENIERÍA INFORMÁTICA

Propuesta y estudio de un lenguaje y entorno mínimos para

la enseñanza de la programación de ordenadores.

Proposal and study of a minimum language and

environment for teaching computer programming.

Realizado por José María Pérez Bravo

Tutorizado por Francisco José Vico Vela

Departamento Lenguajes y Ciencias de la Computación

Universidad de Málaga

MÁLAGA, JUNIO, 2020

Page 2: Propuesta y estudio de un lenguaje y entorno mínimos para
Page 3: Propuesta y estudio de un lenguaje y entorno mínimos para
Page 4: Propuesta y estudio de un lenguaje y entorno mínimos para

ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA INFORMÁTICA

GRADO EN INGENIERÍA INFORMÁTICA

Propuesta y estudio de un lenguaje y entorno mínimos para la enseñanza de la

programación de ordenadores

Proposal and study of a minimum language and environment for teaching computer

programming.

Realizado por

José María Pérez Bravo

Tutorizado por

Francisco José Vico Vela

Departamento

Lenguajes y Ciencias de la Computación

UNIVERSIDAD DE MÁLAGA

MÁLAGA, JUNIO, 2020

Fecha defensa:

Page 5: Propuesta y estudio de un lenguaje y entorno mínimos para
Page 6: Propuesta y estudio de un lenguaje y entorno mínimos para

Resumen:

En los ultimos anos cada vez mas paıses han aumentado sus esfuerzos por introducir la

programacion en sus currıculos, ensenando programacion en entornos de programacion

(IDE) adaptados, programacion de robots o desarrollando algun proyecto relacionado con

el mundo de la informatica.

Nuestra aportacion consiste en analizar varios IDE para decidir que elementos son los

necesarios para ensenar programacion de forma sencilla y sin redundancia. Nos centra-

mos en un IDE en concreto: Toolbox Academy, desarrollado en el Dpto. de Lenguajes y

Ciencias de la Computacion de la Universidad de Malaga, que se esta utilizando en los

sistemas educativos de las comunidades autonomas para ensenar programacion en niveles

preuniversitarios. Se propone tambien un currıculo de programacion dividido en unidades

y un conjunto de tareas con los recursos analizados anteriormente.

Ademas se define un lenguaje sencillo y reducido para este IDE a partir del analisis

de lenguajes muy utilizados en la actualidad como JavaScript, Ruby o GNU Octave:

ToyScript.

Palabras Clave: Programacion, Recursos, Lenguaje, IDE, Ensenanza.

Page 7: Propuesta y estudio de un lenguaje y entorno mínimos para

Abstract:

In recent years more and more countries have increased their efforts to introduce program-

ming in their curricula, by teaching programming in adapted programming environments

(IDE), programming of robots or developing some project related to the world of compu-

ting.

Our contribution consists of analyze some IDEs to decide which elements are necessary to

teach programming in a simple way and without redundancy. We focus on a specific IDE:

Toolbox Academy, developed in the Department of Languages and Computer Science of

the University of Malaga, which is being used in educational systems of the autonomous

communities to teach programming at pre-university levels. A programming curriculum

divided into units and a set of tasks with the resources previously analyzed are also

proposed.

In addition, a simple and reduced language is defined for this IDE, based on the analysis

of languages that are currently widely used such as JavaScript, Ruby or GNU Octave:

ToyScript.

Keywords: Programming, Resources, Language, IDE, Teaching.

Page 8: Propuesta y estudio de un lenguaje y entorno mínimos para
Page 9: Propuesta y estudio de un lenguaje y entorno mínimos para
Page 10: Propuesta y estudio de un lenguaje y entorno mínimos para

Indice de contenidos

1. Introduccion 1

1.1. Motivacion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1

1.2. Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2

1.3. Metodologıa empleada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2

2. Estado de la cuestion 5

2.1. Lenguajes existentes no orientados a la ensenanza . . . . . . . . . . . . . . 5

2.2. Lenguajes existentes orientados a la ensenanza . . . . . . . . . . . . . . . . 6

2.2.1. LOGO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

2.2.2. Scratch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

2.2.3. Blocky . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

2.2.4. Coffeescript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

2.2.5. Elementos comunes y distintivos . . . . . . . . . . . . . . . . . . . . 18

3. Propuesta 19

3.1. Descripcion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

3.1.1. Toolbox Academy . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

3.1.2. ToyScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

3.1.3. Justificacion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

3.2. Funcionamiento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

3.2.1. Definicion informal . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

3.2.2. Definicion formal . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32

3.2.2.1. Definicion de Estado . . . . . . . . . . . . . . . . . . . . . 32

3.2.2.2. Conceptos Previos . . . . . . . . . . . . . . . . . . . . . . 35

3.2.2.3. Semantica . . . . . . . . . . . . . . . . . . . . . . . . . . . 38

3.3. Tareas de Entorno Mınimo . . . . . . . . . . . . . . . . . . . . . . . . . . . 44

Page 11: Propuesta y estudio de un lenguaje y entorno mínimos para

3.3.1. Currıculo de programacion . . . . . . . . . . . . . . . . . . . . . . . 44

3.3.2. Tareas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45

4. Conclusiones y lıneas futuras 53

Bibliografıa 55

Page 12: Propuesta y estudio de un lenguaje y entorno mínimos para

CAPITULO 1

Introduccion

1.1. Motivacion

Actualmente la programacion es cada vez mas popular en el entorno educativo, no solo

por la cantidad de nuevos puestos de trabajo que estan surgiendo en relacion a las TIC

(Tecnologıas de la Informacion y la Comunicacion), sino tambien por los beneficios que

aporta, como la mejora de capacidad de abstraccion, el pensamiento computacional y la

capacidad de resolucion de problemas analıticos, demostrando ademas que esta mejora en

la capacidad de resolver problemas analıticos ocurre para la totalidad de los alumnos, no

solo para los predispuestos a especializarse en Ciencias de la computacion [1].

Ademas de los nuevos puestos de trabajo y los beneficios cognitivos que la ensenanza

de la programacion aporta, la principal motivacion de nuestro trabajo es la siguiente: Es

necesario encontrar un conjunto de recursos mınimos donde se pueda realizar computacion

para no caer en la redundancia, es decir, para poder ensenar programacion sin elementos

que distraigan, pero sin dejar atras ningun concepto computacional.

Esta es la principal motivacion porque si no se consigue un entorno adecuado, reducido y

adaptado, puede ser difıcil para los estudiantes de programacion aprender sobre un IDE y

lenguaje cualesquiera, por la dificultad y la variedad de estructuras computacionales que

nos permiten hacer la misma funcion y que para un estudiante pueden ser abrumadoras.

1

Page 13: Propuesta y estudio de un lenguaje y entorno mínimos para

CAPITULO 1. INTRODUCCION

1.2. Objetivos

El principal objetivo de este trabajo es analizar a traves de un IDE y un lenguaje adapta-

dos, que recursos son los necesarios para poder ensenar programacion de forma intuitiva,

para que el usuario asimile los conceptos computacionales que usa a traves de la resolucion

de tareas.

Los objetivos especıficos consistiran en:

Determinar los elementos usados hasta la actualidad.

Estudiar estos elementos para analizar carencias.

Proponer IDE.

Proponer lenguaje.

Proponer tareas con recursos mınimos.

1.3. Metodologıa empleada

Durante este proyecto hemos utilizado Scrum, una metodologıa agil que consiste en la

ejecucion de iteraciones de duracion fija en las que se consiguen ciertos objetivos del

proyecto. Esta metodologıa destaca por su facilidad para la adopcion de cambios y nuevos

requisitos durante el desarrollo del proyecto.

Hemos complementado esta metodologıa con otra conocida metodologıa llamada kanban

que consiste en organizar las tareas pendientes en un tablero, evaluando la carga de trabajo

de cada una de ellas y dando mayor prioridad a las excepcionales. Esta metodologıa

destaca por la flexibilidad que proporciona.

Para implementar estas dos metodologıas hemos usado Trello, una herramienta online

que permite la administracion de proyectos proporcionando un tablero digital y el uso de

tarjetas, que representan tareas y que se organizan en columnas de forma que podamos

mover las tareas de una columna a otra.

2

Page 14: Propuesta y estudio de un lenguaje y entorno mínimos para

CAPITULO 1. INTRODUCCION

Figura 1.1: Trello

3

Page 15: Propuesta y estudio de un lenguaje y entorno mínimos para

CAPITULO 1. INTRODUCCION

4

Page 16: Propuesta y estudio de un lenguaje y entorno mínimos para

CAPITULO 2

Estado de la cuestion

En este apartado analizaremos las opciones actuales para el aprendizaje de la progra-

macion. Primero haremos una breve introduccion de los lenguajes mas usados de forma

general para centrarnos despues en algunos de los lenguajes mas usados para la ensenanza

de la programacion.

2.1. Lenguajes existentes no orientados a la ensenan-

za

En este apartado vamos a analizar distintas caracterısticas de los lenguajes mas usados

en el mundo de la programacion.

Python: Python es un lenguaje interpretado y multiparadigma (permite progra-

macion Imperativa, Orientada a Objetos y Funcional). Respecto al tipado, estamos

ante un lenguaje de tipado Dinamico y Fuerte. Es un lenguaje multiplataforma que

destaca por la cantidad de frameworks que tiene y la facilidad de aprendizaje.

GNU Octave: GNU Octave es un lenguaje interpretado. Respecto al tipado, esta-

mos ante un lenguaje de tipado Dinamico y Debil.

Ruby: Ruby es un lenguaje interpretado y Orientado a Objetos. Respecto al tipado,

estamos ante un lenguaje de tipado Dinamico y Fuerte. Es un lenguaje multiplata-

forma que destaca por su sintaxis, cercana al lenguaje natural, ademas de ser muy

5

Page 17: Propuesta y estudio de un lenguaje y entorno mínimos para

CAPITULO 2. ESTADO DE LA CUESTION

utilizado en el desarrollo web.

Java: Java es un lenguaje compilado y Orientado a Objetos. Respecto al tipado,

estamos ante un lenguaje de tipado Estatico y Fuerte. Destaca por su robustez y

seguridad.

C: C es un lenguaje compilado y de paradigma imperativo. Respecto al tipado,

estamos ante un lenguaje de tipado Estatico y Fuerte. Destaca en la velocidad de

ejecucion, aunque esta mas alejado del lenguaje natural que otros.

Go: Go es un lenguaje compilado y paradigma imperativo aunque permite obje-

tos. Respecto al tipado, estamos ante un lenguaje de tipado Estatico y Fuerte. Su

principal caracterıstica es la sencillez, ademas de la claridad de su sintaxis.

JavaScript: JavaScript es un lenguaje interpretado y Orientado a Objetos. Respec-

to al tipado, estamos ante un lenguaje de tipado Dinamico y Debil. Es interesante

porque todos los navegadores actuales pueden interpretarlo.

2.2. Lenguajes existentes orientados a la ensenanza

En este apartado vamos a analizar los distintos lenguajes de programacion orientados a

la ensenanza de la misma.

2.2.1. LOGO

LOGO es un lenguaje de programacion libre de alto nivel desarrollado con propositos

didacticos basado en el lenguaje Lisp, que aparecio en los anos 60. LOGO es un lenguaje

que no tiene estandar y que posee una gran variedad de implementaciones.

El lenguaje destaco porque podıa producir graficos a traves de una tortuga virtual a la

que se le daba instrucciones. Ademas este lenguaje tiene versiones para distintos idiomas,

entre ellos el espanol.

Hay que tener en cuenta que las instrucciones de desplazamiento pueden cambiar de una

version de LOGO a otra.

6

Page 18: Propuesta y estudio de un lenguaje y entorno mínimos para

CAPITULO 2. ESTADO DE LA CUESTION

Caja 2.1 : Comandos basicos de LOGO en espanol

1

2 avanzar 100 (la tortuga avanza 100 pasos)

3 girarderecha 90 (la tortuga gira 90 grados a la derecha)

4 girarizquierda 90 (la tortuga gira 90 grados a la izquierda)

5 BP (borra la pantalla)

6 repite 3 [avanzar 100] (repite 3 veces lo que hay entre [ y ])

7 MT (muestra la tortuga)

8 OT (oculta la tortuga)

9 SP (sin pluma, no dibuja mientras camina)

10 CP (con pluma, dibuja mientras camina)

7

Page 19: Propuesta y estudio de un lenguaje y entorno mínimos para

CAPITULO 2. ESTADO DE LA CUESTION

2.2.2. Scratch

Scratch es un lenguaje de programacion usado en la plataforma con el mismo nombre que

implementa las estructuras computacionales de manera grafica, mediante bloques. Estos

bloques se pueden encajar para construir bloques mas grandes que actuan de programa.

when clicked: Nos permitira ejecutar el programa una vez hagamos click en la

bandera verde.

Figura 2.1: Bloque de ejecucion

move: Nos permitira mover al agente por el mapa un numero de pasos. Si este

numero es positivo nos moveremos hacia la derecha, si es negativo nos moveremos

hacia la izquierda y si es 0 nos quedaremos quietos.

Figura 2.2: Bloque de movimiento

turn: Nos permitira girar al agente un numero de grados. Si este numero es positivo

giraremos en el sentido que indica el bloque, si es negativo nos moveremos en sentido

contrario y si es 0 no giraremos.

Figura 2.3: Bloque de rotacion

repeat: Nos permitira repetir un conjunto de comandos, es decir, un conjunto

de bloques un numero determinado de veces. Si este numero es 0, no se ejecutara

ningun bloque dentro del bloque repeat.

8

Page 20: Propuesta y estudio de un lenguaje y entorno mínimos para

CAPITULO 2. ESTADO DE LA CUESTION

Figura 2.4: Bloque de repeticion definida

Variables: Nos permitira realizar asignaciones a variables, ademas de poder usar su

valor.

Figura 2.5: Bloques de operaciones con variables

Operaciones aritmeticas: Nos permitira realizar sumas, restas, multiplicaciones y

divisiones de valores numericos.

Figura 2.6: Bloques de operaciones aritmeticas

Comparaciones: Nos permitira hacer comparaciones que podremos usar en bucles y

condicionales.

Figura 2.7: Bloques de comparaciones

9

Page 21: Propuesta y estudio de un lenguaje y entorno mínimos para

CAPITULO 2. ESTADO DE LA CUESTION

Operaciones logicas: Nos permitira realizar conjunciones, disyunciones y negaciones.

Figura 2.8: Bloques de operaciones logicas

if : Nos permitira ejecutar un conjunto de comandos si una condicion dada es

verdadera.

Figura 2.9: Bloque de condicion

if - else: Nos permitira ejecutar un conjunto de comandos si una condicion dada

es verdadera, sino, ejecuta otro conjunto de comandos dado.

Figura 2.10: Bloque de condicion

repeat until: Nos permitira repetir un conjunto de comandos hasta que una

condicion dada sea verdadera.

Figura 2.11: Bloque de repeticion indefinida

10

Page 22: Propuesta y estudio de un lenguaje y entorno mínimos para

CAPITULO 2. ESTADO DE LA CUESTION

2.2.3. Blocky

Blocky es un lenguaje de programacion dedicado a ensenar programacion mediante blo-

ques. Es similar a Scratch, pero proporciona la opcion de ver el codigo equivalente en

JavaScript, Python y otros lenguajes. En concreto vamos a analizar como la platafor-

ma Code.org implementa este lenguaje ampliamente personalizable, concretamente en su

Express Course.

when run: Nos permitira ejecutar el programa una vez hagamos click en RUN.

Figura 2.12: Bloque de ejecucion

move: Nos permitira mover al agente por el mapa hacia donde este mirando o en

sentido contrario dependiendo de la direccion, que puede ser forward o backward.

Figura 2.13: Bloques de movimiento

turn: Nos permitira girar al agente hacia la derecha o la izquierda.

Figura 2.14: Bloque de rotacion

11

Page 23: Propuesta y estudio de un lenguaje y entorno mínimos para

CAPITULO 2. ESTADO DE LA CUESTION

repeat: Nos permitira repetir un conjunto de comandos un numero determinado

de veces. Si este numero es 0, no se ejecutara ningun bloque.

Figura 2.15: Bloque de repeticion definida

Variables: Nos permitira realizar asignaciones a variables, ademas de poder usar su

valor.

Figura 2.16: Bloques de operaciones con variables

Operaciones aritmeticas: Nos permitira realizar operaciones aritmeticas con valores

numericos.

Figura 2.17: Bloques de suma

if at : Nos permitira ejecutar un conjunto de comandos si el personaje se encuen-

tra en una localizacion dada.

Figura 2.18: Bloque de condicion

12

Page 24: Propuesta y estudio de un lenguaje y entorno mínimos para

CAPITULO 2. ESTADO DE LA CUESTION

if at - else: Nos permitira ejecutar un conjunto de comandos si el personaje se

encuentra en una localizacion dada, en otro caso ejecuta otro conjunto dado.

Figura 2.19: Bloque de condicion

while: Nos permitira repetir un conjunto de comandos mientras que una condicion

dada sea verdadera.

Figura 2.20: Bloque de repeticion indefinida

13

Page 25: Propuesta y estudio de un lenguaje y entorno mínimos para

CAPITULO 2. ESTADO DE LA CUESTION

2.2.4. Coffeescript

CoffeeScript es un lenguaje que compila a JavaScript usado principalmente en la industria

del desarrollo web.

Este lenguaje puede aprenderse en plataformas como CodeMonkey, que introduce fun-

ciones como step, turn o times para poder utilizarlo sobre un mapa bidimensional y

hacerlo mas sencillo.

step: Nos permitira mover al agente por el mapa un numero de pasos. Si este

numero es positivo nos moveremos hacia donde este mirando, si es negativo nos

moveremos en sentido contrario y si es 0 nos quedaremos quietos.

Caja 2.2 : step - Coffeescript

1 step 5

turn: Nos permitira girar al agente dependiendo de si toma el valor left o right.

Caja 2.3 : turn - Coffeescript

1 turn left

2 turn right

times: Nos permitira repetir un conjunto de comandos un numero determinado de

veces. Si este numero es 0, no se ejecutara ninguna sentencia dentro del bloque.

Caja 2.4 : times - Coffeescript

1 3.times ->

2 turn right

14

Page 26: Propuesta y estudio de un lenguaje y entorno mínimos para

CAPITULO 2. ESTADO DE LA CUESTION

Variables: Nos permitira realizar asignaciones a variables, ademas de poder usar su

valor.

Caja 2.5 : Variables - Coffeescript

1 x = 10

2 step x

Operaciones aritmeticas: Nos permitira realizar sumas, restas, multiplicaciones y

divisiones de valores numericos.

Caja 2.6 : Operaciones aritmeticas - Coffeescript

1 x = 10

2 y = 5

3

4 z = x + y

5 x = x - y

6 z = x * y

7 x = x / y

Comparaciones: Nos permitira hacer comparaciones que podremos usar en bucles y

condicionales.

Caja 2.7 : Comparaciones - Coffeescript

1 x = 10

2 y = 5

3

4 x == y

5 x > y

6 x < y

7 x >= y

8 x <= y

15

Page 27: Propuesta y estudio de un lenguaje y entorno mínimos para

CAPITULO 2. ESTADO DE LA CUESTION

Operaciones logicas: Nos permitira realizar conjunciones, disyunciones y negaciones.

Caja 2.8 : Conjuncion, Disyuncion y Negacion respectivamente -

Coffeescript

1 x = 10

2 y = x == 10

3 z = false

4

5 y and z

6 y or z

7 not z

if: Nos permitira ejecutar un conjunto de comandos si la condicion es verdadera.

Caja 2.9 : if - Coffeescript

1 x = 10

2 direction = right

3 if direction == right

4 turn direction

5 step x

if - else: Nos permitira ejecutar un conjunto de comandos si la condicion dada

es verdadera, en otro caso se ejecuta otro conjunto de comandos.

Caja 2.10 : if-else - Coffeescript

1 x = 10

2 direction = left

3 if direction == right

4 turn direction

5 step x

6 else

7 step 2 * x

16

Page 28: Propuesta y estudio de un lenguaje y entorno mínimos para

CAPITULO 2. ESTADO DE LA CUESTION

until: Nos permitira repetir un conjunto de comandos hasta que la condicion dada

sea verdadera.

Caja 2.11 : Bucle until - Coffeescript

1 x = 1

2 until x > 4

3 step x

4 x = x + 2

() -> : Nos permitira crear funciones, con objetivo de reutilizar codigo.

Caja 2.12 : Funcion - Coffeescript

1 moveif10 = (steps) ->

2 if steps == 10

3 step steps

4

5 moveif10 5

6 moveif10 10

17

Page 29: Propuesta y estudio de un lenguaje y entorno mínimos para

CAPITULO 2. ESTADO DE LA CUESTION

2.2.5. Elementos comunes y distintivos

En esta seccion analizamos las similitudes y diferencias para ver cuales son las ventajas y

carencias de estos lenguajes, de forma que podamos aprovecharlos en nuestra propuesta.

Elementos comunes: Como podemos observar, todos estos lenguajes comparten unas

estructuras computacionales similares.

Bucles definidos

Variables

Condicionales

Bucles indefinidos

Elementos distintivos:

Forma de implementacion

Lenguajes que implementan la computacion mediante bloques:

• Scratch

• Blockly

Lenguajes que implementan la computacion mediante codigo:

• CoffeeScript

• LOGO

Instrucciones de movimiento

Lenguajes que implementan el movimiento en terminos relativos:

• Scratch

• CoffeeScript

• Blockly

• LOGO

Ninguno de los lenguajes analizados implementan el movimiento en terminos abso-

lutos.

18

Page 30: Propuesta y estudio de un lenguaje y entorno mínimos para

CAPITULO 3

Propuesta

Estudios recientes muestran que en un entorno controlado, con un lenguaje reducido

pensado para simplificar la sintaxis y acercarlo mas al lenguaje natural, alumnos de ulti-

mo curso de secundaria son capaces de demostrar competencias en todos los conceptos

computacionales basicos como bucles, condicionales, definicion de funciones, etc.[2]

No solo esto, sino que ademas muestran que las competencias en ciencias de la computacion

se adquieren independientemente del genero.[3]

Despues de haber analizado los lenguajes y plataformas mas usados, en concreto para la

ensenanza de programacion, nuestra propuesta se centra en el lenguaje de programacion

ToyScript implementado en la plataforma ToolBox Academy.

Los motivos principales para la propuesta de este lenguaje son la utilizacion de elementos

sencillos para facilitar la adquisicion de competencias mediante la simplificacion de la

sintaxis y el uso de recursos computacionales reducidos. Este lenguaje no busca el conjunto

mınimo, sino un conjunto de estructuras reducido que permita mantener la sencillez.

19

Page 31: Propuesta y estudio de un lenguaje y entorno mínimos para

CAPITULO 3. PROPUESTA

3.1. Descripcion

En esta seccion vamos a describir nuestra propuesta, describiendo primero detalladamente

la plataforma y el lenguaje sobre los que vamos a trabajar, ası como una justificacion sobre

ciertas decisiones que se han tomado.

3.1.1. Toolbox Academy

Toolbox Academy es una plataforma para la ensenanza de programacion en el ambito

preuniversitario desarrollado por el departamento de Lenguajes y Ciencias de la Compu-

tacion de la Universidad de Malaga. Toolbox Academy cuenta con 3 areas diferenciadas:

Una parte donde aparecera el enunciado de una tarea a resolver, una parte para escribir

el codigo para resolver una tarea y una parte donde aparecera una cuadrıcula dividida en

celdas. Toolbox Academy cuenta con un curso basico en ToyScript y otro en JavaScript.

Elementos del entorno:

Roby: Es el personaje al que le vamos a dar ordenes mediante programas. Es el

elemento que se movera por la cuadrıcula. Roby es a Toolbox Academy lo que el

cabezal lector a la Maquina de Turing.

Figura 3.1: Roby

Cuadrıcula: Es el espacio por el cual Roby puede moverse. La cuadrıcula es a Toolbox

Academy lo que la cinta a la Maquina de Turing.

20

Page 32: Propuesta y estudio de un lenguaje y entorno mínimos para

CAPITULO 3. PROPUESTA

Figura 3.2: Cuadrıcula

Objeto : Estos elementos pueden ser recogidos por el agente, lo que nos justifi-

ca, entre otras estructuras computacionales, el uso de comandos de movimientos,

pues necesitamos usarlos para recoger estos objetos. Si disponemos estos elementos

alineados, queda justificado la estructura de bucle definido.

Figura 3.3: Objeto

Agentes auxiliares: Estos elementos son agentes a los que Roby puede pedir infor-

macion sobre cierto problema, y gracias a ellos podemos introducir el uso no solo de

variables (para guardar la informacion que proporcionan), sino de funciones como

info (para pedir la informacion que tienen).

Figura 3.4: Agentes auxiliares

21

Page 33: Propuesta y estudio de un lenguaje y entorno mínimos para

CAPITULO 3. PROPUESTA

Puertas: Introducimos este recurso computacional para poder justificar el uso de

condicionales en nuestros programas. Ahora no se tratara de recoger tuercas como

en otros casos, sino de entrar por la puerta correcta. Este recurso, junto al uso de

agentes externos, son la clave para la creacion de tareas con condicionales.

Figura 3.5: Puertas

Cajas: Introducimos este recurso computacional para poder justificar el uso de bu-

cles indefinidos. Ahora las tareas trataran sobre encontrar la caja con el contenido

correcto.

Figura 3.6: Caja

Este es el conjunto de recursos mınimos que proponemos, ya que todos ellos son necesarios

para que el uso de las estructuras computacionales del lenguaje que vamos a definir tenga

sentido.

22

Page 34: Propuesta y estudio de un lenguaje y entorno mínimos para

CAPITULO 3. PROPUESTA

3.1.2. ToyScript

ToyScript esta inspirado en varios lenguajes, no solo en JavaScript. Esta inspirado en

GNU Octave, pues introduce la palabra end para finalizar estructuras. Ademas introduce

el bucle repeat, cuyo concepto existe en lenguajes como Ruby, aunque con otra sintaxis.

Es muy simple, no solo sintacticamente, pues no tiene llaves, parentesis ni puntos y comas,

sino porque solo cuenta con un bucle definido (repeat), uno indefinido (do-while), y

dos condicionales (if, if-else) como estructuras computacionales.

La razon de esta sencillez sintactica es el acercamiento de este lenguaje al lenguaje natural,

ademas de simplicidad a la hora de escribir el programa. Hay que tener en cuenta que

esta propuesta esta enfocada en cursos K-12 (cursos de primaria y secundaria), y que por

lo tanto habra usuarios que no esten familiarizados con el teclado, o que incluso no hayan

aprendido a leer y escribir correctamente.

Por otro lado, la razon por la que contamos con tan pocas estructuras computacionales es

clara, buscamos introducir los conceptos generales de la programacion en este lenguaje,

es decir, condicionales, bucle definido e indefinido, pero manteniendo la simpleza de tal

forma que el usuario no quede abrumado. Es por esto que no existen estructuras como

for each o switch.

A continuacion presentaremos la sintaxis del lenguaje en notacion EBNF (Extended

Backus-Naur form), una notacion que nos permite describir lenguajes formales a traves

de sus gramaticas. En nuestro caso, el axioma es 〈code〉, que representa el programa que

puede estar formado por una o mas instrucciones.

23

Page 35: Propuesta y estudio de un lenguaje y entorno mínimos para

CAPITULO 3. PROPUESTA

Caja 3.1 : Sintaxis de ToyScript

〈letter〉 :: = ‘a’|...|‘z’|‘A’|...|‘Z’

〈digit〉 :: = ‘0’|...|‘9’

〈arithmetic〉 :: = ‘+’|‘-’|‘*’|‘/’

〈relational〉 :: = ‘==’|‘!=’|‘<’|‘>’|‘<=’|‘>=’

〈logical〉 :: = ‘!’|‘&’|‘|’

〈integer〉 :: = [‘-’]〈digit〉{〈digit〉}

〈variable〉 :: = 〈letter〉{〈letter〉|〈digit〉}

〈term〉 :: = 〈integer〉|〈variable〉

〈expression〉 :: = 〈term〉|‘(’〈expression〉‘)’|〈expression〉〈arithmetic〉〈expression〉

〈condition〉 :: = 〈term〉〈relational〉〈term〉|〈term〉〈logical〉〈term〉|‘(’〈term〉‘)’

〈code〉 :: = 〈instruction〉{〈instruction〉}

〈instruction〉 :: = 〈command〉|〈assignment〉|〈repeat〉|〈if 〉|〈while〉|〈info〉

〈command〉 :: = ‘up’|‘down’|‘left’|‘right’

〈info〉 :: = 〈variable〉‘=’‘info’

〈assignment〉 :: = 〈variable〉‘=’〈expression〉

〈repeat〉 :: = ‘repeat’〈expression〉〈code〉‘end’

〈if 〉 :: = ‘if’〈condition〉〈code〉[‘else’〈code〉]‘end’

〈while〉 :: = ‘do’〈code〉‘while’〈condition〉

24

Page 36: Propuesta y estudio de un lenguaje y entorno mínimos para

CAPITULO 3. PROPUESTA

3.1.3. Justificacion

En este apartado vamos a discutir sobre algunas decisiones que se han tomado en nuestra

propuesta.

Eliminacion de llaves y adicion de end: La decision de eliminar las llaves surge

por la lejanıa que supone la utilizacion de estos elementos sintacticos con el lenguaje

natural. De esta eleccion emana la decision de anadir la clausula end para cerrar

un bloque, podrıamos haber usado la indentacion como en otros lenguajes como

Python, pero el uso de end esta mucho mas cerca del lenguaje natural que esto o

una llave.

Eliminacion de otros elementos sintacticos: Ademas de lo comentado ante-

riormente, con objeto de acercar ToyScript al lenguaje natural, se eliminan otros

elementos como ’;’ o los parentesis, de forma que queda un codigo mucho mas legible.

Utilizacion de comandos de movimiento absolutos: Como podemos observar

los lenguajes de programacion centrados en la ensenanza analizados anteriormente,

cuentan todos con sistemas de movimientos relativos. Nosotros hemos decidido usar

un sistema absoluto porque es mas visual a la hora de planificar las acciones a

realizar, ya que con un sistema relativo es necesario conocer la rotacion del personaje,

ademas de su posicion.

Numero maximo de palabras o numeros: Este es uno de los recursos mas

interesantes que tenemos. Gracias a el, en ciertas tareas nos aseguramos que se usen

los conceptos computacionales que queremos, y no otros equivalentes. De esta forma,

si queremos que se use un bucle, podremos evitar que se usen las instrucciones que

irıan en su interior de forma repetida.

25

Page 37: Propuesta y estudio de un lenguaje y entorno mínimos para

CAPITULO 3. PROPUESTA

Rangos de numeros especiales: Este recurso, nos sirve para que el usuario no

pueda disenar programas a medida, sino que los programas escritos tengan que

satisfacerse para todos los escenarios posibles, es decir, los programas deben ser

generales. Podemos distinguir dos tipos de estos rangos:

• Rango de numeros donde se prueban todas las combinaciones.

Ejemplo: Si establecemos para un recurso un rango de este tipo, desde 5000

hasta 5005, entonces, el programa se probara para cada uno de estos valores

en estos recursos.

• Rango de numeros donde se prueban todas las permutaciones.

Ejemplo: Si establecemos para 3 recursos un rango de este tipo, desde 100

hasta 102, entonces se probaran todas las posibles permutaciones de insertar

estos valores en dichos recursos.

Eleccion de do-while en lugar de while: La eleccion de do-while como bu-

cle indefinido en lugar de while esta fundamentada en el tipo de tareas propuestas

para ser resueltas mediante bucle indefinido. Estas tareas normalmente consisten

en explorar una serie de cajas alineadas de forma consecutiva hasta encontrar la

correcta. Para ello debemos recoger informacion sobre cada caja y despues compro-

bar si se cumple una condicion dada. Esto se puede hacer con ambos bucles, pero

es mucho mas intuitivo con do-while, cuyo funcionamiento encaja perfectamente

con el problema descrito.

Figura 3.7: Ejemplo do-while

26

Page 38: Propuesta y estudio de un lenguaje y entorno mínimos para

CAPITULO 3. PROPUESTA

Para resolver el ejemplo anterior con bucle do-while primero debemos movernos

a la derecha, despues obtener informacion de la caja y por ultimo comprobar si la

condicion se ha cumplido.

A continuacion mostramos unos ejemplos que consisten en encontrar la caja con el

valor 5.

Caja 3.2 : Resolucion con do-while

1 do

2 right

3 contenido_caja = info

4 while contenido_caja != 5

Sin embargo, para resolverlo con bucle while, deberemos utilizar un valor por de-

fecto para poder realizar la primera iteracion del bucle o realizar la primera iteracion

fuera del mismo. Esto es mucho menos intuitivo.

Caja 3.3 : Resolucion con while - valor por defecto

1 contenido_caja = 0

2 while contenido_caja != 5

3 right

4 contenido_caja = info

5 end

Caja 3.4 : Resolucion con while - primera iteracion fuera

1 right

2 contenido_caja = info

3 while contenido_caja != 5

4 right

5 contenido_caja = info

6 end

27

Page 39: Propuesta y estudio de un lenguaje y entorno mínimos para

CAPITULO 3. PROPUESTA

3.2. Funcionamiento

3.2.1. Definicion informal

En este apartado explicaremos el funcionamiento de cada una de las estructuras compu-

tacionales y comandos que hemos expuesto anteriormente en la sintaxis de ToyScript.

right, left, up, down: Nos permitira mover al agente una cuadrıcula en la di-

reccion que indica la instruccion.

Caja 3.5 : Movimiento - ToyScript

1 up

2 down

3 left

4 right

repeat: Es un bucle definido que nos permitira repetir un conjunto de instrucciones

un numero determinado de veces. Si este numero es 0, no se ejecutara ninguna

sentencia dentro del bucle.

Caja 3.6 : repeat - ToyScript

1 repeat 3

2 right

3 up

4 right

5 end

28

Page 40: Propuesta y estudio de un lenguaje y entorno mínimos para

CAPITULO 3. PROPUESTA

Variables: Nos permitira realizar asignaciones a variables, para despues poder usar

su valor.

Caja 3.7 : Variables - ToyScript

1 repeticiones = 3

2 repeat repeticiones

3 right

4 end

Operaciones aritmeticas: Nos permitira realizar sumas, restas, multiplicaciones y

divisiones de valores numericos.

Caja 3.8 : Operaciones aritmeticas - ToyScript

1 x = 10

2 y = 5

3

4 z = x + y

5 x = z - y

6 z = y * y

7 x = z / y

Comparaciones: Nos permitira hacer comparaciones que podremos usar en bucles y

condicionales.

Caja 3.9 : Comparaciones - ToyScript

1 x = 10

2 y = 5

3

4 if x == y

5 down

6 end

7 if x > y

8 right

29

Page 41: Propuesta y estudio de un lenguaje y entorno mínimos para

CAPITULO 3. PROPUESTA

9 end

10 if x < y

11 up

12 end

info: Nos permitira recibir informacion del entorno, por ejemplo, para guardar en

una variable la puerta por la que debemos entrar o cuantas tuercas recoger.

Caja 3.10 : Info - ToyScript

1 puerta = info

if: Nos permitira ejecutar un conjunto de comandos si se cumple una condicion.

Caja 3.11 : if - ToyScript

1 puerta = info

2 right

3 if puerta == 2

4 down

5 end

if - else: Nos permitira ejecutar un conjunto de comandos si se cumple una

condicion, en otro caso se ejecuta otro conjunto de comandos.

Caja 3.12 : if-else - ToyScript

1 puerta = info

2 if puerta == 1

3 left

4 else

5 right

6 end

Operaciones logicas: Nos permitira realizar conjunciones, disyunciones y negaciones.

30

Page 42: Propuesta y estudio de un lenguaje y entorno mínimos para

CAPITULO 3. PROPUESTA

Caja 3.13 : Operadores logicos - ToyScript

1 puerta = info

2 right

3 if !(puerta == 2 | puerta > 5) & puerta > 3

4 down

5 end

do-while: Nos permitira repetir un conjunto de comandos mientras se de una

condicion. Evaluara la condicion despues de ejecutar los comandos.

Caja 3.14 : Bucle do-while - ToyScript

1 do

2 right

3 tuercas = info

4 while tuercas != 100

31

Page 43: Propuesta y estudio de un lenguaje y entorno mínimos para

CAPITULO 3. PROPUESTA

3.2.2. Definicion formal

En este apartado vamos a encargarnos de definir en primer lugar el estado de la compu-

tacion de este modelo de computo para posteriormente poder definir formalmente la

semantica del mismo. Esto es util porque nos permite definir el comportamiento de forma

muy precisa.

3.2.2.1. Definicion de Estado

El estado de la computacion de este modelo incluira informacion sobre la posicion del

agente, sobre el inventario, sobre la cuadrıcula y sobre las variables.

Primero definiremos las 2 clases de objetos que puede haber por el mapa. En primer lugar

objetos que se pueden recoger, como pueden ser tuercas o tornillos, y en segundo lugar

objetos que no se pueden recoger, por ejemplo cajas o puertas. Caracterizaremos estos

objetos con un numero natural (N), que en caso de ser un objeto que se puede recoger

servira para indicar distintos tipos de objetos, y en caso de que no se pueda recoger, sera

un valor que al que podremos acceder desde un programa a traves de info. Es decir, en

caso de poderse recoger nos servira para saber si es una tuerca, tornillo, ..., pero en caso

de no poderse recoger, por ejemplo una caja, servira para saber cuantos objetos contiene

dicha caja.

Definimos la cuadrıcula del mundo como una cinta bidimensional, infinita hacia la derecha

y hacia abajo, en la que en cada cuadrıcula tendremos 2 valores, uno de ellos nos indicara

si el objeto se puede recoger y el otro sera un valor que actuara de identificador o podra

ser usado en un programa dependiendo de si se puede o no recoger.

Por lo tanto, la cuadrıcula quedara representada por una funcion Cuadricula : N2 →

(N, {0, 1}), que dada una posicion de la cuadrıcula, nos devolvera el valor que contiene, y

0 en caso de no poderse recoger o 1 en caso de serlo.

Ademas, sera necesario definir una funcion que nos permita vaciar una casilla de la

cuadrıcula, para actualizarla por ejemplo, una vez recojamos un objeto. Definimos

clearC : (Cuadricula,N2) → Cuadricula, que dada una Cuadrıcula y una posicion, nos

devuelve la misma Cuadrıcula con esa posicion vacıa. Es decir, siendo c′ = clearC(c, x, y):

32

Page 44: Propuesta y estudio de un lenguaje y entorno mínimos para

CAPITULO 3. PROPUESTA

c′(x′, y′) =

(0, 0) si x = x′ e y = y′

c(x, y) en otro caso

Si aplicamos clearC a una cuadrıcula c y una posicion (x, y), esto nos devolvera una nueva

cuadrıcula (recordemos que hemos definido la cuadrıcula como una funcion), que para una

entrada (x′, y′) devolvera (0, 0) si esa posicion coincide con la usada como argumento.

Definimos la posicion del agente en la cuadrıcula como posicion ∈ N2, es decir, como un

vector de naturales de 2 dimensiones. Siendo p la posicion del agente, denotaremos como

p1 y p2 para referirnos a la primera y segunda componente del mismo respectivamente.

Definimos el inventario del agente como Inventario = N→ N, es decir, una funcion que

dado un natural que represente un objeto, nos devolvera la cantidad de dicho objeto que

el agente posee.

Para incrementar el inventario definimos updateI : (Inventario,N) → Inventario, que

dado un inventario y un natural que representa un tipo de objeto, se devolvera un inven-

tario actualizado. Es decir, siendo i′ = updateI(i, n):

i′(n′) =

i(n) + 1 si n = n′

i(n′) en otro caso

Si aplicamos updateI a un inventario i y un objeto representado por n, se devolvera un

nuevo inventario, que en caso de aplicarse a la misma entrada, nos devolvera el valor

incrementado.

Por ultimo definimos el estado de las variables como V ariables = variable→ Z, que sera

una funcion que dada una variable, nos devolvera su valor.

Para poder actualizar el estado de una variable definimos la funcion updateV .

updateV : (V ariables, variable,Z) → V ariables que dado el estado de unas variables,

una variable y un valor, devolvera un nuevo estado de variables, con el valor de la variable

tratada actualizado. Es decir, siendo v′ = updateV (v, x, n):

33

Page 45: Propuesta y estudio de un lenguaje y entorno mínimos para

CAPITULO 3. PROPUESTA

v′(y) =

n si x = y

v y si x 6= y

Es decir, al aplicar updateV a un estado de variables v, a una variable x y a un valor n,

se nos devuelve un nuevo estado de variables que para la misma entrada, nos devolvera

el valor actualizado.

Finalmente definimos el estado de la computacion como State = (a, b, c, d), a ∈ Posicion,

b ∈ Inventario, c ∈ Cuadricula, d ∈ V ariables.

En nuestra plataforma, el estado inicial estara caracterizado unicamente por la posicion

del agente y la cuadrıcula, pues el estado inicial de las variables y el inventario sera siempre

el mismo.

inventario0(n) = 0, ∀n ∈ N, inventario0 ∈ Inventario

variable0(x) = 0,∀x ∈ variable, variable0 ∈ V ariables

34

Page 46: Propuesta y estudio de un lenguaje y entorno mínimos para

CAPITULO 3. PROPUESTA

3.2.2.2. Conceptos Previos

En este apartado vamos a encargarnos de definir funciones auxiliares y conceptos pre-

vios que seran necesarios en el siguiente apartado, donde presentaremos la semantica del

modelo.

Vamos a definir la semantica de este modelo de computacion mediante la utilizacion de

semantica Denotacional. Para ello necesitamos apoyarnos en funciones cuya definicion es

composicional. Es decir, nuestras funciones solo podran estar definidas en funcion de sus

constituyentes inmediatos.

La razon por la que necesitamos este tipo de funciones es sencilla. Sobre estas estructuras

podrıamos realizar, si fuera necesario, demostraciones utilizando induccion estructural,

por ejemplo, para demostrar que dos programas son semanticamente equivalentes, es

decir, para cualquier estado inicial, obtenemos el mismo resultado.

Definiremos ⊥ como divergencia, es por eso que a partir de ahora veremos alguna funcion

especificada con ↪→ en lugar de →, esto lo haremos para hablar de funciones parciales.

El objetivo sera definir la funcion semantica, S : (Stm, State) ↪→ State, es decir, una fun-

cion que dado un programa (Stm) y un estado (State) nos devuelva el estado resultante.

Necesitamos una funcion que nos permita evaluar expresiones aritmeticas y booleanas.

Este no es el proposito del trabajo, por lo tanto supondremos que existen 2 funciones,

A : (Aexp, State)→ Z y B : (Bexp, State)→ Bool, Bool ∈ {true, false}, siendo Aexp y

Bexp expresiones aritmeticas y booleanas respectivamente, A y B nos permitiran evaluar

expresiones aritmeticas y booleanas respectivamente.

Por legibilidad, cuando una funcion tenga un estado ∈ State como argumento, lo pondre-

mos separado por un espacio.

Definimos la funcion identidad para nuestros estados como id : State→ State.

id state = state

Definimos una funcion que sera necesaria para poder especificar bucles y condicionales,

35

Page 47: Propuesta y estudio de un lenguaje y entorno mínimos para

CAPITULO 3. PROPUESTA

cond : ((State→ Bool), (State ↪→ State), (State ↪→ State))→ (State ↪→ State).

cond(p, g1, g2) state =

g1 state si p state = true

g2 state si p state = false

(3.1)

Es decir, cond es una funcion que recibe un predicado y dos funciones semanticas, y

devolvera una u otra dependiendo del valor del predicado para un estado dado.

Ademas definimos la composicion de funciones semanticas como:

(SJS2K ◦ SJS1K) state =

state′′ si ∃ state′, SJS1K state = state′ y

SJS2K state′ = state′′

⊥ si SJS1K state = ⊥ o

∃ state′, SJS1K state = state′ y

SJS2K state′ = ⊥

Esta funcion nos devolvera el resultado de la composicion, a menos que alguna de las dos

funciones diverja.

Denotaremos fn(d), f : D → D y d ∈ D como la aplicacion repetida de f sobre d, n

veces.

f 0(d) = d (3.2)

fn+1(d) = f(fn(d))

Para poder especificar el bucle indefinido tenemos que definir la funcion fix : (D → D)→

D, que sirve para calcular el punto fijo de F . Un punto fijo de una funcion f , es un punto

x tal que f(x) = x.

fix(F ) =⋃i≥0

F i(⊥) (3.3)

36

Page 48: Propuesta y estudio de un lenguaje y entorno mínimos para

CAPITULO 3. PROPUESTA

Esta funcion fix toma como argumento una funcion de un dominio a ese mismo dominio,

y devuelve otro elemento de ese dominio. En concreto este dominio D sera el de las

funciones semanticas, es decir, en nuestro caso D = (State ↪→ State).

37

Page 49: Propuesta y estudio de un lenguaje y entorno mínimos para

CAPITULO 3. PROPUESTA

3.2.2.3. Semantica

En este apartado nos encargaremos de definir la funcion semantica encargada de dado un

programa y un estado, devolver el estado resultante.

SJrightK(p, i, c, v) =

(p + (1, 0), updateI(i, n), clearC(c, p1, p2), v) si b = 1,

(n, b) = c(p1, p2)

(p + (1, 0), i, c, v) en otro caso

SJleftK(p, i, c, v) =

(p− (1, 0), updateI(i, n), clearC(c, p1, p2), v) si b = 1,

(n, b) = c(p1, p2),

p1 ≥ 1

(p− (1, 0), i, c, v) si b = 0,

(n, b) = c(p1, p2)

si p1 ≥ 1

⊥ en otro caso

SJdownK(p, i, c, v) =

(p + (0, 1), updateI(i, n), clearC(c, p1, p2), v) si b = 1,

(n, b) = c(p1, p2)

(p + (0, 1), i, c, v) en otro caso

38

Page 50: Propuesta y estudio de un lenguaje y entorno mínimos para

CAPITULO 3. PROPUESTA

SJupK(p, i, c, v) =

(p− (0, 1), updateI(i, n), clearC(c, p1, p2), v) si b = 1,

(n, b) = c(p1, p2),

p2 ≥ 1

(p− (0, 1), i, c, v) si b = 0,

(n, b) = c(p1, p2)

p2 ≥ 1

⊥ en otro caso

Como se puede observar, la funcion semantica para los comandos de movimientos nos

cambia la posicion del agente (si no se puede diverge), en caso de que haya algun objeto

que se pueda recoger, lo recoge.

SJvariable = infoK(p, i, c, v) = (p, i, c, updateV (v, variable, c(p1, p2)))

SJS1 S2K state = (SJS2K ◦ SJS1K) state

SJvariable = expressionK(p, i, c, v) = (p, i, c, updateV (v, variable, AJexpressionK v))

Aquı podemos ver como hacemos uso de la funcion A para expresiones aritmeticas de la

que hablamos anteriormente para asignar un valor a una variable.

SJrepeat expression S endK state = (SJSK)n state

39

Page 51: Propuesta y estudio de un lenguaje y entorno mínimos para

CAPITULO 3. PROPUESTA

SJif condition S endK state = cond(BJconditionK, SJSK, id) state

SJif condition S1 else S2 endK state = cond(BJconditionK, SJS1K, SJS2K) state

Para los condicionales hacemos uso de la funcion cond (3.1) que nos permite elegir entre

2 funciones dependiendo de un predicado.

Podrıamos pensar que la funcion semantica de do S while condition es tan sencilla

como:

SJdo S while conditionK state = cond(BJconditionK ◦ SJSK,

SJdo S while conditionK ◦ SJSK,

SJSK) state

Pero esta definicion no es composicional, pues se apoya en si misma, por lo tanto defini-

remos la semantica de do S while condition como el menor punto fijo de F . Es decir,

se busca una funcion f tal que F (f) state = f state, ∀state ∈ State.

SJdo S while conditionK state = fix(Fcondition, S) state

donde:

Fcondition,S(f) state = cond(BJconditionK ◦ SJSK, f ◦ SJSK, SJSK) state (3.4)

A esta funcion F se le exige que sea monotona y continua, tema que no trataremos aquı.

Podemos encontrar demostraciones de la monotonıa y continuidad de funciones similares

en otros documentos a la hora de definir la semantica del bucle while[6][7], muy similar

a do-while.

40

Page 52: Propuesta y estudio de un lenguaje y entorno mínimos para

CAPITULO 3. PROPUESTA

Caja 3.15 : Ejemplo de Semantica do x = x + 1 while x != 2

Consideremos p = do x = x + 1 while x != 2 con state = (p, i, c, v).

SJpK = fix(Fx!=2,x=x+1) donde

Fx!=2,x=x+1(f) state = (Segun 3.4)

= cond(BJx != 2K ◦ SJx = x + 1K, f ◦ SJx = x + 1K, SJx = x + 1K) state =

(Segun 3.1) =

(p, c, i, updateV (v, x, 2)) si v(x) = 1

f (p, c, i, updateV (v, x, v(x) + 1)) en otro caso

Calculos para la aproximacion del punto fijo:

Por legibilidad denotaremos fk state = F k(⊥) state.

f0 state = F 0(⊥) state = ⊥ (segun 3.2)

f1 (p, c, i, v) = F (f0) (p, c, i, v) =

=

(p, c, i, updateV (v, x, 2)) si v(x) = 1

f0 (p, c, i, updateV (v, x, v(x) + 1)) = ⊥ en otro caso

f2 (p, c, i, v) = F (f1) (p, c, i, v) =

=

(p, c, i, updateV (v, x, 2)) si v(x) = 1

f1 (p, c, i, updateV (v, x, v(x) + 1)) en otro caso

=

(p, c, i, updateV (v, x, 2)) si v(x) = 1

f1 (p, c, i, updateV (v, x, 1)) = (p, c, i, updateV (v, x, 2)) si v(x) = 0

f1 (p, c, i, updateV (v, x, v(x) + 1)) = ⊥ en otro caso

41

Page 53: Propuesta y estudio de un lenguaje y entorno mínimos para

CAPITULO 3. PROPUESTA

A partir de aquı podemos conjeturar su semantica y demostrarla por induccion.

fn (p, c, i, v) =

(p, c, i, updateV (v, x, 2)) si 2− n ≤ v(x) ≤ 1

⊥ en otro caso

(3.5)

Caso Base: n = 0

Sabemos por definicion (3.2) que f0 state = ⊥, si sustituimos en (3.5) obtenemos:

f0(p, c, i, v) =

(p, c, i, updateV (v, x, 2)) si 2 ≤ v(x) ≤ 1

⊥ en otro caso

Y por lo tanto f0 state = ⊥, ya que no se puede dar el primer caso.

Caso inductivo: n = k + 1

Asumiendo f(k) queremos demostrar

fk+1(p, c, i, v) =

(p, c, i, updateV (v, x, 2)) si 1− k ≤ v(x) ≤ 1

⊥ en otro caso

Por definicion fk+1 state = F (fk) (p, c, i, v)

=

(p, c, i, updateV (v, x, 2)) si v(x) = 1

fk (p, c, i, updateV (v, x, v(x) + 1) en otro caso

Por Hipotesis Inductiva tenemos que:

fk (p, c, i, v) =

(p, c, i, updateV (v, x, 2)) si 2− k ≤ v(x) ≤ 1

⊥ en otro caso

Por lo tanto:

42

Page 54: Propuesta y estudio de un lenguaje y entorno mínimos para

CAPITULO 3. PROPUESTA

F (fk) (p, c, i, v) =

(p, c, i, updateV (v, x, 2)) si v(x) = 1

(p, c, i, updateV (v, x, 2)) si 1− k ≤ v(x) ≤ 0

⊥ en otro caso

=

(p, c, i, updateV (v, x, 2)) si 1− k ≤ v(x) ≤ 1

⊥ en otro caso

Esta es la definicion de fk+1.

Por lo tanto, queda demostrada nuestra conjetura y

SJdo x = x + 1 while x != 2K state

= fix(Fx != 2, x = x + 1) state

=⋃i≥0

F ix != 2, x = x + 1(⊥)

=⋃i≥0

fi state

=

(p, c, i, updateV (v, x, 2)) si v(x) ≤ 1

⊥ en otro caso

= cond(BJx <= 1K, (p, c, i, updateV (v, x, 2)), ⊥) state

Es decir, si x ≤ 1, la variable x acaba con valor 2, en cualquier otro caso el programa

diverge.

43

Page 55: Propuesta y estudio de un lenguaje y entorno mínimos para

CAPITULO 3. PROPUESTA

3.3. Tareas de Entorno Mınimo

En esta seccion vamos primero a proponer un currıculo que recogera los conceptos compu-

tacionales que consideramos basicos a la hora de aprender programacion. Despues de esto

nos centraremos en proponer un modelo de tarea para cada uno de estos conceptos.

3.3.1. Currıculo de programacion

El currıculo propuesto esta organizado por unidades, cada una centrada en un concepto

computacional.

Caja 3.16 : Currıculo propuesto

Unidad 1: Instruccion Simple

Unidad 2: Secuencia de Instrucciones

Unidad 3: Bucle repeat con cuerpo simple

Unidad 4: Bucle repeat con cuerpo multiple

Unidad 5: Secuencia de bucles repeat

Unidad 6: Bucles repeat anidados

Unidad 7: Variables

Unidad 8: Entrada / Salida

Unidad 9: Operadores Aritmeticos

Unidad 10: Condicional If

Unidad 11: Condicional If-else

Unidad 12: Condicional If-else-if

Unidad 13: Bucle do-while

Unidad 14: Operadores Relacionales

Unidad 15: Operadores Logicos

44

Page 56: Propuesta y estudio de un lenguaje y entorno mínimos para

CAPITULO 3. PROPUESTA

3.3.2. Tareas

En este apartado vamos a proponer tareas mınimas para cada unidad de forma que quede

justificada la utilizacion de los conceptos que representan.

Unidad 1: El objetivo de estas tareas sera recoger un unico objeto que estara en una

de las cuatro posibles direcciones.

Figura 3.8: Tarea de instruccion simple

Unidad 2: El objetivo de estas tareas sera recoger varios objetos que estaran dis-

puestos por la cuadrıcula.

Figura 3.9: Tarea de secuencia de instrucciones

45

Page 57: Propuesta y estudio de un lenguaje y entorno mínimos para

CAPITULO 3. PROPUESTA

Unidad 3: El objetivo de estas tareas sera recoger varios objetos que estaran dis-

puestos por la cuadrıcula alineados en una direccion. Ademas, para asegurar el uso

de bucle repeat, estableceremos un numero de palabras y numeros maximo de tal

forma que no se pueda resolver con instrucciones de movimiento individuales.

Figura 3.10: Tarea de repeat con cuerpo simple

Unidad 4: El objetivo de estas tareas sera recoger varios objetos que estaran dispues-

tos por la cuadrıcula siguiendo algun patron. Al igual que en el anterior, pondremos

un lımite de palabras y numeros de tal forma que solo se pueda resolver usando

bucle repeat.

Figura 3.11: Tarea de repeat con cuerpo multiple

46

Page 58: Propuesta y estudio de un lenguaje y entorno mínimos para

CAPITULO 3. PROPUESTA

Unidad 5: El objetivo de estas tareas sera recoger varios objetos que estaran dis-

puestos por la cuadrıcula siguiendo varios patrones. Al igual que en el anterior,

pondremos un lımite de palabras y numeros de tal forma que solo se pueda resolver

usando bucles repeat.

Figura 3.12: Tarea de secuencia de repeat

Unidad 6: El objetivo de estas tareas sera recoger varios objetos que estaran dis-

puestos por la cuadrıcula siguiendo algun patron que se repite. Al igual que en el

anterior, pondremos un lımite de palabras y numeros de tal forma que solo se pueda

resolver usando bucles repeat.

Figura 3.13: Tarea de repeat anidados

47

Page 59: Propuesta y estudio de un lenguaje y entorno mínimos para

CAPITULO 3. PROPUESTA

Unidad 7: El objetivo de estas tareas sera observar como se comporta un progra-

ma dependiendo del valor de sus variables. De esta forma es sencillo comprender

que el comportamiento de una variable es similar al de un valor cualquiera, con la

peculiaridad de que se puede cambiar.

Figura 3.14: Tarea de Variables

Caja 3.17 : Tarea Unidad 7

1 tipos_tuercas = 3

2 columnas_tipo = 2

3

4 repeat tipos_tuercas * columnas_tipo

5 right

6 down

7 up

8 end

48

Page 60: Propuesta y estudio de un lenguaje y entorno mínimos para

CAPITULO 3. PROPUESTA

Unidad 8: El objetivo de estas tareas sera recoger el numero de objetos que un

agente auxiliar nos pida. Normalmente estaran alineados para ser resueltas usando

un bucle repeat. Ademas, el agente auxiliar no devolvera un numero fijo, sino que

se comprobara todo un rango de valores para obligar al usuario a resolverla usando

los recursos que se ensenan en dicha unidad.

Figura 3.15: Tarea de entrada/salida

Unidad 9: El objetivo de estas tareas sera recoger el numero de tuercas resultante

de hacer una operacion aritmetica con la informacion de dos agentes auxiliares.

Figura 3.16: Tarea de operadores aritmeticos

49

Page 61: Propuesta y estudio de un lenguaje y entorno mínimos para

CAPITULO 3. PROPUESTA

Unidad 10: El objetivo de estas tareas sera entrar por la puerta por una de dos

puertas que estan alineadas. El programa se prueba para ambas puertas.

Figura 3.17: Tarea de if

Unidad 11: El objetivo de estas tareas sera entrar por una de dos puertas que estan

en direcciones distintas. El programa se prueba para ambas puertas.

Figura 3.18: Tarea de if - else

50

Page 62: Propuesta y estudio de un lenguaje y entorno mínimos para

CAPITULO 3. PROPUESTA

Unidad 12: El objetivo de estas tareas sera entrar por una de varias puertas que

estan en cualquier disposicion. El programa se prueba para todas las puertas.

Figura 3.19: Tarea de if - else - if

Unidad 13: El objetivo de estas tareas sera encontrar la caja que tiene un numero

requerido de objetos en su interior. Solo hace uso de condiciones con == y !=. En

estas tareas, se comprobara el programa para todas las permutaciones de los valores

de las cajas.

Unidad 14: El objetivo de estas tareas sera encontrar la caja que tiene un numero

requerido de objetos dentro de un rango en su interior.

Unidad 15: El objetivo de estas tareas sera encontrar la caja que tiene un numero

requerido de objetos teniendo varias condiciones en conjuncion o disyuncion.

Figura 3.20: Tarea Unidades 13/14/15

51

Page 63: Propuesta y estudio de un lenguaje y entorno mínimos para

CAPITULO 3. PROPUESTA

52

Page 64: Propuesta y estudio de un lenguaje y entorno mínimos para

CAPITULO 4

Conclusiones y lıneas futuras

Como conclusion podemos decir que este proyecto, realizado en el marco de una beca de

iniciacion a la investigacion, esta centrado en la busqueda de sencillez en todos los sentidos.

Proponemos un modelo de computo centrado en la ensenanza que se apoya fuertemente

en la visualizacion. Hemos cogido elementos de otros lenguajes buscando siempre reducir

la dificultad en la sintaxis, ya que hay que tener en cuenta que esta herramienta sera

usada por personas que pueden no saber leer y escribir correctamente. Es decir, nuestro

objetivo respecto a la sintaxis ha sido acercarlo al lenguaje natural y evitar parentesis,

llaves, etc, para no tener que realizar complicadas combinaciones de teclas para escribir

caracteres especiales.

La sencillez es la razon por la que este lenguaje es tan reducido, de hecho, es la razon

principal por la que incluimos el bucle repeat en lugar del bucle for. Usamos un sistema

de movimiento absoluto, por la sencillez de planificar visualmente las acciones a realizar,

sin tener en cuenta el angulo en el que se encontrara el agente en un determinado momento.

Todas las estructuras computacionales que incluye quedan justificadas por las tareas que

hay que resolver con ellas, forzando que se use el concepto computacional adecuado para

completarla. Esto se puede ver especialmente en las tareas que incluyen puertas y cajas,

en las que tuvimos que introducir ciertos elementos ya descritos para que desde el lado

del usuario se perciba aleatoriedad. Gracias a esto nos aseguramos que no se realicen

programas a medida y que los programas escritos sean generales.

53

Page 65: Propuesta y estudio de un lenguaje y entorno mínimos para

CAPITULO 4. CONCLUSIONES Y LINEAS FUTURAS

Durante la realizacion de este proyecto hemos utilizado muchos scripts, tanto en Bash [8]

como en GNU Octave [4]. Han sido usados principalmente para procesamiento de texto,

pues las tareas se organizan en un formato propio, parecido a JSON(JavaScript Object

Notation), por lo que cualquier cambio que quisieramos hacer en masa, se hizo usando

tecnicas como expresiones regulares.

Con respecto a las unidades, nos hemos centrado en que la dificultad entre ellas sea

gradual. Hemos propuesto un currıculo que cubra la programacion basica destinada a los

alumnos desde 1º de primaria hasta 2º de bachiller.

Aun queda trabajo por hacer en este campo, por un lado, la generacion automatica de

tareas es un campo interesante, en el que podemos utilizar tecnicas como busqueda con

retroceso para generar caminos validos de cierta longitud dentro de la cuadrıcula y repartir

objetos por este.

Otro tema interesante serıa la utilizacion de este modelo para la ensenanza de otras

asignaturas como Matematicas, Fısica o incluso Lengua Castellana.

Finalmente esta herramienta nos abre la posibilidad de crear nuevos cursos para ademas de

ensenar programacion basica, anadir campos como Inteligencia Artificial, Programacion

Orientada a Objetos, Programacion funcional, Algoritmia, etc. Incluso se podrıa estudiar

la capacidad de aprendizaje de los estudiantes de los cursos K-12 para aprender sobre

todos estos campos.

54

Page 66: Propuesta y estudio de un lenguaje y entorno mínimos para

Bibliografıa

[1] Michele Van Dyne y Jeffrey Braun. ((Effectiveness of a Computational Thinking (CS0)

Course on Student Analytical Skills)). En: Proceedings of the 45th ACM Technical

Symposium on Computer Science Education. SIGCSE ’14. Atlanta, Georgia, USA:

Association for Computing Machinery, 2014, pags. 133-138. isbn: 9781450326056.

doi: 10.1145/2538862.2538956. url: https://doi.org/10.1145/

2538862.2538956.

[2] F. Vico, M. Molina, D. Orden, J. Ortiz, R. Garcıa y J. Masa. ((A coding curriculum

for K-12 education: the evidence-based approach)). En: EDULEARN19 Proceedings.

11th International Conference on Education and New Learning Technologies. Palma,

Spain: IATED, jul. de 2019, pags. 7102-7106. isbn: 978-84-09-12031-4. doi: 10.

21125/edulearn.2019.1698. url: http://dx.doi.org/10.21125/

edulearn.2019.1698.

[3] F. Vico, M. Molina, D. Orden, F. Rivas-Ruiz, R. Garcıa y J. Masa. ((coding skills

are acquired gender-independently in the K-12 system: the Toolbox Academy expe-

rience)). En: EDULEARN19 Proceedings. 11th International Conference on Education

and New Learning Technologies. Palma, Spain: IATED, jul. de 2019, pags. 7076-7079.

isbn: 978-84-09-12031-4. doi: 10.21125/edulearn.2019.1692. url: http:

//dx.doi.org/10.21125/edulearn.2019.1692.

[4] John W. Eaton, David Bateman, Søren Hauberg y Rik Wehbring. GNU Octave ver-

sion 5.2.0 manual: a high-level interactive language for numerical computations. 2020.

url: https://www.gnu.org/software/octave/doc/v5.2.0/.

[5] Referencia de JavaScript. url: https://developer.mozilla.org/es/

docs/Web/JavaScript/Referencia.

55

Page 67: Propuesta y estudio de un lenguaje y entorno mínimos para

BIBLIOGRAFIA

[6] Hanne Riis Nielson y Flemming Nielson. Semantics with Applications: An Appetizer

(Undergraduate Topics in Computer Science). Berlin, Heidelberg: Springer-Verlag,

2007. isbn: 1846286913.

[7] Roberto Bruni y Ugo Montanari. Models of Computation. 1st. Springer Publishing

Company, Incorporated, 2017. isbn: 3319428985.

[8] Case Western Reserve University Chet Ramey y Free Software Foundation Brian

Fox. Bash Reference Manual. Mayo de 2019. url: https://www.gnu.org/

software/bash/manual/bash.pdf.

56

Page 68: Propuesta y estudio de un lenguaje y entorno mínimos para

E.T.S de Ingeniería Informática Bulevar Louis Pasteur, 35 Campus de Teatinos 29071 Málaga E.T.S. DE INGENIERÍA INFORMÁTICA