1 pontos por GN⁺ 6 시간 전 | 1 comentários | Compartilhar no WhatsApp
  • 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 3 e depois imprime com . . ., os itens saem a partir do último que entrou, resultando em 3 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
  • 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õe 14 na pilha
    • 2 3 * coloca na pilha o resultado 6, 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
  • 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

 
GN⁺ 6 시간 전
Opiniões no Lobste.rs
  • Expor crianças e adolescentes a ferramentas e linguagens de computação fora do mainstream é eficaz para ensinar a amplitude da área de computação e as várias abordagens que podem ser usadas para resolver problemas
  • Gosto muito de Forth, mas talvez ele não seja a melhor opção para ensino. Ainda assim, para programadores é importante ter contato com diferentes paradigmas de programação
    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
    • A maior parte de Forth é simples, mas elementos como DOES> não são
      Implementar Forth foi divertido, mas quanto mais código eu escrevia, menos eu gostava dele. Por causa de palavras de ruído como DUP, ROT e SWAP, fica difícil acompanhar o fluxo, e ele também tende a incentivar o uso de variáveis globais, de que não gosto
  • Digamos que eu goste de aprender linguagens de programação interessantes; um amigo recomendou Forth, e eu realmente pretendo aprender
  • Se você não conseguir acessar a página atual, pode usar o arquivo abaixo
    https://archive.ph/0ZOVa
    • Na verdade, a página não tinha saído do ar; o ISP estava bloqueando