• No results found

Uma das estratégias frequentemente adotadas para amenizar ou solucionar as dificuldades inerentes da prática da EUP na qual o usuário final precisa programar é a criação de ambientes interativos de desenvolvimento que auxiliem esse usuário na programação de suas extensões. Esses ambientes interativos de desenvolvimento são ferramentas que têm por objetivo dar assistência ao usuário final em atividades do desenvolvimento de programas, como a construção de código, a verificação de erros ou mesmo o entendimento do problema.

Muitas vezes o usuário final, que não possui conhecimento em programação, pode se deparar com a necessidade de criar extensões utilizando linguagens textuais convencionais, tais como C++, Lua, Java, dentre outras. Entretanto, o aprendizado de programação é uma prática complexa, principalmente quando lidamos com os diferentes níveis de conhecimento em computação. A própria natureza da programação torna esse processo de aprendizado complicado: programar é difícil, e não existe uma bala de prata (Brooks, 1975).

Aprender a programar pode se tornar uma tarefa muito difícil para usuários finais iniciantes, de todas as idades. Além dos desafios de aprender a formar soluções estruturadas para problemas e entender como os programas são executados, iniciantes em programação também precisam aprender sintaxes rígidas e comandos rígidos que podem ter nomes aparentemente arbitrários ou talvez confusos. Encarar todos esses desafios simultaneamente pode ser desgastante e muitas vezes desanimador para o programador iniciante (Kelleher e Pausch, 2003).

3.1 Requisitos da EUP

Diversas técnicas podem ser aplicadas para amenizar o impacto da programação para usuários finais iniciantes. Dentre elas, desenvolver

ferramentas que auxiliem o processo de desenvolvimento sem prejudicar o desempenho do usuário (gastando muito tempo ou esforço). Nesse sentido, várias ferramentas se propõem a auxiliar o usuário final, que não possui ou possui conhecimento limitado em programação, a realizar suas tarefas de uma forma menos “dolorosa”.

Para tanto, essas ferramentas devem ser desenvolvidas pensando-se em evitar certos conflitos (Conway, 1997), como por exemplo:

 Uso de semântica não intuitiva;

 Utilização de abstrações fracas (ocultar detalhes de implementação para reduzir o fardo cognitivo do programador);

 Fraca distinção de atividades (separar o que deve ser feito por artistas do que deve ser feito pelo programador);

 Fraca escolha de padrões (o comportamento padrão do programa deve auxiliar o programador que não está familiarizado com a API da ferramenta); dentre outros.

Existem diversas linguagens de programação, como Smalltalk (Goldberg e Robson, 1989) e Logo (Papert, 1980), voltadas especificamente para o ensino de programação a esse tipo de usuário iniciante. A aplicação dessas linguagens comprovou que os usuários obtinham bons resultados de programação (Conway, 1997), se eles estivessem suficientemente motivados e as ferramentas fossem suficientemente avançadas, com uma linguagem cuidadosamente desenvolvida que modelasse, através de abstrações fortes, um domínio específico.

Essa programação por usuários iniciantes, ou leigos, ainda de acordo com Conway, pode ser auxiliada por três fatores:

1- Motivação: Usuários podem aceitar escrever programas se eles

perceberem que precisam fazê-lo, frequentemente dirigidos pela demanda de necessidades relacionadas à tarefa, ou se eles se sentirem motivados a fazê-lo.

Os conceitos de programação (nesse contexto) só devem ser explorados quando há necessidade (motivação) para tal. Por exemplo: enquanto não é necessário que o usuário utilize uma repetição não existe motivação suficiente para que ele aprenda a noção de loops; enquanto ele não precisar desenvolver scripts que necessitem de tomada de decisão, não será efetivamente necessário ensinar o conceitos do Se .. Então.

2- Ferramentas que deem o suporte adequado: As pessoas se concentram

melhor na tarefa da aplicação se elas possuírem um poderoso ambiente que ajude a amenizar gradualmente a tarefa de programação.

3- Exploração segura: Um ambiente de programação que encoraje

exploração e perguntar “e se” é uma poderosa ajuda em fazer com que não-programadores se comportem mais como programadores. Para isso, uma opção de Undo (desfazer) é crucial em permitir ao usuário perguntar “e se” de forma segura.

Já segundo (Kelleher e Pausch, 2003), e não muito diferente, a programação pode se tornar mais acessível a esses usuários finais em três caminhos:

1- Simplificando os mecanismos de programação. 2- Fornecendo suporte ao aprendizado.

3- Fornecendo motivação para programar.

Ainda de acordo com (Kelleher e Pausch, 2003), essas ferramentas ou ambientes interativos voltados para a programação por usuários iniciantes podem ainda ser divididas em dois grupos: o de sistemas que tentam ensinar programação por si só e o de sistemas que tentam dar suporte ao uso de programação em auxílio a outro objetivo, como comumente visto em soluções de EUP.

Além disso, devem auxiliar o processo de programação em dois focos: o da quebra de barreiras mecânicas e o da quebra de barreiras sociológicas. No que diz respeito às barreiras mecânicas, esses novos sistemas buscam:

remover sintaxe desnecessária, desenvolver linguagens mais parecidas com a linguagem natural, introduzir conceitos de programação em contextos visíveis (como a programação de ou em jogos) ou explorar alternativas para a escrita do código. Deste modo, permitindo que os usuários se concentrem na parte lógica e nas estruturas envolvidas ao invés de se preocupar com a mecânica da escrita de programas.

No que diz respeito às barreiras sociológicas, os sistemas podem abordar dois pontos: o da falta de contexto social (na ausência de um suporte para interação social) e o da falta de um contexto apelativo (falta de razões, motivação para o usuário programar). Uma solução aplicável seria fornecer contextos motivacionais ao usuário, como a própria imersão na criação de jogos (construção de robôs para batalha, percorrer labirintos através de comandos, etc.) ou na criação de animações e histórias. No geral, o desenvolvimento dessas ferramentas tem sido realizado com o intuito de encorajar iniciantes a manterem atitudes positivas sobre a computação (Meerbaum-Salant, 2010).

Ainda nesse contexto, Ko et al. (2004) reafirmam que uma das principais e mais significantes barreiras abordadas por essas ferramentas é a sintaxe utilizada para a resolução do problema, devido principalmente às dificuldades que os usuários encontram em entender e memorizar as complexas regras de codificação e a própria gramática das linguagens (Ko et al., 2004). Muitas dessas ferramentas buscam facilitar a construção de programas (codificação) seja reduzindo a sobrecarga de memorização da linguagem utilizada, seja evitando erros de sintaxe ou mesmo fornecendo mecanismos que permitam ao usuário manipular elementos gramaticais ao invés de memorizá-los.

Em muitos casos, outro dos objetivos primários dessas ferramentas é minimizar a barreira resultante das dificuldades de compreensão do domínio ao qual o sistema está sendo aplicado e como representá-lo em forma de código (Ko et al., 2004). Muitas vezes, uma das soluções encontradas é associar a ferramenta com tutoriais, agentes, ou mesmo cursos de

aprendizado que facilitem o entendimento do problema tratado pelo usuário ou que minimizem a sobrecarga de navegação (utilização) do sistema.

Segundo (Ryder et al., 2005), de uma forma geral, muitas dessas ferramentas adotam ainda o formato de ambientes visuais de desenvolvimento, utilizando de programação visual para minimizar tanto problemas de construção de código quanto representação (e entendimento) de problemas.

A Programação Visual diz respeito a qualquer sistema que permite que os programas sejam especificados em duas (ou mais) expressões dimensionais, tais como diagramas, ícones, color coding, anotações multi- dimensionais e/ou mesmo ações gráficas (Burnett e McIntyre, 1995). Em geral, o propósito da Programação Visual é reduzir o fardo cognitivo dos programadores humanos, através de mecanismos que reduzam o esforço mental necessário para acessar ou tomar senso das informações disponíveis (Ryder et al., 2005). Com o advento da programação por usuário final, as pesquisas em Programação Visual foram ao longo do tempo combinadas com as pesquisas em expressões visuais, técnicas de aprendizado de máquina, pesquisas emergentes em IHC e Engenharia de Software para usuário final (Burnett et al., 2003), com o intuito de desenvolver novas metodologias de engenharia de software para auxiliar esses usuários no desenvolvimento de suas aplicações além do estágio de codificação.

3.2 Ferramentas de Auxílio à Programação por Usuário Final

Das ferramentas mais citadas na literatura, dentre aquelas voltadas especificamente para o aprendizado de programação por usuários iniciantes, podemos destacar o Alice (Alice, 2009) e o Scratch (Scratch, 2009).

Alice é um ambiente de programação 3D para o desenvolvimento de animações (histórias animadas ou jogos interativos). O Alice foi desenvolvido unicamente como ferramenta de ensino, o propósito é fazer com que os

usuários se sintam mais motivados a aprender conceitos fundamentais de programação utilizando como contexto a criação de histórias animadas e jogos simples. No Alice, objetos 3D habitam um ambiente virtual e o papel do usuário é criar programas, em forma de scripts, para animar esses objetos.

O Scratch, assim como o Alice, é um ambiente de desenvolvimento para a linguagem de programação educacional homônima, desenvolvida com o propósito de auxiliar no aprendizado de conceitos matemáticos, lógicos e de computação, idealmente para pessoas que ainda estão começando a programar. No entanto, diferente do Alice, o Scratch é voltado para a criação de imagens, animações e ambientes interativos em 2D.

As linguagens do Scratch e Alice são mais acessíveis que a maioria das outras linguagens por se utilizarem de artífices gráficos que são mais atrativos por buscar usar uma representação visual para os conceitos abstratos de programação. O Scratch, por exemplo, utiliza uma interface gráfica que permite que programas sejam montados como blocos - lembrando o brinquedo LEGO. Cada bloco da linguagem representa um comando em separado. Esses comandos podem ser então agrupados livremente - caso se encaixem - ou modificados através de menus.

Tanto o Alice quanto o Scratch tem sido utilizados por universidades em cursos e disciplinas introdutórias de computação. O uso do Alice foi comprovado como forma de melhorar a atitude de estudantes em relação a computação (Moskal et al., 2004) e de aumentar a motivação e a disposição de estudantes a passarem mais tempos envolvidos com o computador (Kelleher et al., 2007).

Já quanto ao Scratch, foi comprovado que ele auxilia estudantes a entenderem programação oferecendo uma perspectiva diferente dos ambientes tradicionais (Wolz et al., 2008), deixando os estudantes inexperientes mais animados e familiarizados com fundamentos básicos de programação (Malan e Leitner, 2007), e ainda, demonstrando que - após

aprenderem inicialmente Scratch - a transição dos estudantes para Java ou C aparenta ser mais fácil (Wolz et al., 2009).

Além dessas duas ferramentas, podemos encontrar também na literatura referências ao Greenfoot (Greenfoot, 2004; Utting et al., 2010). O GreenFoot é a combinação entre um framework para criação de animações bi-dimensionais (2D) com um ambiente de desenvolvimento integrado (que dá suporte a toda a linguagem Java) voltado principalmente para usuários iniciantes em programação. O aplicativo tem como foco o desenvolvimento de exercícios de programação com elementos visuais, onde os elementos de programação são representados através da visualização e interação de objetos.

Ainda podemos destacar outras quatro ferramentas que se propõem a ensinar programação e conceitos de lógica computacional a usuários finais sem experiência, são elas: o Processing, o Squeak, o StencylWorks e o Phrogram.

O Processing (Processing, 2003) também é um ambiente de programação para a linguagem homônima voltada para a criação de imagens, animações e interações, 2D e 3D. Inicialmente o Processing foi desenvolvido para servir como um sketchbook e ensinar fundamentos de programação dentro de um contexto visual, porém o aplicativo acabou evoluindo para uma ferramenta para desenvolvimento de sistemas complexos. Hoje em dia, o aplicativo é utilizado por estudantes, artistas, designers e pesquisadores para tanto aprender, quanto prototipar e produzir imagens e animações mais elaboradas.

O Squeak Etoys (Squeak, 2001) é uma ferramenta para o ensino de resolução criativa de problemas, mais especificamente para o ensino de pensamento lógico e de programação para jovens e crianças, através do desenvolvimento de conjuntos de scripts para animações. O Etoys, em contraposto ao Scratch e ao Alice, que são limitadas quanto ao domínio, é uma ferramenta de um propósito mais geral. O aplicativo permite a criação de sistemas ligeiramente mais complexos através da junção de objetos e

scripts visuais, permitindo modelar sistemas de coordenadas, criar animações hierárquicas ou conectar objetos para a formação de diagramas baseados em script.

O StencylWorks (Stencyl, 2010) é um ambiente de programação para a criação de jogos 2D. O aplicativo é composto por um conjunto de toolkits intuitivos que são integrados em um só sistema. O foco principal é a criação de jogos flash e a colaboração e compartilhamento de componentes (blocos). O sistema de blocos do StencylWork é como uma extensão do sistema de

block-snapping do Scratch, onde o usuário utiliza uma interface interativa

drag and drop para conectar blocos pré-existentes até finalizar seu projeto. No StencylWorks, os blocos podem ser pré-montados ou desenvolvidos pelo próprio usuário.

Por fim, o Phrogram (Phrogram, 2006) é um ambiente de desenvolvimento para a linguagem homônima que introduz aos usuários como escrever, testar e depurar código. O objetivo do Phrogram é ensinar e introduzir programação a usuários não-programadores. A proposta do Phrogram, em oposto a de outros aplicativos como o Scratch e o Alice, é permitir que o usuário construa programas maiores, e de propósito geral, utilizando uma linguagem de programação textual, porém com comandos mais simples de usar e entender.

Temos ainda a EUPAT for WoW (Barbosa e Leite, 2010), ambiente visual de desenvolvimento criada durante este trabalho com o intuito de auxiliar a criação de extensões (Add-ons) para o jogo World of Warcraft. Através da EUPAT for WoW o usuário pode construir scripts em Lua de forma interativa, esses scripts alteram a interface e o comportamento do jogo para melhorar aspectos diversos da usabilidade e jogabilidade do usuário. Aspectos de implementação e usabilidade da EUPAT for WoW serão descritos em detalhes no Capítulo 4, a seguir.

3.3 Comparativo

Podemos fazer um comparativo dessas ferramentas listando algumas atividades de engenharia de software (Ko e Myers, 2003; Ko et al., 2010) e algumas características de programação as quais elas dão suporte (Ko et al., 2005; Antunes, 2006; Utting et al., 2010). Neste caso, optamos por relacionar as seguintes atividades e características: Construção de Programas (código), Teste e Detecção de Erro, Depuração, Entendimento do problema, Programação Visual e Reuso.

A Tabela 1 descreve o conjunto de soluções (técnicas) que podem ser aplicadas nessas ferramentas de auxílio à programação para satisfazer os critérios selecionados.

Tabela 1. Listagem de técnicas aplicadas a critérios.

Critérios Técnicas

Construção de Programas (código) • Reduzir a sobrecarga de memória; • Evitar erros de sintaxe;

• Fornecer mecanismos que permitam ao usuário manipular elementos gramaticais ao invés de memorizá-los. Teste e Detecção de Erro • Oráculos (informam se determinado

comportamento ou saída está correta ou não);

• Mecanismo de testes (julgando a corretude do programa baseada na corretude dos resultados);

• Visualizações (visualizar o

comportamento do programa, de tal forma que o programador usuário final possa aplicar seu conhecimento sobre qual o comportamento correto do programa).

Depuração • Checagem de acordo com

especificação (os dados computados pelo programa são conferidos com uma especificação);

• Checagem de consistência (o sistema define heurísticas de corretude internas

ao programa). Entendimento do problema • Tutoriais;

• Agentes (Tutores Inteligentes); • Mecanismos que facilitem o

entendimento ou o uso do sistema. Programação Visual • Utilizar programação por expressões

visuais no sistema além (ou em

sobreposto) da programação textual. Reuso • Permitir reuso de aspecto privado;

• Permitir reuso de aspecto público (comunitário).

Na Tabela 2, iremos relacionar as ferramentas de auxílio à programação selecionadas com os respectivos critérios listados anteriormente. Para tanto, foi verificado se a ferramenta satisfazia uma ou mais das técnicas descritas na Tabela 1.

Tabela 2. Relação Ferramentas x Critérios

No caso da ferramenta Alice, existem trabalhos (Ko et al., 2005)( Ko et al., 2010) que mostram o uso do Whyline (Ko e Myers, 2004) para a

depuração dentro dos programas desenvolvidos dentro do aplicativo. Porém, nas versões disponíveis e na versão utilizada neste trabalho (Alice 2.2), o

Whyline não estava acessível.

A partir da Tabela 2, podemos inferir algumas conclusões:

1. A maioria (75%) das ferramentas selecionadas possuía mecanismos que facilitavam a Construção de Programas (Código).

2. A maioria (87,5%) das ferramentas selecionadas possuía mecanismos para Teste e Detecção de Erros.

3. Apenas uma pequena parte (25%, desconsiderando a ferramenta Alice) das ferramentas selecionadas possuía mecanismos para Depuração.

4. A maioria (75%) das ferramentas selecionadas possuía mecanismos que facilitavam o Entendimento do Problema.

5. A maioria (75%) das ferramentas selecionadas foram desenvolvidas levando em conta o paradigma da Programação Visual.

6. Todas as ferramentas (100%) apresentavam mecanismos ou de reuso privado, ou de reuso público, ou ambos.

A partir desses dados, podemos concluir que a maioria das ferramentas facilitam a Construção de Programas (Código) e o Entendimento do Problema, permitem o Teste e Detecção de Erro em tempo de desenvolvimento e estimulam o Reuso de código e componentes, e utilizam da Programação Visual para reduzir o fardo cognitivo dos usuários.

3.4 Conclusão

As ferramentas relacionadas neste capítulo estão diretamente ligadas ao problema de EUP específico que tratamos no trabalho, consideramos que a grande parte dos usuários jogadores de World of Warcraft que desejam realizar extensões para o programa esbarram tanto em dificuldades inerentes da falta de conhecimento em programação (para aqueles usuários

iniciantes, não-programadores) quanto em dificuldades na prática da produção de software.

Em relação as ferramentas listadas, a EUPAT for WoW apresenta as mesmas características, com exceção de ser a única a não possuir embutido na ferramenta um sistema para realização de testes e de detecção de erros, além de não permitir depuração de código (aspecto encontrado, no entanto, apenas na Processing e na Phrogram). Por não possuir tal sistema de teste, a ferramenta força o usuário a terceirizar o processo, tendo que verificar o funcionamento do seu Add-on em tempo real, dentro do jogo World of

Warcraft.

A EUPAT for WoW é uma ferramenta de programação visual que utiliza dos conceitos apresentados na literatura para auxiliar usuários finais na construção de extensões em Lua. A ferramenta busca dar suporte adequado à produção de software por usuários finais que possuam um problema específico de programação, reduzindo seu fardo cognitivo e simplificando os mecanismos utilizados.

A EUPAT for WoW busca auxiliar os usuários finais em três vertentes: 1- Prevenção de erros de sintaxe (de programação);

2- Na construção semântica (abstraindo construções de código); 3- Na área social (fornecendo um contexto motivacional).

A existência de uma ferramenta com as características da EUPAT for

WoW, que auxilie a produção de Add-ons para World of Warcraft, é

importante em vários âmbitos:

1- Reduzindo a enorme barreira que os usuários jogadores sem conhecimento na linguagem de programação encontram ao tentar produzir suas próprias extensões;

2- Disponibilizando um ambiente interativo, que permite ao usuário ter mais contato com a linguagem de programação Lua;

3- Fornecendo um contexto motivacional, estimulando o usuário final a se engajar em atividades computacionais.

O uso de ferramentas que simplificam e auxiliam a criação de programas, seja reduzindo o fardo cognitivo do uso da linguagem quanto estimulando o usuário a programar, é crucial não só para o ensino de programação como para a própria EUP de uma forma geral.