Habilidades de programación: Pensamiento lógico

El pensamiento lógico es indispensable a la hora de programar, ya que nos permite reconocer el problema que queremos solucionar, buscar una solución que podamos programar y analizar las salidas que obtengamos para formarnos conclusiones.

Un programa no siempre se comportará del mismo modo en todas las situaciones, sino que mostrará unas salidas diferentes según las entradas o la interacción que realice en ese instante con el entorno (si es que utiliza sensores). Por ello, es muy importante poder anticiparnos y programar un código que tenga en cuenta todas estas situaciones. Aquí es donde entra en juego el pensamiento lógico. Cuanto más desarrollada tengas esta capacidad, tu programa hará más a menudo lo que pensabas que haría.

Algunos de los bloques de Scratch que puedes utilizar para ayudarte a desarrollar esta habilidad son los siguientes:

  • Si estás empezando, comienza con:

Logic1

El bloque “si” <condición> “entonces” permite indicar al flujo del programa si deben ejecutarse ciertos bloques de código o no. Es decir, si se cumple la condición entonces se ejecutarán los bloques que están dentro del si. En el ejemplo, si el personaje está tocando el color azul dirá “Llegué a la meta”.

  • Una vez superado el bloque anterior puedes atreverte con el siguiente:

Logic2

Aquí además de tener bloques si  se cumple la condición, también tenemos bloques si esta no se cumple. Es decir, dentro del “si” irán los bloques que queramos que se ejecuten si la condición se cumple y dentro del “si no” indicaremos qué bloques deben ejecutarse si no se cumple la condición.

En el ejemplo, si el personaje está tocando el color azul dirá “Llegué a la meta”, pero mientras no lo esté tocando dirá “Aún no he llegado a la meta”.

  • Para alumnos muy avanzados se propone entender y poner en práctica los siguientes bloques:

Logic3

Prácticamente todos los bloques los conoces, excepto a lo mejor los de color verde, ya que son los más avanzados. Hay tres que vamos a explicar por separado:

  1. La operación Y: esta condición se cumplirá si ocurren las dos cosas simultáneamente. Si nuestro personaje está tocando al enemigo “y además” el número de vidas es 0 será el “Fin de la partida” y todo se detendrá.
  2. La operación O: la condición será verdadera cuando alguna de las dos que la forman se cumplen. En este caso, si nuestro personaje está tocando el borde “o” tocando al enemigo se le quitará una vida.
  3. La operación NO: lo que hace es evaluar la condición y devolver lo contrario, si la condición se cumple devolverá que no se cumple y viceversa. Ahora veremos si hemos llegado al final del juego o no viendo en qué nivel estamos, si el nivel en el que estemos es diferente de 5, la condición igual será falsa, pero “no” se encarga de hacerla verdadera y así podremos ver el mensaje “Aún te quedan niveles por descubrir”.

Estos bloques son los más importantes que hemos visto ya que son los que aportan la lógica a tu programa.Te animamos a que los pruebes y si tienes dudas nos las indiques, estaremos encantados de ayudarte.

¡Utilízalos de la forma más inteligente posible para desarrollar tu pensamiento lógico al máximo!

Habilidades de programación: Sincronización

Los ordenadores son inútiles, solo pueden darte respuestas.

-Pablo Picasso

A veces queremos que nuestro programa siga un orden determinado. Por ejemplo, que tal personaje realice una acción cuando otro ha acabado, y así formando una cadena ordenada de acciones.

¿Qué bloques podemos usar para controlar esto?

Tenemos varios bloques que nos permiten controlar la sincronización. El más básico es el bloque “esperar x segundos”, que nos permite que dos personajes establezcan una conversación. Es importante que el número de segundos en el que tarda uno en hablar sea el mismo que el que el otro espera escuchando.

Captura de pantalla 2015-05-02 a las 20.56.24

Si probamos a analizar este mini-proyecto en Dr.Scratch, vemos que sacamos en la parte de Sincronización la puntuación 1/3. ¿Te parece poco? ¡Pues a mejorar!

¿Y qué mas bloques podemos usar?

Podemos usar el envío de mensajes. Se encuentra en el apartado “Eventos” de color naranja. Este bloque funciona de la siguiente manera: cuando se ejecuta el bloque “enviar [mensaje]” el [mensaje] lo reciben el resto de personajes:

Captura de pantalla 2015-05-02 a las 21.02.33

En el ejemplo de arriba, el personaje del gato envía el mensaje [Pillado] cuando el puntero del ratón le toca, y la mariposa recibe ese mensaje mediante el bloque “al recibir[mensaje]”. Cuando la mariposa reciba el mensaje “pillado” se ejecutará el resto de bloques que tiene debajo.

Vamos a analizar este proyecto…

Captura de pantalla 2015-05-02 a las 21.11.13

¡Ahora tenemos 2/3! ¡Vamos avanzando! ¿Quieres tener la puntuación perfecta? Sigue leyendo…

Espera… ¿pero existen más bloques para controlar la sincronización?

¡Pues sí! Por ejemplo los bloques “esperar hasta que…” (bloques de color amarillo) o “cuando el fondo cambie a…” (bloques de color naranja). Un ejemplo de uso puede ser el siguiente:

Captura de pantalla 2015-05-02 a las 21.15.27

En el primer ejemplo, cuando la ejecución del programa llegue a ese punto se detendrá hasta que se cumpla la condición, en este caso hasta que vidas sea igual a 0. Cuando vidas valga 0, entonces continuará la ejecución del resto de bloques, en este caso “decir Game Over” y“detener todos”, lo que finalizará la ejecución del proyecto. En el segundo ejemplo, en el momento en el que el escenario cambie al fondo con el nombre “Primavera”, el personaje ejecutará los bloques colocados a continuación de la instrucción “cuando el fondo cambia a Primavera”, es decir, que se mostrará y dirá “¡Ha llegado la primavera!”

¿Se te ocurre algún bloque más? ¡Cuéntanoslo!

Saludos,

El equipo de Dr.Scratch.

Habilidades de programación: Control de flujo

El ordenador no es una máquina inteligente que ayuda a gente estúpida, de hecho, es una estúpida máquina que funciona sólo en manos de gente inteligente. Umberto Eco

Todo programa o proyecto de Scratch sigue un flujo de ejecución.

¿Qué es un flujo de ejecución?

Si te lo has preguntado al leerlo, el flujo de ejecución de tu programa es el orden en el que tus personajes realizan las distintas acciones, por ejemplo, moverse en una dirección primero, decir hola después y para acabar cambiando de disfraz.

Y es muy importante que nosotros controlemos el flujo del programa para saber perfectamente qué esta haciendo en cada momento y así nuestros personajes no empiecen a comportarse de forma “rara” debido a que realmente no estamos programando bien.

¿Cómo puedo controlar el flujo de mi programa en Scratch?

  • Nivel básico: El flujo de ejecución más sencillo será aquel en el que primero se realizará una acción (en lenguaje de programación, instrucción), más tarde se ejecutará otra instrucción y después otra… así hasta llegar al final de nuestro programa. A continuación tenemos un ejemplo:

Flow1

Podemos ver que cuando el usuario presione sobre la bandera verde se ejecutarán un bloque detrás de otro y así todos los bloques que se han incluido en el programa. Comenzará por el primero y dirá “Soy un gato que baila” durante 2 segundos, luego ejecutará “mover 10 pasos”, a continuación “girar 15 grados a la derecha”, y así hasta llegar al último bloque del programa.

  • Nivel medio: Algo más avanzado es utilizar lo que en programación se llaman estructuras de control, que en Scratch son los bloques de control de color ámbar. Si los observas uno a uno, todos ellos hacen que el flujo de tu programa cambie de algún modo.

Algunos de estos bloques de control nos ayudan si queremos que otros bloques se repitan varias veces. Intenta adivinar en los siguientes ejemplos, cuál se repetirá 3 veces y cuál para siempre.

Flow3Flow2

¡EXACTO! El programa de la izquierda estará ejecutando dos bloques por siempre, mientras que el bloque de la derecha ejecutará varias instrucciones 3 veces y entre algunos bloques esperará 0.5 segundos. Trata de buscar código que se repite en tu programa y utilizar este tipo de bloques.

  • Nivel alto: Si tu programa es más complicado, te encontrarás con el problema de no saber exactamente qué número de veces se deben repetir algunos bloques, sino que querrás que se repitan hasta que ocurra algo. Aquí te mostramos un ejemplo que puede resultarte de ayuda.

Flow4

Con esto conseguimos que el personaje diga “No me pillas…” hasta que toque al personaje llamado Enemigo, entonces dejará de repetir y dirá “Me pillaste!”.

Estos bloques pueden ser los más difíciles de entender, así que trata de avanzar poco a poco y con paciencia. Pero realmente aquí se encuentra gran parte de la lógica de la programación, entonces es muy importante que aprendas a utilizarlos. Y ya sabes, si tienes alguna duda o problema, no dudes en dejar un comentario y trataremos de ayudarte.

El equipo de Dr.Scratch

Habilidades de programación: Paralelismo

Divide y vencerás. Julio Cesar

Los ordenadores siempre hacen lo que nosotros les decimos que hagan, aunque muchas veces parezca que no. Además, son capaces de realizar muchas acciones en poco tiempo, incluso pueden realizar varias a la misma vez. Lo difícil viene cuando tenemos que solucionar un problema muy complicado, aquí es cuando es una buena práctica utilizar el “divide y vencerás”. Hacemos que nuestro gran problema se divida en otros más pequeños. Pero esto ya lo vimos en la entrada de Abstracción.

Entonces… ¿qué es el paralelismo? 

Es tener la posibilidad de hacer que nuestro programa realice varias acciones a la vez.

Para entendernos, un ejemplo puede ser que dos personajes se muevan al mismo tiempo. Esto se resolvería en primer lugar, dividiendo el problema inicial en dos problemas separados:

  1.  Consigo que el primer personaje haga un movimiento.
  2.  Programo al segundo personaje para que haga otro movimiento.

Y ahora viene la parte del paralelismo, hacemos que ambos hagan sus movimientos a la vez.

¿Cómo puedo conseguir esto en Scratch?

  • Nivel básico: la forma más fácil de hacer que dos acciones ocurran a la vez, es que cuando pulsamos la bandera verde (que es cuando comienza el programa a ejecutarse), ocurran dichas acciones.

En nuestro ejemplo, que los dos personajes se muevan cuando pulso la bandera verde. Por lo tanto, tendremos dos personajes y cada uno tendrá el bloque de evento siguiente:

Paral1

Y por debajo los bloques de movimiento que queramos que hagan nuestros dos personajes.

  •    Nivel medio: sabemos que en Scratch hay muchos bloques de eventos. Así que otra forma de conseguir paralelismo puede ser que ocurran cosas cuando presionamos una tecla, consiguiendo que nuestros personajes realicen acciones de forma paralela (aplicando el concepto de paralelismo).

Un ejemplo puede ser que nuestros dos personajes digan “A” al mismo tiempo durante 2 segundos al presionar la tecla a, lo cual se consigue con los siguientes bloques:

Paral2       Paral3

  • Nivel alto: hay muchos más bloques de eventos que nos ayudan a conseguir que en nuestro programa ocurran acciones de forma paralela. Entre ellos tenemos:

Paral5

Pero la idea es básicamente la misma, colocar alguno de estos bloques en los dos personajes que queramos que hagan acciones a la vez y por debajo de ellos poner los bloques que describan las acciones de dichos personajes.

Lo más divertido de Scratch es que puedes conseguir que los objetos (tus personajes) que incluyes en tu proyecto hagan tantas acciones como quieras, muchas de ellas a la vez aplicando paralelismo. Lo que hemos mostrado aquí son simples ejemplos. Así que, te animamos a que intentes realizar todas las ideas que se te ocurran y si en algún momento no sabes llevarla a cabo en Scratch no dudes en dejar tu comentario y trataremos de ayudarte.

El equipo de Dr.Scratch

Habilidades de programación: Representación de la información

Cada proyecto Scratch necesita un conjunto de información sobre los personajes para poder ejecutarse correctamente. Por ejemplo, necesitamos conocer la posición de cada personaje, la dirección a la que está apuntando, su tamaño, etc. Además, podemos guardar otro tipo de datos, como el nivel en el que nos encontramos, el tiempo transcurrido, la puntuación, las vidas, las recompensas recogidas…

Cada personaje tiene una serie de características o atributos, que en cada momento de ejecución del proyecto tienen un valor, y que pueden ser modificadas por los programas. Por ejemplo, un personaje tiene un tamaño determinado que puede ser modificado por el bloque “cambiar tamaño por 10”, haciendo que el personaje aparezca un poco más grande. A continuación mostramos la lista de atributos que tiene cada personaje y los bloques que pueden utilizarse para modificarlos:

  • Posición:

DataRep1

  • Tamaño:

DataRep2

  • Orientación:

DataRep3

  • Disfraz:

DataRep4

  • Visibilidad:

DataRep5

Otra manera de representar información es creando nuestras propias variables. Las variables pueden almacenar datos como la puntuación, las vidas que nos quedan o el nombre del usuario. Para crear una variable simplemente tenemos que acceder a la categoría Datos, pulsar “Crear una variable” y darle un nombre:

DataRep6

El programa de la izquierda fija la variable “Puntos” a 0 (lo que en programación se llama inicializar variables) mientras que el programa de la derecha cambia el valor de “Puntos” cuando se toca el color azul.

Otra opción más avanzada que nos permite la categoría Datos es el uso de listas. Las listas almacenan varios valores a la vez.

Para crear una lista vamos a la categoría Datos y pulsamos “Crear una lista”, le asignamos un nombre y vemos que nos aparecen las siguientes opciones para manejar la lista:


opciones-lista

El primer bloque “añade [thing] a [lista]” es bastante intuitivo y lo que hace es poner el elemento “thing” al final de la lista.

El bloque “borrar (1) de [lista]” nos permite borrar el primer elemento de la lista, pero si cambiamos (1) por (último) o por (todo), borraremos el último elemento o todos los elementos de la lista.

El bloque “insertar [thing] en (1) de [lista]” coloca en la posición (1) de la lista el elemento [thing] (moviendo los demás elementos una posición más atrás) pero si cambiamos (1) por (último) o (azar) lo insertaremos al final o en una posición al azar.

El bloque “reemplazar elemento (1) de [lista]” borra el elemento que haya en la posición (1) y coloca en su lugar un elemento [thing].

El bloque “elemento (1) de [lista]” nos devuelve qué hay en dicha posición.

El bloque “longitud de [lista]” nos dice cuántos elementos hay en la lista.

El bloque “[lista] contiene [thing]?” comprueba si en la lista existe ese elemento y nos devuelve “sí” o “no”.

Y finalmente, los bloques “mostrar lista” y “esconder lista” simplemente nos muestra o esconde la lista en la pantalla.

Una vez repasadas todas las cosas que podemos hacer con la lista, podemos aplicarlas a nuestro programa y hacer un proyecto como el siguiente:

DataRep8

Se trata de un proyecto que saca voluntarios a la pizarra. Primero vamos a borrar toda la lista de Estudiantes por si hubiera algún elemento en ella. Después vamos a querer recopilar los nombres de los estudiantes así que vamos a pedir tres veces (por ejemplo) el nombre del estudiante y lo vamos a insertar en la lista. Finalmente anunciaremos el nombre del voluntario que será elegido al azar. La ejecución del proyecto en Scratch nos da lo siguiente:

Captura de pantalla 2015-04-24 a las 12.14.25Captura de pantalla 2015-04-24 a las 12.14.47Captura de pantalla 2015-04-24 a las 12.15.56

Analizamos este proyecto en Dr.Scratch y observamos qué puntuación hemos tenido en la parte de “Representación de la información”:

Captura de pantalla 2015-04-24 a las 12.22.21

¡¡¡Enhorabuena!!! Hemos conseguido la puntuación completa en “Representación de la información”. ¿Se te ocurren más proyectos en los que usar listas? ¡Cuéntanoslo!

Podéis probarlo vosotros mismos aquí.

Saludos,

El equipo de Dr.Scratch.

Habilidades de programación: Abstracción

Una de las habilidades más complicadas a la hora de programar es la de la abstracción.

Pero, ¿qué significa abstraer? Abstraer consiste en dividir un problema(o reto, o desafío) grande, en problemas pequeños y de fácil solución. Por ejemplo, imaginemos que nos piden que construyamos un coche. En un primer momento podemos llevarnos las manos a la cabeza y pensar “¿Cómo voy a construir yo un coche?”, pero si aplicamos la habilidad de abstracción podemos dividir el problema grande (construir un coche) en problemas pequeños(buscar un motor, montar el volante, montar los asientos, la carrocería, etc). Si lo vemos de ésta manera, el problema grande se ha convertido en un conjunto de metas más alcanzables.

¿Es la abstracción una habilidad utilizada sólo en la programación?

¡¡¡No!!! Podemos utilizarlo en cualquier aspecto de nuestra vida. Es bastante útil cuando, por ejemplo, necesitamos prepararnos para algún examen. En nuestra agenda anotaríamos “Estudiar mates”, pero si en vez de anotar eso apuntamos “Hacer problemas de mates del 1 al 10”, “Hacer esquema”, “Hacer resumen”… Una tarea costosa se ha convertido ahora en un número de tareas que se pueden hacer en una hora cada día.

¿Y en qué me ayuda a mi la abstracción?

La abstracción nos ayuda sobre todo a percibir los desafíos como metas alcanzables. Puede ayudarnos también a avanzar poco a poco en el desarrollo de un proyecto en Scratch y además puede servir para que reutilicemos código que ya hemos hecho.

A continuación vamos a exponer tres maneras de usar la abstracción en Scratch. Trataremos de mejorar el siguiente programa usando la abstracción.

Abs1Abs2

1. Nivel básico:

Abs3

2. Nivel medio: creando funciones propias.

    Abs6      Abs7

3. Nivel avanzado: utilizando clones(cuando queremos repetir personajes).

Abs8

Y hasta aquí todo por hoy, y como siempre, podéis comunicarnos dudas y sugerencias.

Un saludo,

El equipo de Dr.Scratch.

Errores comunes al empezar a programar

Cada acto de aprendizaje consciente requiere la voluntad de sufrir una lesión en la propia autoestima. Es por ello que los niños pequeños, antes de ser conscientes de su autoestima, aprenden más fácilmente. Thomas Szasz

Cuando empezamos a realizar cualquier actividad, del tipo que sea, siempre cometemos errores, lo difícil es asumir este hecho para más tarde ponerle solución.

Dr.Scratch nos ayuda en la tarea del aprendizaje de los lenguajes de programación y para ello nos indica algunos de los errores más comunes que varios docentes han observado en sus alumnos a lo largo de sus años de enseñanza en la materia.

errores

Estos errores pueden ser difíciles de entender para personas que están comenzando, somos conscientes de ello y estamos trabajando para tratar de mejorar la herramienta y que sean fácilmente entendibles. Pero mientras tanto os facilitamos unas transparencias realizadas por Jesús Moreno que os ayudarán a entender la finalidad de Dr.Scratch y estos errores tan comunes.

Como siempre podéis hacer cualquier comentario y preguntar toda duda que os surja, estaremos muy contentos de recibirlos.

El equipo de Dr.Scratch

Empezando con Dr.Scratch

En el primer tutorial queremos mostraros la versión Beta de Dr.Scratch, la cual empezamos a desarrollar hace algunos meses y en la que seguimos trabajando.

Próximamente tendremos el vídeo en Castellano, pero podéis pasaros ya por la página para echarle un ojo. ¡La traducción al Castellano de la web ya está! Además, veréis que hemos cambiado la apariencia. ¿Cuál os gusta más?

Nos gustaría, también, poder traducirla a otras lenguas y estamos abiertos a cualquier colaboración. Así que si deseas que tú o tus alumnos aprendan a programar en otra lengua, háznoslo saber escribiendo a drscratch@programamos.es

El equipo de Dr.Scratch