Uma Abordagem Sistematizada
para Aprendizagem de
Programação em Grupo
Autora: Thais Castro
Orientador: Prof. Hugo Fuks
Contexto
As aulas de Introdução à Computação na UFAM se baseiam no modelo tradicional...
Seguidas de práticas de laboratório...
Os professores queriam que fossem como abaixo
em algum outro lugar...
Contexto – Prática Adotada
O Problema
• A dificuldade em saber quando intervir.
A Hipótese
As oportunidades de intervenção na
aprendizagem de programação em grupo são
ampliadas com o uso de uma abordagem
sistematizada de acompanhamento.
A Tese
A Tese – Elaboração do 1º. Eixo
Pressuposto Pedagógico
Animação
de códigos
Pair
programming
Programação em
Grupo
Ensino de
Programação
Times de
desenvolvimento
Epistemologia Genética (Piaget):
estudo dos mecanismos do aumento dos conhecimentos.
Solução de
problemas
Jogos
Programação em Grupo
Métodos Ágeis (pair programming)
Times de desenvolvimento
Ensino de Programação
Animação de Códigos / Algoritmos
Ensino de Programação
Solução de problemas
John Mason, baseado em Polya
Ensino de Programação
Jogos
A Tese – Elaboração do 1º. Eixo
Fases do desenvolvimento da cognição
Epistemologia
genética
Necessidade de interagir com os pares
A abstração precisa ser mais desenvolvida
Apoio de ferramentas computacionais
Ênfase nos processos de solução de problemas
Ensino de
programação
O processo de solução de problemas precisa ser explícito
Pressupõe-se que cada passo para a solução tem relação
com um estágio do raciocínio
As atividades precisam ser prazerosas
Programação
em grupo
Times de desenvolvimento para o contexto de aprendizagem
Algo como pair programming para direcionar os alunos
Evolução dos Códigos na
Aprendizagem de Programação
• Uso do AAEP e entrevistas seguindo o método
clínico piagetiano
– Elaboração de trabalhos práticos com registros
parciais da solução
– Análise de correlações estatísticas para identificar os
alunos que estavam acima ou abaixo do corte
• Na tese
– As modificações foram agrupadas de acordo com
nível de reflexão envolvido
– Desenvolvimento do AcKnow
Evolução dos Códigos na
Aprendizagem de Programação
• Tipos de Modificação
– Sintáticas: visam tornar o código interpretável,
processo que sugere correções em intervalos
menores
– Semânticas: afetam diretamente a avaliação da
função, resultando em uma saída diferente da
esperada
– Refactoring: refinamentos nas soluções visando
melhor legibilidade no código
Evolução dos Códigos na
Aprendizagem de Programação
O funcionamento do AcKnow
Evolução dos Códigos na
Aprendizagem de Programação
Histórico da Aluna Jane Doe
Versão
Intervalo
Categoria
1
0
Sintática
2
Mesmo minuto
Sintática
3
1 minuto
Sintática
4
1 minuto
Sintática
5
8 minutos
Refactoring
6
2 horas e 51 minutos
Semântica
7
44 horas
Refactoring
A Tese – Elaboração do 2º. Eixo
Ferramentas, LMS, etc.
Ambientes
CSCL
Tecnologias de
Apoio
Métodos de
Avaliação de
Ambientes
Linguagens de
representação
Sistemas
multiagente
Ambientes CSCL
O que é necessário para o contexto da programação?
Configuração e
adaptação
Estrutura
adicional de
acompanhamento
das interações
Uso de ferramentas de
coordenação para facilitar a
intervenção
Ferramentas para Apoiar a
Programação em Grupo
Apóiam as atividades relacionadas à aprendizagem de programação em grupo:
RAPTOR
Construção
de
algoritmos
Ferramentas para Apoiar a
Programação em Grupo
Apóiam as atividades relacionadas à aprendizagem de programação em grupo:
Scratch
Entendimento
de construção
de algortimos
Ferramentas para Apoiar a
Programação em Grupo
Apóiam as atividades relacionadas à aprendizagem de programação em grupo:
JeCo
Scratch
Visualização
de programas
Percepção
dos times
Ferramentas para Apoiar a
Programação em Grupo
Apóiam as atividades relacionadas à programação em grupo:
Jazz – foi incorporado ao Rational Team Concert
RECIPE – compartilhamento de códigos
Métodos para Avaliação de
Ambientes CSCL
Uso do Método
de Inspeção
Semiótica (MIS)
Sugestões de
Melhoramentos
na Interface
Contexto de
Aprendizagem
de Programação
MIS no ColabWeb
O ColabWeb possui várias camadas de interface, de acordo com o perfil.
Características
•Os grupos utilizam seus próprios recursos, como
chat e fórum
•Visualização da turma e dos grupos em espaços
diferentes
•Programas são desenvolvidos externamente
•Os grupos seguem um esquema para resolução de
exercícios
Problemas encontrados
Sugestões
Não há dicas de
como configurar
o curso
Linguagens de Representação de
Interações (Sistemas Multiagente)
Acompanhamento das interações é difícil: os logs tornam-se muito extensos quanto
mais participativo é o grupo
Linguagens de Representação de
Interações (Sistemas Multiagente)
Acompanhamento das interações é difícil: os logs tornam-se muito extensos quanto
mais participativo é o grupo
A Tese – Elaboração do 2º. Eixo
Podem ser utilizados ambientes de propósito geral,
desde que sejam configurados para o contexto
Ambientes
CSCL
Algumas ferramentas específicas para visualização de
código e ambientes de desenvolvimento devem ser
incorporadas
Recursos como chat e fórum podem ser configurados
para atender a especificidades dos exercícios
Ambientes multiagente podem ser integrados aos
ambientes CSCL para auxiliarem na identificação de
características de interação
Tecnologias de
Apoio
Métodos de inspeção ou avaliação de elementos de
interface devem ser aplicados periodicamente
Apesar de alguns problemas de navegabilidade, um
curso de programação se configurado no ColabWeb
conforme IC-Ccomputacao tem uma estrutura e
interface aceitáveis para o propósito
A Tese – Elaboração do 3º. Eixo
Método de Colaboração
• Precisa usar algum método?
• Como os alunos colaboram em programação?
– Estudo de Caso Exploratório
– Um exercício no final da disciplina. Como requisito
necessário, as soluções foram acompanhadas pelos
registros das interações nos grupos
– Questionário de avaliação
Estudo de Caso Exploratório
(2007.1)
Achados:
• É necessário se trabalhar em grupo e há uma
demanda por compromisso, esforço e acordo
dos participantes.
• Os grupos apresentaram dificuldades relativas à
codificação em linguagem Haskell
possivelmente em decorrência da falta de
critérios para a interação nos grupos
• Os grupos acharam a atividade prazerosa,
embora difícil de coordenar o grupo
Um Esquema Progressivo para
Aprendizagem de Programação em
Grupo
Workflow do Esquema Progressivo
Estudo de Caso Descritivo (2008.1)
• Investigar como os grupos utilizam o esquema
progressivo de aprendizagem de programação
em grupo
–
–
–
–
Reutilização de códigos
Qualidade das interações
Estilos individuais de programação
Intervenção do professor
• Como identificar oportunidades de intervenção
nos grupos?
Padrões de Interação
Cada turno de conversa tem uma intenção que pode gerar
uma continuidade
Atos de fala estendidos
Padrões de interação em ambientes CSCL
Identificação de Padrões de
Interação
StVi
Aê pessoal!!! já fiz a minha e
esclarecer
achei bem simples:
aux_menores x xs = [ y | y <- xs
disponibilizar
, y < x ]
indice_menor
[0..length
xs
=
[i
xs-1],
|
i
<-
aux_menores
(xs!!i) xs == []]
Mas
apesar
simples,
olhado
de
queria
no
xs
que
final
"indice_menor
(xs!!i)
ter
==
xs"
da
(
[]),
achado
dessem
função
uma
do
aux_menores
porque
onde tive mais dificuldade.
foi
perguntar
Identificação de Padrões de
Interação
StFla
Bem
a
achei
está
minha
até
ficou bem
estranho,
completa
questão
já
simples.
aproveitar
a
mas
que
O
pequena,
que
questão
axo
esclarecer
q
era
uma
fiz
foi
2
que
explicar
mostra o índice menor, e usa-la
para mostrar o médico com menos
pacientes. Segue abaixo:
medicos_menos_pacientes = disp!!
disponibilizar
indice_menor
Indice_menor foi a questão usada
na 2ª, já que ela pode ser usada
para mostar também o médico com
menos
pacientes.
pode estar errado!
Vejam
aew
qq
explicar
Identificação de Padrões de
Interação
StJa
Eu achei que o problema é sequêncial...
sugerir
Cada uma das funções exigidas tem a sua
resolução
anterior
facilitada
a
ela,
já
se
que
usada
uma
a
aparente
interdepender da outra... Acredito que
a
melhor
solução
do
problema
seria
fazer ordenadamente cada função para ir
aproveitando-as
criando funções
aos
auxiliares
poucos,
quando
necessário.
StLu
Eu também acho que é um problema em que
cada
resposta
segue
a
lógica
de
sua
anterior, deveriamos então fazê-las em
ordem para tornar o problema mais fácil
e "entendível".
re-sugerir
Identificação de Padrões de
Interação
Categoria
Exemplo
Disponibilizar artefato
“Minha funções…”
Informar
“Pessoal, o problema não é tão difícil…”
Esclarecer
“Eu não pude logar antes.”
Confirmar
“Eu já anotei isso…”
Perguntar
Sugerir
Chamar atenção
Identificar erro
Explicar
“Alguém mais quer incluir alguma coisa no
relatório?”
“…todos deveriam tentar criar uma solução pra cada
questão do seu próprio jeito…”
“Ei, Galera! Vamos fazer o exercício!”
“Eu acho que vc cometeu um erro quando definiu o
tipo int como saída...”
“…o que eu fiz foi usar a 2ª. Questão que…”
Uso dos Padrões de Interação na
Caracterização das Interações
Grupo 2
StDi
StHu
StDi
StHu
StDi
StKa
StJofi
StDi
StDi
StDi
StJofi
StKa
sugerir
/
disponibilizar
esclarecer /
explicar
re-explicarStHu
/
disponibilizar
/
explicar
esclarecer /
disponibilizar
sugerir
esclarecer /
disponibilizar
informar
informar
explicar
/
disponibilizar
perguntar
informar
confirmar
Alternância de “explicar”,
“esclarecer”, “sugerir”,
“disponibilizar”
Interação produtiva
Uso dos Padrões de Interação na
Caracterização das Interações
Grupo 1
StAf
disponibilizar
StAl
disponibilizar
StAf
disponibilizar
StAl
esclarecer
StAl
disponibilizar
StAt
confirmar
StAt
disponibilizar
StAt
disponibilizar
StAt
disponibilizar
Sequências de
“disponibilizar” com pouca
alternância de outros
padrões de interação
Interação não produtiva
Representação dos Padrões de
Interação
Representação Formal dos Padrões
de Interação
1 a(clarifier,C) ::=
2
a(broadcaster(X,L,Er),B) <-- new_clarification(X,L).
3 a(broadcaster(X,L,Er),B) ::=
4
(information(X) => a(reader,R) <-- L=[R|Rs] then
5
Er=[E|Es] <-- evaluation(X,E) <= a(reader,R) then
6
a(broadcaster(X,Rs,Es),B)) or
7
null <-- L=[] and E=[].
8 a(reader,R) ::=
9
information(X) <= a(broadcaster(X,_,_),B) then
10
(evaluation(X,E) => a(broadcaster(X,_,_),B) <-- agree(X,E) or
11
evaluation(X,E) => a(broadcaster(X,_,_),B) <-- do_query(X,E)).
Identificação de Estereótipos
Estereótipos = pistas para intervenção
Interações
produtivas
Estereótipos
positivos
Interações
não
produtivas
Estereótipos
negativos
Identificação de Estereótipos
Estereótipos emergem sempre que:
Um padrão de interação aparece repetitivamente
Somente um ou dois membros do grupo se
mantêm trabalhando, mesmo que usem
diferentes padrões de interação
A combinação de padrões de interação reforçam
estereótipos negativos
Estudo de Caso Explanatório
(2009.1)
• Replicação das configurações do estudo de
caso anterior para avaliar a relevância dos
padrões de interação e estereótipos a uma nova
turma de programação introdutória
• Identificação de um novo estereótipo: ausência
de interações
• Confirmação dos estereótipos e representação
dos padrões de interação
Conclusão
• Três estudos de caso e uma inspeção semiótica no
ambiente CSCL utilizado nesta tese comprovam a
hipótese
– Oportunidades de intervenção na aprendizagem de programação
em grupo são ampliadas com o uso de uma abordagem
sistematizada de acompanhamento
• Os padrões de interação encontrados provaram-se
aplicáveis na aprendizagem de programação devido à
ação na resolução de problemas, o que também evidencia
potencial aplicação em outras áreas
• Estereótipos são importantes para orientar as ações e
estratégias dos professores devendo também incorporar
novas instâncias quando adequadamente identificados
Contribuições
1. Uma série de estudos de caso
2. A definição de categorias da evolução de código dos alunos e o
desenvolvimento do AcKnow
3. A aplicação da Engenharia Semiótica a um software com vários níveis de
comunicabilidade
4. Um esquema progressivo para aprendizagem de programação em grupo
5. A definição de um conjunto de padrões de interação e estereótipos e sua
formalização para futura integração sistemas multiagentes
Trabalhos Futuros
• Integrar a abordagem ao Open Knowledge
• Aplicar diferentes combinações dos elementos a
times de desenvolvimento de software
• Investigar a integração de outras ferramentas
nos diversos estágios da abordagem
• Aplicar a abordagem a outros domínios, que
envolvam a necessidade de abstração, com
ênfase na solução de problemas
• Aplicar a abordagem no mesmo domínio com
outro paradigma não imperativo
Publicações
CASTRO, T., FUKS, H., CASTRO, A. & SPÓSITO, M. Integração de Ferramentas para
Acompanhamento da Aprendizagem de Programação. Anais do XVIII Simpósio Brasileiro
de Informática na Educação – SBIE 2007 / Workshop - Ambientes de apoio à aprendizagem
de algoritmos e programação, ISBN 978-85-7669-159-4, São Paulo, SP, 2007.
[1]
CASTRO, T., FUKS, H., SPÓSITO, M. & CASTRO, A. The Analysis of a Case Study for
Group Programming Learning. ICALT - Proc. Of the 8th IEEE International Conference on
Advanced Learning Technologies, July 1-5, 2008, Santander, Spain.
[1]
CASTRO, T., FUKS, H. & CASTRO, A. Detecting Code Evolution in Programming
Learning. In Proceedings of the 19th Brazilian Symposium on Artificial Intelligence,
Salvador, Brazil, October 26-30, 2008, Salvador, Brazil. Series: Lecture Notes in Computer
Science , Vol. 5249. Sublibrary: Lecture Notes in Artificial Intelligence. ISBN: 978-3-54088189-6, pp.145-156.
[2]
Publicações
CASTRO, T., FUKS, H. & CASTRO, A. Programming in Groups: a Progression Learning
Scheme from the Individual to the Group. FIE - Proc. of the 38th Annual Frontiers in
Education Conference, October 22-25, 2008, Saratoga Springs, New York, USA. IEEE
Catalog Number: CFP08FIE-CDR. ISBN: 978-1-4244-1970-8. Library of Congress: 79640810. ISSN: 0190-5848. Pp F1F15-F1F20.
[4]
CASTRO, T., FUKS, H. & CASTRO, A. Aprendendo a Programar em Grupo. Anais do V
Simpósio Brasileiro de Sistemas Colaborativos - SBSC 2008. 27 a 29 Outubro 2008, Vila
Velha, ES. ISBN: 978-0-7695-3500-5/08, Ed. IEEE-CS, pp. 45-54.
[4]
CASTRO, T., FUKS, H., SANTOS, L. & CASTRO, A. Fleshing out Clues on Group
Programming Learning. ICEIS 2009, 11th International Conference on Enterprise
Information Systems, Milan, May 2009. ISBN: 978-989-8111-85-2.
[5]
Publicações
CASTRO, T. & FUKS, H. Inspeção Semiótica do ColabWeb: Proposta de Adaptações para
o Contexto de Aprendizagem de Programação . Revista Brasileira de Informática na
Educação. Vol.17, N. 1. Pp 71-81. ISSN 1414-5685. 2009
[3]
CASTRO, T., FUKS, H., SPÓSITO, M. & CASTRO, A. Análise de um Estudo de Caso
para Aprendizagem de Programação em Grupo. IEEE-RITA: Revista Iberoamericana de
Tecnologia del Aprendizaje. ISSN: 1932-8540. V.4, N.2, pp. 155-160. 2009.
[1]
Download

Apresentação - Groupware@LES