Rastrear código linha a linha: por que ler vem antes de escrever

Rastrear é executar o código de cabeça, uma linha por vez. Por que quem não sabe rastrear tem dificuldade para escrever código e como explicar um rastreamento em vídeo.

Pela equipe do Chasca 6 min de leitura

Este vídeo foi feito com a habilidade Problemas de programação. O vídeo é narrado em inglês. Ler a transcrição

Rastrear um código é segui-lo do jeito que o computador faz, uma linha por vez, anotando o valor de cada variável sempre que ele muda. Os alunos que não rastreiam com segurança têm dificuldade para escrever programas, e por isso as bancas testam isso diretamente e alguns pesquisadores defendem que seja ensinado antes de escrever código.

Por que o rastreamento importa tanto?

Porque muitos alunos terminam o primeiro curso de programação sem saber programar, e o rastreamento fraco é parte do motivo. Em 2001, um grupo de trabalho liderado por Michael McCracken aplicou uma avaliação de programação experimental a alunos do primeiro ano de ciência da computação em quatro universidades: os 216 alunos tiveram média de 22,89 em 110.

Um grupo seguinte perguntou por quê. Raymond Lister e colegas testaram alunos de sete países em ler e rastrear trechos curtos de código: prever o que um trecho curto de código produziria e escolher a linha que faltava num código quase pronto. Muitos foram fracos nas duas coisas, o que os autores interpretaram como um domínio frágil das habilidades de que a resolução de problemas depende.

Isso moldou uma ideia de ensino. Numa teoria de ensino de 2019 para programação introdutória, Benjamin Xie e colegas da Universidade de Washington separam quatro habilidades, com o rastreamento em primeiro lugar, e defendem ensinar a leitura antes da escrita. No estudo exploratório deles, o material que ensinava as habilidades nessa ordem levou a uma conclusão maior dos exercícios de prática, menos erros e melhor compreensão num pós-teste.

Como o rastreamento é cobrado?

Diretamente. As especificações de ciência da computação do GCSE inglês o incluem. A especificação da AQA cita o rastreamento de código entre as habilidades que a primeira prova avalia e espera que os alunos usem tabelas de rastreio para descobrir como algoritmos simples funcionam e para que servem. A da OCR exige que os alunos criem e usem tabelas de rastreio para acompanhar um algoritmo, e identifiquem erros no código e sugiram correções. As duas também pedem tabelas-verdade, e a da AQA inclui consultas SQL simples.

Como é um rastreamento?

Pegue uma questão curta, do tipo que uma prova do GCSE faz: o que este programa imprime?

total = 0
for n in range(1, 5):
    total += n
print(total)

Um rastreamento segue o computador uma mudança por vez:

Passo n total
Início 0
Primeira passada 1 1
Segunda passada 2 3
Terceira passada 3 6
Quarta passada 4 10

A ideia que importa é que range(1, 5) para antes do 5, então o laço roda quatro vezes e o programa imprime 10. O aluno que responde 15 executou o laço uma vez a mais, e uma boa explicação diz isso.

Por que é difícil aprender a rastrear sozinho?

  • Executar o código mostra a saída, não o porquê. O aluno vê “10” e continua sem saber qual linha o produziu.
  • Uma tabela de rastreio pronta mostra tudo de uma vez, então a ordem em que os valores mudaram, que é o ponto principal, se perde.
  • O tempo de aula é curto. O professor consegue rastrear um ou dois exemplos na lousa; a lista de casa tem muitos mais.
  • As explicações na internet cobrem assuntos, não o trecho exato em que o aluno travou, e raramente no idioma do próprio aluno com as palavras do código mantidas como são.

O que um bom vídeo de rastreamento mostra?

  1. O código, à vista o tempo todo, ao lado do desenvolvimento, com a linha em execução marcada.
  2. Cada valor quando muda, dito e escrito uma mudança por linha: “i = 2 → total = 3”.
  3. A ideia que importa, nomeada: o laço roda quatro vezes, a divisão inteira descarta o resto, o caso base encerra a recursão.
  4. Para um erro, a linha, por que ela falha e a correção. Para uma conversão de número, cada divisão pela base. Para SQL, quais linhas são mantidas e por quê.
  5. A saída destacada num quadro, depois uma conferência rápida.
  6. O código lido como os programadores falam, com nomes e palavras-chave em inglês, mesmo quando a explicação está em outro idioma.

Manter o código e o rastreamento juntos importa. A metanálise de 2006 com 50 estudos de Paul Ginns descobriu que reunir informações relacionadas, no espaço e no tempo, traz ganhos de aprendizagem substanciais, principalmente com material complexo. Tratamos mais dessa pesquisa em por que os vídeos de quadro branco funcionam.

O que a habilidade Problemas de programação faz?

Nós fazemos o Chasca, então leve isso em conta na nossa parte. A habilidade Problemas de programação trabalha questões de computação na lousa do professor:

  • Traga o código e a questão, digitados ou colados, ou como fotos, um PDF ou um documento da folha, com até 20 páginas: questões de saída, achar erros, sistemas de numeração, tabelas-verdade e SQL numa tabela pequena.
  • O seu código fica ao lado do desenvolvimento desde o início, copiado exatamente, e é percorrido como o computador o executa, com a linha que importa em destaque.
  • O rastreamento é escrito na lousa uma mudança por vez, enquanto é dito. Tabelas de rastreio, tabelas-verdade e resultados de consultas são desenhados como tabelas, um algoritmo dado em passos como um fluxograma e as chamadas recursivas como uma árvore.
  • As palavras do código são lidas como os programadores as dizem, em inglês, dentro de uma narração no seu idioma, com qualquer um dos 30 narradores ou com a sua própria voz.
  • Cada resposta é resolvida uma segunda vez, separadamente, antes de ser destacada num quadro. Se alguma coisa não bater, ou não bater com o seu gabarito, a página do vídeo diz qual questão checar.
  • Peça questões sobre um assunto sem dar nenhuma, e ela escreve para você códigos curtos no estilo de prova, em Python, a menos que você indique outra linguagem.

Para quem é?

Professores de ciência da computação que querem um rastreamento resolvido para cada questão de uma folha, professores particulares que preparam alunos para exames escolares e instrutores de cursos introdutórios de programação cujos alunos precisam ler código com fluência antes de escrevê-lo.

O que ela não faz?

  • Executar o seu código. Ele é rastreado do jeito que um professor faria na lousa e depois conferido resolvendo de novo; não é executado num computador.
  • Desenhar diagramas de portas lógicas ainda. Tabelas-verdade, sim; símbolos de portas, ainda não.
  • Ensinar uma linguagem inteira. Ela explica questões, uma de cada vez.

Como fazer um?

  1. Abra a habilidade “Code problems” no Chasca.
  2. Cole o código e a questão, com as alternativas e o seu gabarito, se tiver, ou adicione uma foto ou um PDF da folha.
  3. Escolha o idioma, a voz e uma lousa preta ou um quadro branco, e crie o vídeo.
  4. Confira a página do vídeo para ver se há alguma questão sinalizada antes de compartilhar.

Seus dois primeiros vídeos são grátis, de até um minuto cada, com marca d’água e sem precisar de cartão; um vídeo grátis cobre as primeiras questões que cabem no seu minuto. Os planos começam em $9.99 por mês (preços).

Fontes

Transcrição do vídeo O que o narrador diz no vídeo explicativo de 2:25 acima.

In this video, we trace a Python list and convert a decimal number to binary and hexadecimal.

Question one. What is the output?

First, x equals a list containing one, two, and three.

Next, y equals x, so both names refer to the same list. The call y dot append with four adds four to that shared list. Now x and y both refer to the list containing one, two, three, and four.

The print call evaluates len of x, which is four.

Notice that assigning y equals x does not copy the list. Hence, the output is four.

Question two. Convert forty-five to binary, then to hexadecimal.

First, repeatedly divide forty-five by two, keeping each remainder. Forty-five divided by two gives twenty-two with remainder one.

Twenty-two divided by two gives eleven with remainder zero.

Eleven divided by two gives five with remainder one.

Five divided by two gives two with remainder one.

Two divided by two gives one with remainder zero.

One divided by two gives zero with remainder one.

Reading the remainders from bottom to top gives one zero one one zero one in binary. For hexadecimal, divide forty-five by sixteen to get two with remainder thirteen.

Then divide two by sixteen to get zero with remainder two.

In hexadecimal, thirteen is written as D. Reading those remainders from bottom to top gives two D. As a check, two times sixteen plus thirteen equals forty-five.

Hence, forty-five is one zero one one zero one in binary and two D in hexadecimal.

Perguntas frequentes

Rastrear é acompanhar um programa linha a linha como o computador faria, anotando o valor de cada variável sempre que ele muda, para prever o que o programa faz ou imprime. A tabela de rastreio, o conhecido teste de mesa, é a forma habitual de registrar isso.

A evidência aponta nessa direção. Uma teoria de ensino de 2019 para programação introdutória põe o rastreamento em primeiro lugar e, no estudo exploratório dela, ensinar as habilidades nessa ordem melhorou a conclusão dos exercícios e reduziu os erros.

Dê a cada variável, e à saída, uma coluna própria. Percorra o código linha a linha e acrescente uma linha cada vez que um valor mudar; a última linha traz os valores finais e a saída.

Porque precisam guardar todas as variáveis de cabeça enquanto acompanham a ordem em que o computador executa as linhas. Um estudo de 2004 em sete países constatou que muitos programadores novatos eram fracos em prever o que trechos curtos de código produziriam.

Não. A habilidade Problemas de programação rastreia o código do jeito que um professor faria na lousa, e cada resposta é resolvida uma segunda vez, separadamente, antes de ser destacada num quadro. Se as duas não concordarem, a página do vídeo diz qual questão checar.

Questões de saída e de rastreamento, achar e corrigir erros, conversões de números, como de decimal para binário, tabelas-verdade e consultas SQL numa tabela pequena. Ela ainda não desenha diagramas de portas lógicas.

Continue lendo

Seu próximo vídeo explicativo leva menos de um minuto.

Seus primeiros 2 vídeos são grátis, de até 1 minuto cada, com marca d’água. Não precisa de cartão. Produto completo, com todas as vozes e estilos incluídos.