Ambiente para Assistência à Aprendizagem de
Programação Baseado em Padrões Pedagógicos
Carlos Henrique J. S. Oliveira1, Renan R. Greghi1 e Edson P. Pimentel1
1
Universidade Municipal de São Caetano do Sul (USCS)
Av. Goiás, 3400 – 09550-051 – São Caetano do Sul - SP
[email protected], [email protected],
[email protected]
Abstract. Difficulties in learning programming can be diagnosed by the high
degree of disapproval of students in introductory courses. This reflects also in
advanced disciplines that require this pre-requisite. Some studies show
that expert programmers create patterns to solve problems and when they face
a new problem recall this solution making it easier. Novice programmers do
not have this programming library in their minds. This work aims to present
the prototype of a tool to to assist the student in learning programming based
on from pedagogical patterns.
Keywords: Learning Programming, Pedagogical Patterns.
Resumo. As dificuldades no aprendizado de programação podem ser
diagnosticadas pelo alto grau de reprovação dos estudantes em disciplinas
introdutórias. Isto se reflete também em disciplinas avançadas que exigem
este pré-requisito. Alguns estudos apontam evidências de que programadores
experientes criam padrões de soluções de problemas e depois os relacionam a
um novo problema, tornando a resolução do mesmo mais fácil. Os aprendizes
iniciantes em programação não possuem essa biblioteca de programação em
suas mentes. Este trabalho tem por objetivo apresentar o protótipo de uma
ferramenta para dar assistência ao estudante na aprendizagem de
programação baseada em padrões pedagógicos.
Palavras-Chave: Aprendizagem de Programação, Padrões Pedagógicos.
1. Introdução
As problemáticas e dificuldades pertinentes ao aprendizado de programação,
principalmente nas disciplinas introdutórias dos cursos de Computação e Informática,
constituem um desafio para os docentes. As dificuldades encontradas podem ser
diagnosticadas não somente pelo alto grau de repetência, mas também pelos problemas
demonstrados pelos estudantes em disciplinas avançadas que exigem o pré-requisito de
programação [Rocha, 1991; Gomes e Mendes, 2000]. Outro dado que pode ser
observado é que diversos alunos que são reprovados em disciplinas introdutórias de
programação tendem a reprovar uma segunda vez, repetindo o insucesso em disciplinas
avançadas.
Aprender a programar constitui uma tarefa complexa que inclui, entre outras
coisas, adquirir habilidade para resolução de problemas, aprender a sintaxe e a semântica
de uma linguagem de programação, utilizar um ambiente de programação e realizar
testes e depuração de programas [Weber, 1996]. Cada uma destas atividades envolve
certo grau de dificuldade. É preciso, portanto, identificar exatamente em quais delas
existem “lacunas” que impedem ou dificultam o aprendizado dos discentes.
Da mesma forma, as atividades de aprendizado através da realização de
exercícios devem levar isto em conta, ou seja, subdividir e classificar os diversos tipos de
problemas e guiar o aprendiz na sua realização. Muitas vezes, o aprendiz não resolve um
problema de programação porque não consegue identificar os componentes necessários
para a sua solução, ou seja, o aprendiz consegue resolver partes isoladamente porém não
obtém sucesso quando necessita conectar estas partes para resolver um problema mais
complexo.
Nos estudos de Johnson e Soloway (1984) são apontadas evidências de que
programadores experientes armazenam e recuperam experiências passadas, ou seja, eles
criam padrões de soluções de problemas, e depois os relacionam a um novo problema
adaptando-os à situação atual, tornando a resolução do mesmo mais fácil. No entanto os
aprendizes que não têm nenhuma experiência real de programação em mente, não
possuem essa “biblioteca”, portanto só podem recorrer a sentenças da linguagem que
aprenderam. Baseado nessas observações fica evidente que a utilização de um modelo
que consista em padrões para instrução em programação traz benefícios, pois o processo
de reconhecimento de padrões compara experiências passadas com a situação atual de
resolução de problemas.
Este trabalho tem por objetivo apresentar o protótipo de uma ferramenta para
assistência ao aluno na resolução de exercícios de lógica de programação com base em
padrões pedagógicos. A ferramenta desenvolvida atua como assistente do estudante,
guiando-o na resolução dos exercícios, em caso de necessidade. Ressalta-se que a
decisão de requisitar ajuda é do estudante e que esta ajuda baseia-se no uso de templates
(modelos) para resolução dos exercícios.
O artigo está organizado como segue: a seção 2 descreve o cenário do Ensino de
Progrmação. Na seção 3 os conceitos e aplicações dos padrões pedagógicos são
relacionados. A seção 4 apresenta detalhes da ferramenta proposta nesse trabalho.
implementação e funcionamento. Por fim, na seção 4 são apresentadas as considerações
finais e a proposição de trabalhos futuros.
2. Ensino de Programação
O ensino das linguagens de programação de computadores tem por objetivo capacitar os
alunos a desenvolver programas e sistemas computadorizados que objetivam a resolução
de problemas. Entretanto aprender a programar não é fácil e isto se reflete nos baixos
níveis de assimilação experimentados por muitos alunos nos cursos de programação
introdutórios [du Boulay, 1986].
Os problemas enfrentados pelos alunos no aprendizado de programação têm
preocupado os educadores da área. Na prática, muitos alunos ainda acham que o
processo de aprendizagem de programação é difícil [Garner, 2000]. Mendes [2001] cita
algumas causas destas dificuldades, entre as quais se destacam:
Elevado nível de abstração envolvido;
Metodologias tradicionais de ensino, que privilegiam a aprendizagem de
conceitos dinâmicos utilizando principalmente abordagens e materiais de natureza
estática;
Existência de turmas com backgrounds diversificados acerca das matérias em
questão, traduzindo-se em ritmos de aprendizagem muito diferenciados;
Impossibilidade de um acompanhamento individualizado do aluno, etc.
Estes fatores podem levar o estudante de programação, principalmente em
disciplinas introdutórias a sentir a necessidade de um acompanhamento e orientação que
o professor nem sempre disponibiliza e que os métodos de ensino tradicionais nem
sempre dão resposta. Entre os principais motivos que podem levar o aluno a ter
dificuldade e precisar de ajuda, destacam-se: erros de sintaxe e semântica, dificuldades na
compreensão do enunciado dos problemas e na concepção de algoritmos, incapacidade
de detectar erros de lógica de programação e falta de pré-requisitos sobre matérias em
questão e de técnicas de programação eficazes [Gomes e Mendes, 2000].
Ferramentas como, por exemplo, C-Tutor [Song et al., 1997] e SICAS [Gomes e
Mendes, 2000] foram desenvolvidas com o propósito de facilitar o aprendizado de lógica
e linguagens de programação. Segundo Barros e Delgado (2006), tas ferramentas devem
permitir ao estudante adquirir melhor, e mais rapidamente, as habilidades necessárias
para programação. As ferramentas podem ser classificadas em: (a) ambientes integrados
de programação; (b) editores avançados de programas; (c) compiladores e (d)
depuradores automáticos.
3. Padrões Pedagógicos de Programação
Padrões são projetados para capturar a melhor prática num domínio especifico. Padrões
pedagógicos tentam capturar o conhecimento do especialista na prática do ensinoaprendizagem. A intenção é capturar a essência da prática numa forma compacta que
possa facilmente ser comunicada àqueles que necessitam do conhecimento [BERGIN,
2005).
Diversas experiências em “padrões pedagógicos” têm sido realizadas nos mais
diversos domínios de conhecimento. Mais recentemente, a área de Padrões Pedagógicos
tem documentado os chamados padrões elementares (elementary patterns) para ensinar
programação orientada a objetos e outros paradigmas de linguagens, tais como
programação procedimental e funcional. Esses padrões buscam capturar o conhecimento
de programação fundamentado sobre padrões mais avançados que correspondem ao tipo
de conhecimento que programadores especialistas têm e usam de forma subconsciente
[Wallingford, 2002].
Segundo Delgado (2004) esses padrões são uma forma de resolver problemas
comuns em formatos que facilite a sua reutilização. Para isso o enfoque é mostrar aos
aprendizes partes pequenas dos programas, ou seja, dividir os problemas em partes
menores ao invés de esperar que sejam escritos os programas a partir de um fonte vazio.
Johnson e Soloway (1984) propuseram o tutor PROUST desenvolvido com base
na teoria da psicologia do processo de programação. O sistema PROUST decompõe
objetivos de problemas de forma hierárquica através dos planos, conforme figura 1.
Figura 1: Decomposição de objetivos - adaptado de Johnson e Soloway (1984)
Os padrões pedagógicos estão de acordo com o paradigma construtivista de
aprendizagem. O construtivismo é uma abordagem pedagógica que estimula o aluno a
aprender (Bédard, 1998). Esta se baseia numa ação em que o professor ajuda na
resolução do problema através de tutoriais ou templates, ou seja, induz o aluno a
“aprender a aprender” através da busca orientada do conhecimento que o aluno
necessita. É uma oportunidade que o aluno pode desenvolver a sua indução na solução
de problemas mais complexos.
A figura 2 mostra um exemplo de padrão pedagógico do domínio de
programação. O “comando while” pode ser usado em muitas soluções de problemas que
envolvem repetição com uma condição de parada simples ou composta (sentinela).
Figura 2 – Exemplo de Padrão Pedagógico (Repetição com sentinela)
Na mesma concepção proposta nesse trabalho, ou seja, o uso de padrões, Barros
e Delgado (2006) apresentam o PROPAT, um Ambiente Integrado de Desenvolvimento
(IDE) para cursos de Introdução à Programação que contém duas perspectivas: a do
aluno (figura 3) em que o mesmo pode escolher exercícios e programar livremente ou
por meio da seleção e inserção de padrões, e a perspectiva do professor usada para que
este especifique novos exercícios e padrões
Figura 3 – Ambiente de Programação PROPAT - Barros e Delgado (2006)
4. Ferramenta para Assistência baseada em Padrões
A ferramenta SELP – Sistema para o Ensino de Lógica de Programação, descrita a
seguir, é composta de diversos módulos, dentre os quais se destacam: o módulo de
cadastro de templates , o módulo de cadastro de enunciado e o módulo de resolução que
possui as opções “passo a passo” e livre.
Figura 4 – Tela de Cadastro de Templates
4.1. Módulo de Cadastro de Template
Neste módulo cadastra-se a estrutura básica dos componentes que poderão ser utilizados
na resolução de um problema de programação. A figura 4 apresenta um exemplo disso:
Por exemplo, o primeiro template denominado de “Declaração de Variáveis” possui a
seguinte estrutura: [nome] [tipo]. Os termos entre colchetes devem ser substituídos de
acordo com a solução necessária.
4.2. Módulo de Cadastro de Enunciado
Neste módulo o professor deve cadastrar o enunciado que irá propor a sua respectiva
turma, conforme Figura 5.. É obrigatório o cadastramento de uma solução para o
enunciado mesmo que está esteja em branco. O enunciado deverá ser relacionado ao
código de um Template e este deve ser previamente cadastrado.
Figura 5 – Tela de Cadastro de Enunciado
4.3. Módulo de Resolução
No ato da resolução, de acordo com a configuração do exercício realizada pelo
professor, o estudante poderá escolher realizar a solução guiada, com o uso dos
templates, ou a solução livre.
Figura 6 – Tela de Resolução Guiada (passo a passo)
Na resolução passo a passo será exibido ao aluno o padrão de solução cadastrado
pelo professor. Além disso, o estudante pode ainda solicitar ajuda através de exemplos
ao clicar no botão “Help”. A figura 6 apresenta a tela de solução guiada.
Ao optar pela solução em modo livre o estudante construirá a solução a partir de
uma tela vazia, conforme esquema da figura 7. Ainda assim o estudante poderá consultar
os exemplos quando sentir necessidade.
Figura 7 – Tela de Resolução Livre
4.4 Testes Preliminares
Alguns testes preliminares foram efetuados para verificar a eficácia da ferramenta. Nesse
cenário de simulação uma professor efetuou a criação de exercícios na ferramenta com o
uso de templates e dois estudantes realizaram testes de resolução. O feedback coletado
nesses testes foram mais relativos à interface do que propriamente aos efeitos de
aprendizagem.
Outros testes já estão sendo programados tanto com estudantes novatos em
programação e também com estudantes que possuem dependência em disciplinas
introdutórias de programação.
6. Considerações Finais e Trabalhos Futuros
O Ensino de Programação carece de recursos didáticos variados que sejam adequados
aos estudantes que demonstram dificuldades. Mesmo com a existência de diversas
ferramentas para apoiar esta área, os insucessos dos estudantes continuam sendo
contabilizados.
Esse artigo apresentou o protótipo de uma ferramenta para assistência ao aluno
na resolução de exercícios de lógica de programação com base em padrões pedagógicos.
A ferramenta desenvolvida atua como assistente do estudante, guiando-o na resolução
dos exercícios, em caso de necessidade. Ressalta-se que a decisão de requisitar ajuda é
do estudante e que esta ajuda baseia-se no uso de templates (modelos) para resolução
dos exercícios.
Os seguintes aprofundamentos são necessários: registro estruturado do percurso
do estudante na resolução do exercício através de logs e readequação do cadastramento
dos templates para fins de reuso dos mesmos. Além disso, faz-se necessário a realização
de estudos de casos reais envolvendo aprendizes de programação e a análise profunda
desses dados para mensurar a eficácia da ferramenta.
Referências
Bédard, Roger. Construtivismo e Formação a Distância. In: Tecnologia Educacional
(Rev) N 140, Pag 03-09, ABT, Rio de Janeiro, 1998
Bergin, Joseph et al. The Pedagogical Patterns Project.
http://www.pedagogicalpatterns.org/. Acesso em 27 out. 2005.
Disponível
em:
du Boulay, J. B. H. (1986) Some Difficulties of learning to program. In: Journal of
Educational Computing Research, 2(1):57-73.
Barros, L. N. ; Delgado, K. V. . Aprendizado de Programação. In: WEI l XIV
Workshop sobre Educação em Computação, 2006, Campo Grande, MS. Anais do XXVI
Congresso da SBC, 2006. p. 31-40.
Delgado, K. V. (2005). Diagnostico Baseado em Modelos num Sistema Tutor
Inteligente para Programação com Padrões Pedagógicos. Dissertação de Mestrado, IME
- USP.
Fricke, A e Völter, M. A Pedagogical Pattern Language about teaching seminars
effectively, July 2000.
Giraffa L. M. M. Seleção e adoção de Estratégias de Ensino em Sistemas Tutores
Inteligentes. Porto Alegre: CPGCC/UFRGS, 1997.
Gomes, A. e Mendes, A. Suporte à aprendizagem da programação com o ambiente
SICAS. Actas do V Congresso Ibero-Americano de Informática Educativa, Viña del
Mar, 2000.
Gonçalves, Ana Angélica M. R.. Formação de professores mediada por tecnologia, p.
62-81, 2003.
Johnson, W. L. e Soloway, E. Proust: Knowledge-based program understanding. In In
Proceedings of the 7th international conference on Software engineering, Florida,
United States, pages 369 – 380, 1984.
Leite, A. de Sá. Um Modelo de Sistema Educativo Cognitivista Baseado em Tutoria
Inteligente Adaptativa Via Aderência Conceitual. Tese de Doutorado. São José dos
Campos: Instituto Tecnológico da Aeronáutica. 1999.
Mendes, A. J. N. (2001) Software Educativo para Apoio à Aprendizagem de
Programação. http://www.c5.cl/ieinvestiga/actas/tise01/pags/charlas/index.htm.
Rocha, Helena. V. Representações Computacionais Auxiliares ao Entendimento de
Conceitos de Programação. Unicamp. 1991.
Song, J. S., Hahn, S. H., Tak, K. Y. e Kim, J. H. (1997) An Intelligent Tutoring System
for Introductory C Language Course. Computers Education. Vol 28 No. 2.
Tobar, C. M. et al. (2001). Uma Arquitetura de Ambiente Colaborativo para o
Aprendizado de Programação. XII Simpósio Brasileiro de Informática na Educação,
Vitória - ES.
Wallingford, E. (2001). The elementary patterns home page. Disponível em:
http://www.cs.uni.edu/~wallingf/patterns/elementary/. Acesso em 15/09/2008.
Weber, G.; Brusilovsky, M.S.; Steinle, F. (1996). ELM-ART: An Intelligent Learning
Environment for Programming. Lecture Notes in Computer Science
Wenger, E. Artificial intelligence and tutoring systems: computational and cognitive
approaches to the communication of knowledge. Morgan Kaufmann Publishers Inc,
1987.
Baixar

Ambiente para Assistência à Aprendizagem de Programação