- Em uma série de 12 aulas de programação para alunos do ensino fundamental II e médio, escolhi Forth, uma linguagem concatenativa baseada em pilha criada em 1970, para focar em conceitos básicos em vez de sintaxe
- Depois de executar manualmente a estrutura LIFO e as operações usando pratos de papel, os alunos passaram para o computador, em uma abordagem pensada para que entendessem com o corpo como funciona um interpretador Forth
- No Easy Forth, que não exige instalação, desenhos, animações e jogos foram usados como projeto final; os alunos mudaram regras e cores do Snake ou concluíram obras em nível de pixel
- Forth tem pouca carga sintática, mas iniciantes precisaram lidar cedo com estruturas de baixo nível como pilhas; para uma aula introdutória, talvez Scratch, com feedback visual imediato, fosse melhor
- Mais do que uma linguagem específica, é importante ter um ambiente em que seja possível ver resultados rapidamente e explorar por conta própria; conforme cresce o risco de não aprender ou não manter habilidades por dependência de LLMs, a educação centrada em pessoas se torna ainda mais necessária
Por que escolhi Forth
- Em vez de Python ou Scratch, escolhi Forth, uma linguagem concatenativa baseada em pilha, para explorar um caminho educacional pouco comum
- Queria evitar o peso de ensinar sintaxe para tratar de conceitos básicos no tempo limitado das aulas
- Python parece pseudocódigo para quem já tem experiência em programação, mas ainda é difícil de entender para quem está aprendendo pela primeira vez
- As linguagens candidatas eram Forth e Haskell
- Forth era atraente porque executa comandos na ordem em que são escritos, então, entendendo a pilha, é possível criar programas
- Haskell se alinhava bem aos conceitos de variáveis e funções aprendidos em matemática, evitando a confusão comum de tratar variáveis como caixas que contêm valores na programação tradicional
- A decisão final por Forth teve dois motivos
- Era fácil de integrar a um ambiente de aprendizagem personalizado
- Para a demonstração final em sala, considerei que programação procedural seria mais fácil de entender do que programação funcional
- Usar uma linguagem pouco conhecida permitia que alunos com experiência em programação também aprendessem algo novo, sem deixar os iniciantes excluídos
Estrutura do curso de 12 horas
- As aulas aconteceram uma vez por semana, com 1 hora por encontro, totalizando 12 encontros, sem esperar que os alunos fizessem muitas tarefas fora da aula
- O objetivo final era que cada um criasse um desenho, uma animação ou um jogo no ambiente Forth
- A intenção era deixar um resultado visível e preservável mesmo depois do fim do curso
- Eu queria evitar a situação em que se aprende muito conteúdo técnico, mas não se sente que algo concreto ficou nas mãos
- Como cada aluno usava um sistema operacional diferente e alguns dispositivos não permitiam instalar software externo, era necessário conseguir executar código no próprio computador sem downloads ou instalações separados
- No início, tentei implementar Forth diretamente em Rust e embuti-lo no site do curso via WASM, mas a correção de bugs levou mais tempo do que o previsto e mudei o plano
- Adotei o Easy Forth, de Nick Morgan, como currículo e interpretador, e publiquei no portal online os slides de cada aula, os planos de aula e uma cópia do Easy Forth
Aulas começando pelo conceito de computador
- Na primeira aula, comecei pela história da computação e pelo que é um computador
- Mostrei vários dispositivos, incluindo um ábaco, e perguntei se eram computadores; depois, defini computador como “qualquer coisa que calcula números”
- Por essa definição, quase qualquer coisa pode ser um computador, inclusive os próprios alunos
- Depois de ampliar a percepção existente sobre o escopo dos computadores, apresentei Forth e suas áreas de uso real, incluindo aplicações embarcadas
- O Easy Forth presumia que o leitor já conhecia pelo menos uma linguagem de programação e a estrutura de dados pilha, mas os alunos não tinham esse conhecimento, então foi necessária uma explicação separada
Entendendo a pilha de dados com pratos de papel
- Antes de usar o computador, visualizei com pratos de papel a pilha de dados, que é a base do Forth
- Números separados por espaços entram na pilha na ordem de entrada
- Se você digita
1 2 3e depois imprime com. . ., os itens saem a partir do último que entrou, resultando em3 2 1 - A pilha é uma estrutura LIFO (Last-In First-Out), baseada em push, que coloca itens no topo, e pop, que retira itens do topo
- Se você digita
- Cada aluno recebeu pratos de papel e executou operações Forth manualmente
- Ao fazer push de um número, escrevia o número em um prato e o colocava no topo
- Ao somar, retirava os dois pratos do topo, somava os valores e colocava um novo prato com o resultado
8 6 +é uma operação que coloca os dois valores, soma e põe14na pilha2 3 *coloca na pilha o resultado6, obtido pela multiplicação dos dois valores
- Repetindo várias operações, os próprios alunos atuaram como interpretador Forth
- Depois de entenderem que o computador automatiza esse trabalho, passamos para os dispositivos reais
Prática com Easy Forth e trabalhos finais
- A cada semana, seguimos as aulas do Easy Forth com explicações de conceitos, exercícios e perguntas e respostas, e o curso todo avançou sem problemas especiais
- Como projeto final, que precisava ser concluído dentro das 12 horas e mostrar o que foi aprendido, usamos o framework gráfico do Easy Forth
- Os alunos podiam criar um desenho, uma animação ou um jogo
- Como talvez não houvesse tempo suficiente para finalizar um jogo novo, incentivei a modificar o jogo Snake embutido para criar resultados originais
- Extraí o código do playground do Easy Forth para uma página separada e o ampliei para mostrar o código de um lado e uma grande área gráfica do outro
- Na última aula, os alunos descobriram rapidamente que mesmo pequenas mudanças no código do Snake alteravam regras e cores
- Eles ainda não estavam no nível de fazer grandes refatorações, mas já estavam familiarizados o bastante para explorar e modificar Forth sem medo
- Mostrei como desenhar objetos com os gráficos embutidos e um exemplo de criação de novas palavras para desenhar formas como linhas com facilidade
- Todos os alunos escolheram seus próprios trabalhos, e a maioria produziu desenhos em nível de pixel
- Depois do fim do curso, mantive o ambiente online por algum tempo para que os alunos pudessem continuar experimentando e aprendendo se quisessem
Conclusões obtidas ao ensinar Forth
- Forth foi uma linguagem de ensino interessante, mas não ficou claro se foi a melhor escolha
- Embora não tenha sintaxe difícil, ela exigia que iniciantes pensassem diretamente em elementos de sistema que muitos programadores deixam sob abstrações
- Pilha é uma estrutura de dados fundamental da ciência da computação, mas não precisa estar logo no começo da educação inicial
- A possibilidade de escrever código como uma sequência de palavras era poderosa, e linguagens concatenativas com componentes de nível mais alto também podem ser úteis na educação
- Linguagens como Factor, ou abordagens completamente diferentes, também poderiam ser candidatas
- Se eu escolhesse de novo, poderia considerar um meio focado em feedback visual claro e imediato, em vez de estruturas internas
- Scratch permite ensinar fluxo de controle, variáveis, funções etc. sem detalhes de baixo nível, além de facilitar o movimento de sprites
- A linguagem de programação específica em si não é tão importante, e mesmo em um curso curto os alunos conseguiram aprender Forth de forma eficaz
- Como paradigmas diferentes podem se ajustar melhor a alunos diferentes, é difícil ajustar perfeitamente o processo de aprendizagem
- É importante ter um ambiente em que os resultados possam ser verificados de forma rápida e iterativa, com exploração autônoma
- Os alunos tiveram uma experiência introdutória de baixo nível que aprofunda o entendimento de uma estrutura de dados fundamental da ciência da computação
- Para quem conduziu as aulas, também foi uma oportunidade de melhorar a didática pelo mesmo tipo de aprendizado iterativo exigido dos alunos
Aprendizado centrado em pessoas necessário na era dos LLMs
- Quanto mais a programação for guiada por automação probabilística, mais importante será ensinar pessoas a programar diretamente
- Mesmo quem já sabe programar pode perder habilidades ao depender de LLMs, e quem não aprendeu desde o início pode nem chegar a formar essas habilidades
- Pessoas que querem aprender novas habilidades também estão cada vez mais recorrendo a LLMs em vez de materiais reputados
- LLMs podem ser imprecisos, têm tendência a bajular o usuário e, em alguns casos, podem agravar seriamente transtornos mentais
- Para crianças que ainda estão aprendendo a interagir com o mundo, essas características são ainda mais perigosas
- Precisamos oferecer ambientes centrados em pessoas em que qualquer um, independentemente da origem, especialmente crianças, possa aprender habilidades como programação
- Pessoas de diferentes origens precisam investir tempo e energia para compartilhar conhecimento, e também ensinar formas seguras de obter conhecimento adicional
- Mesmo sem ser professor profissional, é preciso aprender a ensinar e criar espaços em que o conhecimento circule livremente entre pessoas
1 comentários
Opiniões no Lobste.rs
Easy Forth parece ser um bom material, e recomendo que todo programador dedique 10 minutos para experimentar Forth. É uma linguagem muito simples de aprender, ao mesmo tempo familiar e capaz de mexer com sua forma de pensar, além de ser fácil de implementar quando você precisa criar rapidamente uma linguagem de alto nível do zero
DOES>não sãoImplementar Forth foi divertido, mas quanto mais código eu escrevia, menos eu gostava dele. Por causa de palavras de ruído como
DUP,ROTeSWAP, fica difícil acompanhar o fluxo, e ele também tende a incentivar o uso de variáveis globais, de que não gostohttps://archive.ph/0ZOVa