Reaproveitar, refinar e gerar código
Do problema grande às funções pequenas: refinamentos sucessivos, reúso de bibliotecas e um programa que escreve outro programa.
Metodologia ativa
A turma recebe um problema grande demais para resolver de uma vez e só avança quebrando-o em partes, reaproveitando o que já existe e refinando cada parte até virar código.
Habilidades da BNCC
- EM13CO01Explorar e construir a solução de problemas reutilizando partes de soluções já existentes, com decomposição, generalização e abstração. 📥 Baixar slides (PDF)
- EM13CO02Explorar e construir soluções por refinamentos sucessivos, em diferentes níveis de abstração, da especificação à implementação. 📥 Baixar slides (PDF)
- EM13CO04Reconhecer algoritmos que recebem, modificam ou produzem outros algoritmos (metaprogramação), como compiladores, interpretadores e geradores de código. 📥 Baixar slides (PDF)
Objetivos de aprendizagem
- Refinar um problema em etapas, da descrição em português ao código.
- Reaproveitar funções e bibliotecas prontas em vez de escrever tudo do zero.
- Reconhecer programas que recebem ou produzem outros programas, como interpretadores e geradores de código.
Materiais
- Computadores com navegador (Python on-line, como o do jogo Horta em Python ou um interpretador web)
- Quadro dividido em três colunas: “O quê”, “Como”, “Código”
- Cartões com nomes de funções prontas (len, sorted, sum, random.choice)
Desenvolvimento
Tempo total previsto: 100 minutos.
- 10 minO problema grande
Proponha: “Criar um sorteador de grupos para a turma que não repete pessoas e equilibra os grupos”. Pergunte por onde começar. Registre as ideias sem organizar.
- 20 minRefinamentos sucessivos
No quadro, decomponha em três níveis: objetivo geral, subtarefas (ler nomes, embaralhar, dividir, mostrar) e passos de cada subtarefa. Mostre que cada nível é uma abstração do de baixo.
- 25 minReaproveitar antes de escrever
Em duplas, os estudantes implementam as subtarefas em Python usando funções prontas (random.shuffle, fatiamento de listas). Discuta: o que ganhamos ao reaproveitar? Quem escreveu essas funções? Como confiar nelas?
- 20 minUm programa que escreve programas
Mostre um gerador simples: um programa que recebe uma lista de perguntas e gera o código de um quiz. Rode o código gerado. Explique que compiladores, interpretadores e assistentes de IA que geram código também são metaprogramação.
- 15 minMelhorar e generalizar
Cada dupla generaliza sua solução (número de grupos como parâmetro) e troca com outra dupla, que tenta reaproveitar o código sem pedir explicação.
- 10 minFechamento
Pergunta-chave: que parte do código foi mais fácil de reaproveitar e por quê? Registrem uma regra de bom reúso (nome claro, uma função faz uma coisa, parâmetros em vez de valores fixos).
Avaliação
Recolha o quadro de refinamento de cada dupla (três níveis completos) e o código final. Observe se a solução usa funções prontas, aceita parâmetros e foi reaproveitada pela outra dupla sem ajuda.