• Nenhum resultado encontrado

aprendizado de estruturas mais complexas, os alunos passaram mais tempo programando, entre outras.

Malan e Leitner (2007) descrevem os resultados de um experimento onde a maioria dos alunos (75% de um total de 25 estudantes) classificou como positiva a experiência inicial com o Scratch. Os autores ainda descrevem uma série de frases proferidas pelos alunos mostrando que o Scratch foi considerado divertido, permitiu que os alunos pensassem como programadores de forma intuitiva, entre outros. Um dos alunos que classificou o Scratch como uma influência negativa no aprendizado da linguagem Java (linguagem utilizada depois do Scratch) argumentou que o software é divertido e fácil, porém, a codificação em Java era muito mais difícil e os resultados bem menos interessantes.

Neste caso, os alunos jogam apenas quando terminam de programar seu próprio jogo. O jogo que foi utilizado nesta pesquisa difere desta abordagem na medida em que o aluno programa parte do jogo (mais especificamente um robô) enquanto joga, e o avanço no jogo é determinado pela corretude do programa construído. O Quadro 5 sumariza as características desta pesquisa e dos trabalhos similares analisados.

A terceira e última classe de trabalhos similares a esta pesquisa é constituída pelos softwares que são utilizados como ferramentas de apoio à aprendizagem de programação introdutória. Os softwares analisados influenciaram fortemente as idéias utilizadas neste trabalho. A adoção de uma linguagem de programação baseada no encaixe de componentes visuais, por exemplo, foi baseada nos softwares Scratch e Alice. O Quadro 6 sumariza as principais características dos softwares utilizados no apoio a aprendizagem de programação que foram analisados nesta pesquisa.

Publicação Contextualização dos

Problemas Desafios Tipo de linguagem de programação

Barnes et al (2007) Game2Learn:

building CS1 learning games for retention.

Boa contextualização, o aluno pode identificar facilmente qual a utilidade da solução do problema dentro dos jogos. Entretanto, cada nível do jogo se parece com um mini-jogo isolado, e os níveis parecem pouco relacionados entre si.

Derrotar um inseto respondendo questões sobre ciência da computação.

Ajudar um fazendeiro a colocar ovos em uma grade ajustando dois loops aninhados.

Ajustar um loop do tipo do-while

selecionando e ordenando linhas de código disponibilizadas no próprio ambiente do jogo.

Utilizar desvios condicionais para destrancar uma porta, utilizar loops aninhados para construir uma ponte, e utilizar loops aninhados para resolver um criptograma.

O aluno não chega a programar, apenas utiliza a interface do jogo para responder questões de múltipla escolha, ordenar

instruções de programação, preencher trechos de código, entre outros.

Nevison e Wells (2004)

Using a maze case study to teach:

object-oriented programming and design patterns.

Boa contextualização. A utilidade da resolução de cada problema é bastante clara, pois todos os exercícios são programados com a intenção de fazer um personagem movimentar-se em um labirinto.

Implementação de um personagem que caminha em um labirinto. Evitar “muros” do labirinto utilizando desvios condicionais.

Programação de um personagem que caminhe várias células (ao invés de apenas uma) em uma direção até que encontre um muro utilizando um loop.

Os alunos programam em uma linguagem baseada em texto (como JAVA ou C++).

Recebem classes prontas do professor e apenas alteram métodos específicos para cada atividade realizada. Os detalhes das classes que implementam o labirinto não são apresentados aos alunos.

Eagle e Barnes (2008, 2009) Wu's castle: teaching arrays and loops in a game.

Experimental Evaluation of an Educational Game for Improved Learning in Introductory Computing.

O jogo aborda apenas loops e arrays. Alguns desafios

apresentados aos alunos são: editar todo o array, editar somente as posições pares, somente as posições ímpares, editar uma subseção do array, etc. Não fica claro se estes desafios têm algum propósito relacionado com o jogo,

aparentemente são apenas tarefas que devem ser concluídas para avançar no jogo.

Fazer um personagem caminhar usando loops aninhados.

Responder questões de múltipla escolha sobre o código de um loop, tais como: “Qual a variável controla o loop externo?”.

Nenhuma linguagem de programação é utilizada. O jogo provê, por exemplo, a estrutura de um loop for em C++ e permite que os alunos modifiquem a condição inicial, a condição de parada e o tamanho do passo do loop via interface do jogo. Nenhum código é realmente digitado pelos alunos.

Clua (2008) A Game Oriented Approach for

Há um bom nível de

contextualização, pois o autor sugere situações concretas onde os

O autor sugere a animação da movimentação de um sprite como forma de entender visualmente o resultado de um loop.

Nenhuma linguagem foi utilizada ou sugerida, pois o trabalho propõe uma metodologia de ensino baseada em jogos, e

das bordas da tela do jogo e muda de direção em conseqüência da colisão. Este último exemplo trabalharia os desvios condicionais.

poderiam ser aplicadas em qualquer linguagem.

Long (2007) Just For Fun: using programming games in software

programming training and education.

Boa contextualização. A utilidade da solução dos problemas de

programação fica evidente no comportamento dos tanques de guerra programados. Quanto melhor for a programação melhor será o poder de batalha do tanque programado. Toda programação é feita com um objetivo muito específico: programar um bom algoritmo de batalha.

Programar tanques de guerra para procurar e destruir outros tanques presentes em uma arena. Os alunos podem utilizar ações pré- definidas para controlar o tanque.

Os alunos utilizam uma linguagem baseada em texto (JAVA) apenas para invocar funções básicas de controle dos robôs. A visualização dos próprios robôs e mesmo da arena de batalha é uma “caixa preta” para os alunos.

Gómez-Martin, Gómez-Martin e González-Calero (2004).

Game-driven intelligent tutoring systems.

Os autores não mencionam se existe relação entre a solução dos

problemas (construção de programas) e o enredo do jogo.

Aparentemente os programas construídos pelos jogadores não tem utilidade no contexto do jogo, são apenas desafios que precisam ser vencidos.

Os autores não especificam os desafios em maiores detalhes, mencionam apenas que os jogadores constroem programas dentro de um ambiente lúdico que simula uma máquina virtual JAVA.

Os alunos devem escrever programas na sintaxe da linguagem Java. Além disso, devem compilar o programa dentro do ambiente do jogo, pois um dos objetivos deste último é facilitar o entendimento do processo de compilação.

O jogo que foi utilizado nesta pesquisa

Boa contextualização dos problemas. O resultado de cada solução de problema é utilizado para algo dentro do enredo do jogo, de maneira que o aluno saiba para quê está construindo cada programa.

Utilizar desvios condicionais para verificar estados de interruptores e fazer com que um robô execute ações de acordo com os estados.

Utilizar loops e testes condicionais para encontrar um interruptor que gere a maior quantidade de energia para suprir uma base espacial onde o personagem do jogo (um robô) se encontra.

Os alunos utilizam uma linguagem de programação onde as partes de um programa podem ser arrastadas e encaixadas umas nas outras. Nenhum código é digitado.

Os programas construídos são corrigidos automaticamente e os problemas encontrados são apresentados aos alunos.

Quadro 5. Síntese dos trabalhos que utilizam jogos para auxiliar a aprendizagem de programação

Software Idéia geral Prós Contras Alice Permite a construção de ambientes

virtuais em três dimensões. A

programação é feita através do encaixe de componentes disponibilizados no

software.

Modelos tridimensionais podem ser colocados no mundo virtual e manipulados com instruções de programação.

A idéia de programar encaixando blocos elimina as dificuldades com sintaxe presente em linguagens de programação baseadas em texto. A criação de ambientes virtuais com três dimensões fica bastante facilitada com as funcionalidades oferecidas pelo software.

Howard (2004) e Brown (2008) utilizaram o Alice com alunos e mencionam um aumento da motivação. Powers, Ecott e Hirshfield (2007) mencionam um aumento na retenção.

Autores mencionam que o software requer recursos computacionais acima da média, o software é considerado “pesado”. Autores também relatam que o modelo de herança utilizado é problemático, e que os alunos apresentam dificuldade na transição do Alice para uma linguagem de programação textual como Java.

Greenfoot Permite a criação de aplicações baseadas em simulação em um ambiente

bidimensional. Permite a execução interativa dos métodos dos objetos criados na simulação. Cada objeto tem uma representação gráfica e uma posição dentro de um mundo virtual. As interações com os objetos podem ser observadas nas mudanças das suas posições e aparência.

Inclui edição de código, compilação, criação de novas classes, inspeção de objetos e debugger.

Vahldick (2008) relata suas impressões sobre a utilização do software dizendo que os alunos apresentaram códigos de maior qualidade do que em semestres anteriores, quando o Greenfoot não foi utilizado.

Vahldick (2008) relata uma experiência de utilização do Greenfoot onde relata que não houveram melhorias estatisticamente significativas nas notas dos alunos em comparação com turmas anteriores que não utilizaram o software.

JavaTool Facilita a aprendizagem de programação utilizando um subconjunto dos recursos da linguagem Java. Não aborda conceitos de programação orientada a objetos com o objetivo de facilitar o aprendizado para os alunos iniciantes.

A linguagem utilizada no JavaTool é bastante simplificada, eliminando grande parte das complexidades sintáticas. Segundo os autores do software esta simplicidade tem um caráter pedagógico e é focada no ensino de

programação introdutória.

Mesmo com a simplificação sintática mencionada pelos autores os alunos ainda precisam aprender alguma sintaxe da linguagem Java. Os autores não apresentam resultados sobre o impacto da utilização da ferramenta com alunos.

Scratch Facilita a criação de estórias interativas, animações, jogos, música e arte digital.

Os alunos constroem pequenos trechos de programas encaixando blocos gráficos que representam as estruturas de programação.

O Scratch permite que o aluno programe comportamentos para personagens que movem-se pela tela.

Os blocos encaixam-se apenas da maneira sintaticamente correta. Não existe, por

exemplo, a possibilidade de um aluno encaixar um laço de repetição na área da condição de um desvio condicional. Esta abordagem elimina por completo os erros sintáticos e permite que o aluno iniciante mantenha-se focado na solução do problema.

A ausência dos tipos nas variáveis pode prejudicar a transição para linguagens fortemente tipadas como Java e C++.

O aluno programa sem preocupar-se com detalhes de nível mais baixo. A transição para uma linguagem de programação “real” (uma que realmente seja utilizada para construir aplicações) pode ser frustante, já que muitas das

programas por alunos iniciantes.

Cristóvão (2008) e também Malan e Leitner (2007) descrevem uma série de impressões positivas sobre a utilização do software com alunos de programação introdutória.

Escracho (linguagem utilizada nesta pesquisa)

Permite a construção de pequenos programas utilizando a idéia de arrastar e encaixar partes componentes.

Corrigir automaticamente os programas construídos pelos alunos, desde que os programas façam parte de um conjunto de exercícios com respostas pré-definidas.

A idéia de programar arrastando e encaixando componentes elimina os erros sintáticos mais corriqueiros e facilita a programação para alunos iniciantes.

O mecanismo de correção automática permite que os alunos testem se suas soluções geram os resultados esperados e se as estruturas de programação adequadas foram utilizadas.

Alguns alunos utilizaram o mecanismo de correção automática para obter dicas daquilo que precisaria ser programado antes mesmo de pensar sobre as estruturas de programação mais adequadas para o problema.

As facilidades da linguagem de programação não-textual podem deixar os alunos frustrados na transição para linguagens baseadas em texto como C++ ou Java, onde tais facilidades não existem.

Quadro 6. Características dos softwares de apoio a aprendizagem de programação