Arquitetura SAAP: Sistema de Apoio à Aprendizagem de Programação

Documentos relacionados
Uma Arquitetura de Tutor Inteligente que Provê Suporte ao Diálogo com o Aluno Iniciante em Linguagem de Programação

DESCOMPLICANDO A PROGRAMAÇÃO EM LINGUAGEM C. UMA SOLUÇÃO PARA DEPURAÇÃO SIMPLES DE CÓDIGOS. GOMES, M. S. ¹, AMARAL, E. M H. ¹

Uma ontologia para modelagem de conteúdo para Ensino a Distância. An ontology for modeling distance learning contents

Linguagens de Domínio Específico

Xadrez, do Real ao Virtual

UMA PROPOSTA DE FERRAMENTA PARA SIMPLIFICAR A DEPURAÇÃO DE CÓDIGOS EM C, POR ALUNOS INICIANTES

ATIVIDADES PRÁTICAS SUPERVISIONADAS

Paradigmas de Linguagens

Seiji Isotani CURRICULUM VITAE

3. Linguagem de Programação C

Utilizando Programação Funcional em Disciplinas Introdutórias de Computação

LOLGICA: UMA PLATAFORMA DE ENSINO VOLTADA PARA LÓGICA E LINGUAGENS DE PROGRAMAÇÃO

Revisão/Mapeamento Sistemático

Linguagens de Programação

A pesquisa no ensino de computação. Práticas de ensino de algoritmos (Hazzan, Cap. 4) Péricles Miranda

Programação I Apresentação

132 6 Conclusão 6.1. Contribuições da Tese

Desenvolvimento de Ferramentas no igeom: Utilizando a Geometria Dinâmica no Ensino

TREINAMENTO PARA COMPETIÇÕES DE PROGRAMAÇÃO: Estudo de caso nas turmas do técnico em informática integrado do Câmpus Muzambinho RESUMO

2 Fluxos no Ciclo de Vida do Processo Unificado. O Processo Unificado consiste da repetição de uma série de ciclos durante a vida de um sistema.

Implementando o Agente de Base de Domínio do Sistema Tutor Inteligente PAT2Math

COMPUTADORES NA EDUCAÇÃO MÉDICA

Pontifícia Universidade Católica de São Paulo Programa de TIDD

Uso de Lógica Fuzzy no Auxílio ao Acompanhamento Automático de Alunos utilizando um Ambiente de Aprendizagem

Análise e projeto de sistemas

Introdução à Programação

INFORMÁTICA APLICADA AULA 02 ALGORITMOS

APRENDENDO PROGRAMAÇÃO COM BATALHAS DE ROBÔS. Instituto Federal Catarinense, Blumenau/SC

ANÁLISE E IMPLANTAÇÃO DE FERRAMENTAS PARA CORREÇÃO AUTOMATIZADA DE ALGORITMOS RESUMO

Processos de software

Análise de Sistemas. Aula 5

Universidade Federal do Espírito Santo - CT - DI Trabalho Computacional - PD II - Engenharia de Computação Profa. Claudia Boeres

Introdução aos Algoritmos

Paradigma Simbólico. Sistemas de Informação UNISUL Aran Bey Tcholakian Morales, Dr. Eng. (Apostila 2)

AMBIENTE DIDÁTICO GRÁFICO PARA A COMPREENSÃO DE LÓGICA DE PROGRAMAÇÃO. Rodrigo Ferreira da Silva

- Engenharia Reversa - Evolução de Sofware. Desenvolvimento como. Requisitos o que. Sistema porque. Profa. Dra. Sandra Fabbri. operacional.

Universidade Federal da Paraíba CCEN Departamento de Informática Disciplina: Banco de Dados. Aula 1 Introdução a Banco de Dados

ATIVIDADES PRÁTICAS SUPERVISIONADAS

Nota Técnica da Sociedade Brasileira de Computação sobre a BNCC- EF e a BNCC- EM

Desenvolvimento de Aplicações Desktop

Algoritmos e Programação

O Ensino de Ciência da Computação. Práticas de ensino de algoritmos (Hazzan, Cap. 3 / EAD Cap. 2) Péricles Miranda

Introdução aos Algoritmos

Processos de Software by Pearson Education Ian Sommerville 2006 Engenharia de Software, 8ª. edição. Capítulo 4 Slide 1

Programação de Computadores

Sistemas Especialistas (SE)

Capítulo 5 Modelação do Sistema 1

PROJETO: CONFERÊNCIA ACADÊMICA. 2. Informações Básicas sobre o Sistema a ser Desenvolvido

Workshop de Ambientes de apoio à Aprendizagem de Algoritmos e Programação (SBIE 2007) Instituto de Ciências Matemáticas e de Computação ICMC-USP

Fundamentos de Programação 1

Paradigmas de Linguagem de Programação. Aspectos Básicos

Ciclo de vida: fases x atividades

Introdução à Programação Aula 03. Prof. Max Santana Rolemberg Farias Colegiado de Engenharia de Computação

Introdução INTRODUÇÃO AO SWEBOK. Origens do corpo de conhecimentos da Engenharia de Software: Introdução a Computação e Engenharia de Software

Introdução à Programação de Computadores Fabricação Mecânica

Universidade Federal do Espírito Santo - CT - DI Trabalho Computacional - PD II - Engenharia Elétrica Profa. Maria Cristina Rangel

Introdução aos computadores, à Internet e à World Wide Web. Prof. Marcelo Roberto Zorzan

Desenvolvimento de uma Linha de Produto de Software para Módulos de Aprendizagem Interativa

ORGANIZAÇÃO CURRICULAR TÉCNICO NA ÁREA DE INFORMÁTICA: HABILITAÇÃO TÉCNICO EM INFORMÁTICA NA MODALIDADE A DISTÂNCIA /1

Informática Aplicada à Engenharia Florestal INTRODUÇÃO

Apresentação do Capítulo 4 MDA (Model-Driven Archtecture) ALUNO: DOMENICO SCHETTINI FILHO NÚMERO USP:

5º Congresso de Pós-Graduação

Introdução a Computação

TÍTULO: TRATAMENTO NÃO FARMACOLÓGICO DE IDOSOS PORTADORES DE ALZHEIMER UTILIZANDO A FERRAMENTA EXPERT SINTA - IA

UMA PROPOSTA PARA O ESTUDO DOS PRODUTOS NOTÁVEIS NO ENSINO FUNDAMENTAL, 7ª SÉRIE (8º ANO) ASSOCIADOS AOS CÁLCULOS DE ÁREAS DE FIGURAS

Material Complementar de INF Engenharia Cognitiva

Introdução à Programação

ATIVIDADES PRÁTICAS SUPERVISIONADAS

LINGUAGEM E TECNICAS DE PROGRAMAÇÃO

Uma Linha de Produto de Software para Módulos de Aprendizagem Interativa

Conteúdo. Disciplina: INF Engenharia de Software. Monalessa Perini Barcellos

Projeto de Interface Homem- Máquina

MODELAGEM DE SISTEMAS. Introdução a Computação e Engenharia de Software. Profa. Cynthia Pinheiro

PLANEJAMENTO E AUTOMAÇÃO DE SOFTWARE PARA UTILIZAÇÃO NA DISCIPLINA DE CÁLCULO DIFERENCIAL E INTEGRAL

Tipos para uma Linguagem de Transformação

Prof. Esp. Fabiano Taguchi

1. INTRODUÇÃO Motivação

2

M Y C H E L L I N E S O U T O H E N R I Q U E P A T R Í C I A C. A. R. T E D E S C O

Introdução à Programação Aula 04. Prof. Max Santana Rolemberg Farias Colegiado de Engenharia de Computação

Algoritmos e Programação

OS HÁBITOS DE USO DAS TDIC POR ESTUDANTES UNIVERSITÁRIOS NO CONTEXTO EDUCACIONAL

Engenharia de Controle e Automação

Como as aplicações de entretenimento (em especial jogos digitais) têm enfrentado um constante crescimento, tanto em tamanho quanto em complexidade,

Sistemas de Computação e de Informação

Identificando as Expectativas de Alunos de Graduação sobre a Disciplina Introdutória de Engenharia de Software

Algoritmos e Programação

INFORMÁTICA NA EDUCAÇÃO. A Informática e a Era do Conhecimento INFORMÁTICA NA EDUCAÇÃO

4 Caso de Uso no Ambiente Oracle

Introdução à Computação: Máquinas Multiníveis

Universidade Estadual da Paraíba - UEPB Curso de Licenciatura em Computação

Compiladores. Introdução

Agentes Pedagógicos Emocionais em Sistemas Tutores Inteligentes. Patricia A. Jaques (PhD)

Design de IHC PoliFacets

Requisitos de Software e UML Básico. Janaína Horácio

UNIVERSIDADE FEDERAL DE PERNAMBUCO CENTRO DE INFORMÁTICA GRADUAÇÃO EM ENGENHARIA DA COMPUTAÇÃO

Perguntas da Aula 2. Respostas da Pergunta 2. Respostas da Pergunta 1. Respostas da Pergunta 4. Respostas da Pergunta 3. Processos de Software

Aula 1.7 Introdução a APOO e UML

Transcrição:

Arquitetura SAAP: Sistema de Apoio à Aprendizagem de Programação Thais Helena Chaves de Castro 1,2, Alberto Nogueira de Castro Júnior 2, Crediné Silva de Menezes 1, Davidson Cury 1 1 Mestrado em Informática Universidade Federal do Espírito Santo (UFES) Av. Fernando Ferrari, s/n CTVII 29.060-970 Vitória ES Brazil 2 Departamento de Ciência da Computação Universidade Federal do Amazonas (UA) Av. Rodrigo Otávio Jordão Ramos, 3000 69.077-000 Manaus AM - Brazil {thaish,credine,dede}@inf.ufes.br, albertoc@dcc.fua.br Abstract. This work proposes an environment to support programming learning using the multiagent paradigm. The main focus is in the interaction with the students and in the semiautomatic identification of solution patterns, in order to facilitate learning, giving appropriate feedback. Three virtual agents act as assistants in the teaching-learning process constructing student profiles, giving orientation about the submmited solutions and redirecting new solution instances to other participants. Resumo. Este trabalho propõe um ambiente de suporte à aprendizagem de programação utilizando o paradigma multiagente. O enfoque principal é na interação com os estudantes e na identificação semi-automática de grupos ou padrões de soluções, visando facilitar o aprendizado, fornecendo o feedback adequado. Três agentes virtuais atuam como intermediários no processo ensino-aprendizagem de programação, construindo perfis de estudantes, fornecendo orientações acerca das soluções submetidas e direcionando novas instâncias de soluções a outros atores. Palavras-chave. aprendizagem de programação, ambientes de aprendizagem, aprendizagem cooperativa. 1. Introdução Devido a suas particularidades, o aprendizado de programação tem se tornado desafiador em muitos cursos de graduação e muito se tem feito para estimular os estudantes a focalizarem e manterem o interesse. Com esse intuito foram realizadas várias tentativas utilizando diferentes paradigmas e pedagogias, o que tem resultado no desenvolvimento de ferramentas para apoio a diversos tipos de cursos de programação ou de linguagens específicas. A necessidade contínua de estudos para ajudar a determinar métodos efetivos de ensino e aprendizagem em programação tem sido ressaltada por estudos como [McKEOWN e FARRELL 1999], que relata uma queda acentuada no número de profissionais adequadamente qualificados em programação, num panorama sem previsão de mudanças no futuro próximo. Naquele estudo é argumentado que os

métodos e recursos educacionais usados hoje nos cursos de introdução à programação freqüentemente desencorajam novos estudantes. Considerando que a aquisição das habilidades necessárias para programação é difícil e demorada, faz-se necessária a participação em experiências não frustrantes com programação para que os estudantes possam desenvolver autoconfiança e construir habilidades. Neste artigo, apresentamos alguns elementos relevantes ao processo ensinoaprendizagem de programação (Seção 2), seguido de um levantamento de algumas ferramentas para apoio a tal processo, apresentando relatos de seus experimentos de utilização (Seção 3). Em seguida, apresentamos o contexto no qual o ambiente aqui proposto está inserido: uma abordagem que utiliza uma linguagem funcional e a resolução de problemas geométricos por estudantes sem nenhuma experiência anterior (Seção 4). Como contribuição para suprir a carência de ferramentas adequadas aos nossos propósitos, sugerimos, na Seção 5, uma arquitetura baseada em agentes para apoiar os estudantes na resolução de problemas de programação, através da interação com agentes reais e virtuais. Espera-se com isso proporcionar ao estudante um feedback adequado e mais rápido. 2. Elementos do Ensino-Aprendizagem de Programação A aprendizagem de conceitos e métodos para a construção de programas de computador não é trivial, pois requer o uso de habilidades de alto nível e boas doses de raciocínio abstrato. Em [DIJKSTRA 1982] é ressaltado que programar, mais que qualquer outra atividade, envolve a habilidade de raciocinar. Mas programar é também uma tarefa de engenharia, uma vez que trata da produção de artefatos que devem satisfazer requisitos de qualidade e serem passíveis de verificação. Falamos então sobre uma atividade desafiadora, que deve ser voltada para o envolvimento do estudante com a solução de problemas [GRUPO GAIA 2001]. Contudo, em [McKEOWN e FARRELL 1999] é ressaltado que nos cursos introdutórios raramente os estudantes aprendem técnicas de solução de problemas. Na maioria desses cursos os estudantes encontram uma dificuldade muito grande em aplicar suas habilidades prévias. Tal dificuldade acaba se constituindo em uma fonte de medo e frustração, o que incentiva a evasão. Dois problemas se destacam. Por um lado, pouca ênfase é dada às habilidades para entender e solucionar problemas nesses cursos. Por outro, o estudante ainda tem de transformar cada solução num conjunto de comandos executável por computador. Essa transformação é possivelmente a principal dificuldade de todo iniciante em programação. Em primeiro lugar, estudantes tendem a pensar na máquina de modo antropomórfico, isto é, dotando-a de qualidades humanas, assumindo que ela poderia entender comandos incompletos ou errôneos. A necessidade de descrever comandos com rigorosa precisão, torna-se assim uma característica muito artificial e até mesmo antipática para o estudante. São comuns também dificuldades encontradas durante a elaboração de um programa, como: quanto ao entendimento do significado de um comando enquanto componente de uma solução; a sintaxe do comando numa certa linguagem de programação; e o resultado da execução daquele comando pela máquina. Além de ter de encontrar comandos para a solução de um problema, o estudante deverá ordená-los

corretamente para criar um programa e, finalmente, verificar e ajustar o funcionamento deste. 3. Ferramentas para Apoio a Cursos de Programação As dificuldades encontradas na formação de novos programadores, como as ilustradas na Seção 2, têm motivado um grande esforço de pesquisa na criação de ambientes que auxiliem estudantes iniciantes e intermediários. Muito dessa pesquisa dedica-se ao entendimento de um programa, através de ferramentas que realizam verificação léxica, sintática, semântica, de lógica de programação e pragmática. Como proposto por [DEEK 1999] as metodologias desenvolvidas são incorporadas em ferramentas que se enquadram em uma das quatro categorias: ambientes de programação, como é o caso de Online Judge [KURNIA, LIM e CHEANG 2001]; depuradores; sistemas tutores inteligentes, como é o caso do E-TCL [EL- KHOULY e KOONO 2000]; e ambientes inteligentes de programação, como é o caso do ALPUS [UENO 1996] e do DISCOVER [RAMADHAN e du BOULAY, 1995]. O foco varia de uma ferramenta para outra. No caso do DISCOVER [RAMADHAN e du BOULAY 1995], a ênfase é em estudantes com pouca ou nenhuma experiência em programação. O ambiente possui duas fases: a fase livre, em que o estudante escreve sua solução sem se preocupar muito em acertar; e a fase guiada, em que um tutor mostra os conceitos relacionados a cada comando da linguagem, monitorando a solução e mostrando a resolução de um problema semelhante. Uma outra ferramenta interessante é o E-TCL [EL-KHOULY e KOONO 2000], que apresenta três agentes inteligentes (um para o estudante - PAA-S, outro para o professor - PAA-T e o agente tutor - TA) para monitorar o aprendizado do estudante no esquema de tutoramento. O ambiente se propõe a ensinar qualquer linguagem de programação desde que um especialista (professor) inclua, através de uma interface, os comandos e as explicações referentes à linguagem. Os mesmos conceitos podem ser aproveitados para outras linguagens de programação. O estudante apresenta uma solução sobre a qual é feita uma verificação léxica. Além disso, o PAA-S identificando sua necessidade, disponibiliza o acesso a um quadro com respostas de outros estudantes. O ALPUS [UENO 1996], um módulo do INTELLITUTOR [UENO e NAKAJIMA 1993], é uma ferramenta mais abrangente capaz de estabelecer perfis de conhecimento para cada estudante do sistema e inferir certas habilidades. Aquela ferramenta tem como público alvo estudantes intermediários de graduação em Ciência da Computação. A cada estudante, o ALPUS relaciona um perfil baseado em seu diagrama inicial do problema a ser resolvido e em um dos quatro níveis de conhecimento em que se encontra. Baseado nisso, o ambiente é capaz de inferir algumas intenções do estudante, quando sua resposta diverge muito do modelo do especialista. Numa outra linha de ferramentas, há o Online Judge [KURNIA, LIM e CHEANG 2001]. Neste, há uma lista de problemas propostos para os quais o estudante pode submeter soluções para as quais a correção é verificada através de testes, pontuando as soluções corretas segundo critérios pré-definidos. Um aspecto interessante a destacar é a geração automática de dados para teste, através de scripts em C e Perl. Como descrito em [KURNIA, LIM e CHEANG 2001], uma vantagem do Online Judge

em relação às demais ferramentas é que se o estudante escrever uma solução diferente, não prevista anteriormente, ela será considerada da mesma forma que as demais, uma vez que o ambiente não se baseia em uma solução ideal para analisar as respostas, mas simplesmente nas condições de entrada e saída de dados. A dificuldade em qualificar essas ferramentas é devido à falta de relatos de experimentos realizados. Quando há relatos de experimentos, como é o caso do DISCOVER, os dados obtidos não são suficientes para analisar o desempenho por não terem sido conduzidos em uma variedade mais adequada e para um número maior de estudantes. 4. Aprendizagem de Programação Uma Abordagem Funcional Dentre os muitos argumentos enumerados em [GRUPO GAIA 2001] para a utilização da programação funcional num curso de introdução à programação, destacamos: (i) o paradigma funcional é baseado em conhecimento já familiar ao estudante desde o ensino médio (funções e mapeamentos entre domínios); (ii) permite concentrar a atenção na elaboração de soluções e nas descrições formais delas; (iii) o foco da atenção está em o que fazer, ao invés de como fazer ; (iv) por dispensar conhecimento dos detalhes de um computador específico, possibilita um número maior de experimentações e aumento da produtividade. No nosso caso, o público alvo são estudantes iniciantes em programação, cursando o primeiro semestre de cursos de graduação em Computação. Ao se matricularem na primeira disciplina de programação, os estudantes, em sua maioria, nunca tiveram contato com nenhuma linguagem ou sequer com conceitos associados à programação. Como esses estudantes têm um conhecimento prévio em geometria, optamos pela utilização de problemas geométricos desde o início do curso, a fim de facilitar o entendimento do modelo computacional. A linguagem adotada é Haskell [HUDAK, JONES e WADLER 1992], uma linguagem funcional pura e não restrita. Ao direcionarmos nossa classe de problemas ao domínio da geometria, reduzimos os possíveis erros de interpretação dos enunciados. Dessa forma, os erros se concentrarão em usos inadequados do modelo computacional. Isso facilita a associação de um enunciado com as possíveis soluções, corretas e incorretas. Além disso, temos observado que o uso de figuras geométricas apropriadas facilita ao estudante a identificação de abstrações significativas, em virtude de estas serem de natureza visual. 4.1. Exemplo de Exercício Ao longo do curso de programação funcional, disponibilizamos aos estudantes listas de exercícios, com o intuito de mantê-los em contato com os tópicos estudados. Tomemos por exemplo de exercício, com a estratégia de solução correspondente: Como podemos concluir por uma inspeção da Figura 1, não existe uma fórmula pronta para calcular sua área. Precisamos dividi-la em partes para as quais conheçamos uma maneira de calcular a área e que, além disso, conheçamos as dimensões necessárias.

a b c e d Figura 1. Um polígono irregular Podemos fazer várias tentativas, como, por exemplo, as ilustradas nas Figuras 2a, 2b e 2c para tentar descrever a área das figuras menores em cada uma delas. Em 2b e 2c, parece que precisaremos subdividir novamente. Em 2b a casinha em verde pode ser transformada em um retângulo e um triângulo. Em 2c é a casinha azul (meio telhado) que pode ser dividida em um retângulo e um triângulo. Figura 2a Figura 2b Figura 2c Figura 2d Vamos partir para a nossa solução a partir da Figura 2c. Podemos dizer que a área total pode ser obtida pela soma das áreas amarela, com área vermelha e mais a área azul. A área azul pode se subdividir em azul-claro e azul-escuro (Figura 2d). A estrutura da solução deste problema obtida pela modularização pode ser representada pelo diagrama da Figura 3. Área total Área amarela Área Área azul Área do retângulo Área do triângulo Área do triângulo Área do retângulo hipotenusa Figura 3. Árvore de Representação do Problema 5. Um Ambiente para Apoio à Aprendizagem de Programação De modo geral, ferramentas como as mostradas na Seção 3 não têm apresentado resultados significativamente relevantes para alunos com pouca ou nenhuma experiência

em programação. Parte do problema pode ser devido às dificuldades próprias do paradigma de programação adotado. Com o ambiente aqui apresentado pretende-se suprir as dificuldades encontradas na utilização das ferramentas mencionadas na Seção 3. O ambiente proposto baseia-se na tecnologia de agentes para auxiliar o professor na identificação dos equívocos cometidos pelos estudantes durante a construção de soluções para problemas propostos, contribuindo para a melhoria quantitativa e qualitativa do feedback. Os agentes detectam padrões de erros nas respostas e enfatizam a utilização do mínimo de recursos da linguagem, necessário para se chegar a uma solução correta. Isso é feito de acordo com o conteúdo das bases de conhecimento de padrões de problemas, de erros e de orientações para que o estudante consolide o conhecimento sobre o tópico corrente e esteja preparado para aprender outro. No cenário apresentado na seção anterior, os estudantes recebem uma lista de exercícios em sala de aula, com as devidas explicações. São assim incentivados a ler, refletir e internalizar as questões, elaborando formas para resolução, por programação, dos problemas propostos. Então, como uma próxima etapa, eles podem ir ao laboratório concentrar seus esforços na implementação em uma linguagem funcional. Nessa etapa, o estudante precisa de apoio sistemático para superar suas dificuldades. A arquitetura aqui apresentada se propõe a acompanhar essa etapa, através de agentes virtuais e reais encarregados de prover feedback em forma de orientações referentes às classes de problemas estudados, sendo capazes de identificar os principais erros na resolução desses problemas. Para identificar esses desvios, são fornecidos ao ambiente classes de problemas com seus respectivos esquemas de programa, nos moldes defendidos por Bieliková e Návrat (1998) e Gegg-Harrison (1996). 5.1. Arquitetura da Proposta A Figura 4 apresenta a arquitetura proposta. O ambiente é formado por três agentes virtuais: (i) Construtor de Perfil, (ii) Assistente de Orientação e (iii) Assistente de Aprendizagem; três agentes reais: (a) Estudante representação de um estudante regularmente matriculado em um curso de Introdução à Programação, (b) Professor representação de um professor de programação, não necessariamente do curso em que o estudante está matriculado, e (c) Colaborador representação de um monitor ou outro estudante que deseje colaborar com a identificação de padrões; e ferramentas e bases de conhecimento para facilitar a troca de informações entre os atores. Ao interagir com o ambiente, o estudante tem seu perfil constantemente atualizado pelo agente (i), é capaz de interagir com o agente (ii), recebendo feedback sobre o estado de seu programa e conta com o agente (iii) para direcionar possíveis erros que ainda não tenham sido identificados para um colaborador do ambiente e armazenar novas classificações de erros para serem armazenados na base de padrões de erros. As ferramentas que compõem o ambiente são independentes e possuem as seguintes funcionalidades: Testador utiliza testes para verificar se uma solução para determinado problema apresenta resultados consistentes com as diversas circunstâncias requeridas. Esses testes são descritos por scripts com conjuntos-padrão de dados de entrada.

Autoria de Perfil captura as informações preliminares sobre os estudantes matriculados em um curso, através de interação conduzida pelos próprios estudantes. Autoria de Orientação possui uma linguagem para o professor descrever classes de problemas, relacionando-os a níveis de orientações e de tratamento (feedback), de acordo com os erros mais comuns armazenados na base de padrões de erros, já armazenados previamente pelo ambiente. Essa ferramenta tem o objetivo de fornecer ao Assistente de Orientação o feedback adequado para cada nível de erro. Autoria de Esquema possui uma linguagem para representar esquemas de programa, de forma que o professor possa descrevê-los formalmente e relacioná-los a determinadas classes de problema. Conforme um estudo comparativo que realizamos, existem diversas formas de representar esquemas. A representação que utilizaremos nesta ferramenta será de uma meta programação, em linguagem Haskell. A Figura 4, ainda, mostra a interação nesse ambiente, onde os agentes reais são representados por humanóides e os virtuais por faces com olhos e boca. Ao participar do ambiente, o ESTUDANTE, constrói seu perfil inicial através da ferramenta de Autoria de Perfil. Para cada problema proposto, o estudante utiliza seu editor de programação funcional para criar sua solução e verifica a consistência da mesma através do Testador. Uma vez verificada, envia a solução ao ASSISTENTE DE ORIENTAÇÃO. Esse assistente, baseado no perfil do estudante e na base de padrões de erros envia uma orientação ao ESTUDANTE informando se o programa contém desvios do esquema de programa (erros) existentes na base de padrões de erros. Caso seja identificado um erro, o assistente fornecerá um feedback ao estudante, sugerindo que este último repense a solução, tentando encontrar um outro caminho. Assim que o ASSISTENTE DE ORIENTAÇÃO não detectar mais nenhum erro no programa do estudante, ele o redireciona à ferramenta Testador para que seja verificada a adequabilidade da solução. Se o assistente de orientação testar a solução e a mesma não funcionar como se esperava, redireciona-a para a base de erros não identificados. O ASSISTENTE DE APRENDIZAGEM acessa essa base e envia mensagem a um COLABORADOR do ambiente para que identifique o(s) erro(s) apresentado(s). Nesse ponto, é importante elaborar mais detalhadamente o que consideramos um erro. No contexto deste trabalho, erro é uma inadequação. Por exemplo, se em uma questão da lista de exercícios houver uma descrição de um problema determinando que o mesmo deve ser resolvido sem o uso de uma determinada estrutura, como IF-THEN- ELSE, por exemplo, e o estudante apresentar uma solução que a utilize, seu programa é considerado como contendo uma inadequação, uma vez que não atendeu completamente à especificação, apesar de funcionar corretamente. Para enviar orientações adequadas a cada classe de problema, o ASSISTENTE DE ORIENTAÇÃO conta com uma base de problemas e orientações, alimentada pelo PROFESSOR, através de uma ferramenta de AUTORIA DE ORIENTAÇÃO. Vale ressaltar que os problemas são previamente classificados pelo PROFESSOR e armazenados, juntamente com um esquema de programa para cada classe, na base de problemas e esquemas de programas, sendo, posteriormente, consultado pelo ASSISTENTE DE ORIENTAÇÃO.

AUTORIA DE PERFIL perfil padrões de erros Construtor de Perfil erros não identificados solução Estudante orientação Assistente de Orientação Assistente de Aprendizagem solução feedback problemas e orientações AUTORIA DE ORIENTAÇÃO TESTADOR problemas e esquemas de programas AUTORIA DE ESQUEMA Professor Figura 4. Uma Arquitetura de Apoio à Aprendizagem de Programação Colaborador A cada interação com o ASSISTENTE DE ORIENTAÇÃO, o programa (parcial ou final) enviado pelo ESTUDANTE, é capturado pelo CONSTRUTOR DE PERFIL para ser acrescido ao perfil previamente fornecido pelo próprio ESTUDANTE. Desta forma o perfil do ESTUDANTE é sempre modificado, baseando-se em seu estilo de programação, de modo que se possa fornecer um feedback mais preciso, por exemplo, indicando quando o estudante estiver modificando apenas uma variável em seu programa, sem fazer maiores reflexões sobre os resultados disso. 6. Considerações Finais O levantamento das técnicas correntes para desenvolvimento de ferramentas de apoio ao aprendizado de programação fundamentou nossa proposta de uma arquitetura que refletisse as necessidades do nosso público alvo. Com o desenvolvimento dessa arquitetura, pretendemos contribuir para o aprendizado de conceitos básicos de programação, através da identificação e utilização

dos padrões de erros cometidos na elaboração de soluções para problemas de programação. Os estudos comparativos das várias formas de representação de esquemas de programa nos levaram a acreditar ser mais adequada a representação de esquemas próximos à linguagem de programação sendo trabalhada [BIELIKOVÁ e NÁVRAT 1997] [GEGG-HARRISSON 1991], em nosso caso, conforme tratado na Seção 5, o Haskell. No momento, estamos iniciando a prototipagem desta arquitetura, com o desenvolvimento da ferramenta Autoria de Esquema, que deverá conter uma linguagem para a descrição de esquemas com uma análise estrutural de sentenças, no estilo da utilizada em [CHAVES e CASTRO Jr. 2000]. Como parte desta investigação, utilizamos respostas às listas de exercícios de programação de várias turmas das disciplinas Programação I para Ciência da Computação e Processamento de Dados I para Engenharia da Computação, de onde foi obtido nosso conjunto inicial de padrões de solução. Novos problemas, junto com seus padrões de resposta, estão sendo propostos e serão utilizados nas próximas turmas de estudantes iniciantes, de modo a verificar o processamento semi-automático. Referências Bieliková, M. e Návrat, P. (1998). Use of Schemata in Lisp Programming: na Evaluation of its Impact on Learning. In: Informatica Journal, Volume 9, Número 1, pp. 5-20. Bieliková, M. e Návrat, P. (1997). A Schema-Based Approach to Teaching Programming in Lisp and Prolog. In: Proceedings of PEG 97 International Conference, pp. 22-29. Chaves, T. e Castro Jr., A. (2000). Elementos de um Ambiente Multiagente com Intermediação para Suporte à Aprendizagem. In: XI Simpósio Brasileiro de Informática na Educação, Maceió. Deek, F. (1999). A Framework for and Automated Problem Solving and Program Development Environment. In: Transactions of the SDPS, Volume 3, Número 3, Setembro. Dijkstra, E. (1982). On the Teaching of Programming, i.e. on the Teaching of Thinking. In: Selected Writings on Computing: A Personal Perspective. Springer- Verlag NY. El-Khouly, M.; Far, B. e Koono, Z. (2000). Expert Tutoring System for Teaching Computer Programming Languages. In: Expert Systems with Applications, Volume 18, pp 27-32. Gegg-Harrison, T. (1991). Learning Prolog in a Schema-Based Environment. In: Instructional Science, Número 20, pp. 173-192. Grupo Gaia. (2002). Programação para Principiantes: Uma Abordagem Funcional. http://www.moonline.ufes.br/prog_func/intropf.html. Fevereiro.

Hudak, P.; Jones, S. e Wadler, P. (1992). Report on the Programming Language Haskell A Non-strict, Purely Functional Language. Versão 1.2. ACM SIGPLAN Notices, Volume 27, Número 5. Kurnia, A.; Lim, A. e Cheang, B. (2001). Online Judge. In: Computers & Education, Volume 36, pp 299-315. Mckeown, J. e Farrell, T. (1999). Why We Need to Develop Succcess in Introductory Programming Courses. In: CCSC Central Plains Conference, Maryville, MO. Ramadhan, H. e du Boulay, B. (1995). Programming Environments for Novices. In: Cognitive Models and Intelligent Environments for Learning Programming. Ueno, H. e Nakajima, A. (1993). INTELLITUTOR: Integrated Intelligent Programming Environment for Novices. In: Applications of Supercomputers in Engineering III. Elsvier Applied Science, pp 409-424. Ueno, H. (1996). Concepts and Methodologies for Knowledge-Based Program Understander ALPUS. In: Proceedings of PPPIG.