Padrões de dificuldades relacionadas com o aprendizado de programação - Bosse, Yorah (2020)
Aprender a programar é uma tarefa árdua. Muitos erros são cometidos durante o desenvolvimento de código e aprender com esses erros pode ajudar a evitá-los. Apesar da quantidade considerável de pesquisas sobre esse tema, os professores têm pouco suporte para entender as dificuldades dos alunos. Perante esse cenário, o principal objetivo desta tese é identificar padrões de dificuldades enfrentadas pelos alunos durante o aprendizado de programação. Para realização da pesquisa, trabalhamos com dados de estudantes e professores de disciplinas de introdução à programação de cursos de graduação da USP. A pesquisa foi elaborada em três fases: primeiramente, analisamos dados para avaliar as taxas de insucesso do ensino introdutório de programação na universidade; em seguida, verificamos com alunos, através de diários de estudos, e professores, através de entrevistas semiestruturadas, o que eles entendem como sendo os problemas no ensino e aprendizagem de programação; e, por último, buscamos nos códigos de exercícios desenvolvidos por alunos durante seus cursos evidências sobre as dificuldades encontradas. Com essa última fase, catalogamos os resultados e os validamos através de um questionário com professores brasileiros com experiência no ensino desse conteúdo. Os dados coletados foram examinados utilizando-se de análise quanti e qualitativa. A análise de ~19.500 matrículas, nos possibilitou verificar que ~30% dos alunos matriculados em disciplinas de introdução à programação, no período analisado, não foram aprovados, ou seja, ~1.100 alunos por ano. Possibilitou ainda que fossem criadas listas das dificuldades citadas nos diários e entrevistas. Essas listas foram organizadas por conteúdo e por linguagem de programação (C e Python). Além disso, percebemos nesses dados ligações entre os conteúdos e, com isso, criamos um conjunto de conexões entre tópicos, mostrando a existência de pré-requisitos entre eles. Depois, analisando a evolução no desenvolvimento dos códigos dos estudantes, tivemos a oportunidade de identificar 139 tipos de equívocos cometidos utilizando-se as linguagens C e Python. Os equívocos que eram recorrentes foram considerados antipadrões (soluções comuns, porém com consequências negativas) e agrupados em catálogos. No total, foram criados 3 catálogos: um com antipadrões encontrados nos códigos desenvolvidos em C (21 equívocos), outro em Python (11 equívocos) e o último com a intersecção dos dois, totalizando 9 antipadrões encontrados tanto em C como em Python. Os antipadrões e os catálogos foram avaliados através de uma pesquisa de questionário respondida por 43 professores. Em geral, os professores conheciam os antipadrões apresentados. Além do mais, eles consideraram os catálogos fáceis para usar (~76%) e úteis (~81%); 53% mostraram ter intenção de usá-los regularmente nas suas aulas. Esperamos que os materiais gerados nesta tese possam ajudar professores no planejamento de suas aulas e pesquisadores a desenvolverem novas ferramentas e darem novos passos rumo ao aprimoramento do ensino e aprendizagem de programação.