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]