Ensino de algoritmos: simulação
Eu não consegui simular este código pois não entendi o que ele faz
Nos últimos tempos tenho ensinado diversos alunos que tem dificuldade em ler (pseudo) código e simular sua execução passo a passo. Como trabalho no 3^o semestre, acho um pouco surpreendente que tenham conseguido passar por todo o primeiro ano tendo essa dificuldade. Uma aluna relatou a dificuldade acima logo após uma avaliação diagnóstica no início do semestre.
Relendo aqui alguns trabalhos sobre ensino de programação, acho que encontrei uma interpretação interessante. Segundo vários estudos (por exemplo, [1,2]), as habilidades de programação podem ser categorizadas em 4 categorias:
- Leitura e compreensão: explicar o que um código faz usando linguagem natural (português ou inglês, por exemplo).
- Simulação: executar um programa mentalmente passo a passo, podendo listar os valores de cada variável em qualquer momento dessa execução
- Sequenciamento: organizar ideias, expressões e blocos de código na sequência correta para resolver um problema
- Escrita de código: digitar um programa que resolve o problema proposto.
Essas habilidades não são “sequênciais”, em que primeiro precisa aprender a ler código para depois escrever, por exemplo. Elas são interligadas e uma pessoa pode ter diferentes níveis de habilidade em cada uma.
Para uma pessoa com poucas habilidade de simulação, saber o que um algoritmo faz ajuda a adivinhar o estado do programa em cada iteração de um loop, por exemplo. Note que usei a palavra adivinhar, e isso foi de propósito. Aqui não necessariamente existe um modelo mental[3] de como o computador executa um programa, estou me referindo a uma suposição mesmo. O pensamento é mais na linha de “faz sentido que isso ocorra assim em um algoritmo de busca binária” do que “executei mentalmente o programa todo, linha a linha, e observei isso acontecer”.
Enfim, isso me motivou a montar mais materiais de simulação e tentar trazer mais conhecimento sobre porque considero essa habilidade essencial.
Bibliografia
[1] Lopez, M., Whalley, J., Robbins, P., & Lister, R. (2008, September). Relationships between reading, tracing and writing skills in introductory programming. In Proceedings of the fourth international workshop on computing education research (pp. 101-112).
[2] Fowler, M., Smith IV, D. H., Hassan, M., Poulsen, S., West, M., & Zilles, C. (2022). Reevaluating the relationship between explaining, tracing, and writing skills in CS1 in a replication study. Computer Science Education, 32(3), 355-383.
[3] Juha, S. (2013). Notional machines and introductory programming education. ACM Trans. Comput. Educ, 13(2), 1-31.