Executando verificação de segurança...
2

Do quadro ao código: ensinar Compiladores através de projectos com impacto real

O ensino da disciplina de Compiladores representa, tradicionalmente, um dos maiores desafios na formação em Informática e Engenharia Informática, sobretudo devido ao elevado nível de abstracção dos seus conceitos. Com o objectivo de ultrapassar essa barreira, no Instituto Superior Politécnico Independente (ISPI) optei por uma abordagem fortemente prática, centrada na aprendizagem baseada em projectos.

No contexto desta disciplina, orientei um projecto académico que demonstrou, de forma clara, o valor da integração entre teoria e prática no processo de ensino-aprendizagem. Desde as primeiras aulas, os estudantes foram envolvidos na construção, passo a passo, de um mini-compilador funcional, no qual foram implementadas as principais fases do processo de compilação: análise léxica, análise sintáctica e análise semântica. Esta estratégia permitiu que conceitos frequentemente percepcionados como abstractos fossem compreendidos de forma concreta e progressiva.

Com esta base consolidada, foi lançado aos estudantes o desafio de expandir o projecto, transformando-o numa solução mais completa e próxima de um compilador real. O desafio não se limitou à implementação técnica, mas incentivou a reflexão sobre arquitectura, qualidade de código e boas práticas de desenvolvimento de software.

Entre os principais desafios propostos destacaram-se:

  • a introdução de novas funcionalidades (features) na linguagem;
  • a implementação de testes automatizados;
  • a aplicação de optimizações simples;
  • e a geração de código intermédio.

Como resultado deste processo, os estudantes conceberam uma linguagem de programação própria, denominada SetaAo, bem como o respectivo compilador, designado Pamdu-ali. O projecto revelou um elevado nível de maturidade técnica e conceptual, superando as expectativas iniciais da disciplina.

Um dos grupos distinguiu-se particularmente pela iniciativa de ir além dos objectivos propostos, desenvolvendo uma IDE desktop, recorrendo à tecnologia Electron, totalmente dedicada à linguagem SetaAo e integrada com o compilador Pamdu-ali. Esta interface permitiu a escrita de código, a compilação, a visualização estruturada de erros e a execução de programas, aproximando o projecto de um ambiente profissional de desenvolvimento.

Neste grupo merecem especial destaque os estudantes Ludjério Paulino, Jandira Mendonça e Henrique Mundombe, cujo desempenho, dedicação, espírito de iniciativa e qualidade técnica do trabalho desenvolvido foram determinantes para o sucesso e consolidação do projecto.

Para além dos resultados alcançados no contexto da disciplina, este projecto evidencia um forte potencial como contributo para o ensino de Compiladores, tanto no ensino médio técnico como no ensino superior. A abordagem adoptada permite uma progressão pedagógica clara, desde um mini-compilador de carácter didáctico até um sistema mais completo e extensível, facilmente adaptável à realidade de diferentes instituições de ensino.

Com o intuito de promover a partilha de conhecimento e incentivar a colaboração académica, o projecto encontra-se disponível em formato open-source, podendo ser reutilizado, estudado e evoluído por outros docentes e estudantes:

🔗 Repositório do projecto:
👉 Mini Compilador

Experiências como esta reforçam a importância das metodologias activas de ensino e demonstram que, com orientação adequada, os estudantes são capazes de desenvolver soluções com impacto académico, pedagógico e tecnológico real.

🚀 Fica o orgulho no trabalho desenvolvido pelos estudantes do Instituto Superior Politécnico Independente (ISPI) e a convicção de que o ensino prático é um caminho sólido para formar profissionais mais críticos, autónomos e preparados para os desafios da área da Computação.

Carregando publicação patrocinada...
2

Parabéns pelo projeto e estudo.

Vou aproveitar aqui para mostrar como a linha de teoria e prática não costuma ser compreendida claramente.

Eu sei que hoje as pessoas estão buscando muito a prática, não querem saber da teoria e isso é um enorme problema, porque a pessoas não aprende o certo, ela aprende o que funciona, e isso tornará um profissional ruim, porque ela aprenderá o erro, vai treiná-lo vai ensinar outro errado e vai brigar por ele.

Fiat 147 todo detonado andando pelas ruas

Sem a teoria muito bem aprendida vira um castelo de cartas pronto para cair. Pior, pode estar gastando muita energia em algo que alguém já fez melhor. Especialmente em compiladores eu tenho experiência de fazer direto na prática, até porque eu não tinha acesso a recursos que pudessem me ensinar, eu tinha zero conhecimento sobre compiladores e fiz um monstrengo completo errado mas que "funcionava".

Depois eu fiz um projeto de compilador estudando só um pouquinho a teoria, vendo como alguém fez um compilador. Ficou absurdamente melhor, parecia em compilador de verdade mesmo, e estava muito mais certo, embora não perfeito, ele funcionava e razoavelmente bem, mas longe de ser um bom compilador.

Até que fui estudar a teoria a fundo, ler os livros certos, ver as novidades que alguns compiladores estavam adotando mais recentemente que muda muito como os compiladores funcionam e comecei por em prática. Nunca terminei esse projeto mas ele tem condições der ser uma obra prima da engenharia. Mérito meu? Claro que uma pitadinha sim, eu soube fazer, mas o grosso do mérito foi a teoria que aprendi com outros que fizeram muitos compiladores.

Isso vale para qualquer tipo de software, mas especialmente em compiladores ter uma abordagem apenas prática beira o impossível, e ter só um pouco de teoria vai produzir um resultado ruim, será treinar o erro de alguma forma. Compiladores provavelmente é a disciplina que se tem mais estudo e conhecimento acumulado do que é bom, e não faz sentido não aproveitar isso.

Há vários questionamentos no campo pedagógico sobre essa ideia de aprender só fazendo projetos e pode ser que em algum momento tenha algum estudo que prove ou indique fortemente que isso não funciona tão bem quanto alguns achavam ou até que é prejudicial. Isso aconteceu com o uso de computadores para auxílio na aprendizagem, tem países que tiraram porque a experiência não foi boa, as pessoas estavam apenas decorando receitas de bolo, fazendo pesquisas na internet e agora então estariam usando IA. Isso é dar um tiro no pé daqueles de arrombar tudo.

Funcionaria do ponto de vista pedagógico fazer um compilador direto na prática? Isso poderia dar certo, mas só se depois fizesse outro projeto calcado na teoria para aprender do jeito certo. Assim você estimula a pura criatividade, a imaginação de como algo funciona sem saber como realmente é, e ensinaria o correto.

Quando se fala em estudar, algumas pessoas entendem que é aprender teoria, mas na verdade é aprender. Não existe estudo adequado que foque só na teoria, quando se fala para você estudar, a prática está implícita.

Agora pegando o caso específico aqui, a descrição de como foi feito o projeto indica que um pouco de teoria foi estudado.

Assim como os computadores podem ser ferramentas de aprendizado boas, desde que usada corretamente, sem fraudes, quando a pessoa já tem uma maturidade de raciocínio, projetos podem ser ótimas ferramentas para fazer a pessoa estudar algo, lembrando que envolve a teoria em alguns momentos do aprendizado. Quando você está aprendendo totalmente novo, se você não fizer exercícios pequenos, treinando só o mecanismo daquele momento, algo dará errado no aprendizado. Você não pode ensinar programação mandando a pessoa fazer um projeto. Poderá pedir projetos quando a base já está boa, quando você sabe os mecanismos e agora vai juntar tudo de forma adequada.

Minha experiência vendo algumas pessoas fazendo o aprendizado baseado em projetos, é que ela acaba copiando o que existe e não força o raciocínio, que é a parte importante. Ela pula várias coisas interessantíssimas que ela não enxerga, e faz algo mediano na melhor das hipóteses, a não ser que seja um pequeno gênio. Isso funcionou para muita gente e ainda vai funcionar um pouco, para quem quer só o resultado, pode ser ok. Isso é aprender e fazer do jeito que a IA faz, ou seja, você está se rebaixando ao nível dela e ela fará melhor que você, e você será descartado. Nem vou falar quando ela copia um projeto ruim, e que muitas vezes é popular (o ruim se torna popular mais facilmente que o bom, pode ver em várias áreas).

Bem, tudo isso que estou falando é para formar bons engenheiros, mas dá para criar programas razoáveis seguindo o atalho. Infelizmente eu sei que a maioria hoje só quer o resultado, não o melhor resultado possível.

Nunca vi de fato alguém ser crítico e autônomo sem uma base sólida de teoria e de prática também.

Vira e mexe eu encontro postagens de pessoas falando sobre coisas absolutamente erradas, e eu vou lá e corrijo, pelo menos para quem vai ler. Às vezes a pessoa concorda e agradece, diz até mesmo algo como " não tinha ideia que era assim, obrigado", alguns silenciam, provavelmente ignorando o que eu corrigi, alguns começam brigar porque ela aprendeu errado, treinou isso, e agora vai defender o erro com unhas e dentes.

E é pior quando tem uma fonte errada na internet que todos vão olhar. E aí até pessoas experientes caem em armadilhas, porque falta criticidade e autonomia real, ela se baseia sempre em conteúdos de terceiros.

Vou dar um exemplo de algo não técnico, mas que é uma grande mentira que as pessoas acreditam e vejo profissionais com enorme experiência, que são respeitado e conseguem bons empregos, mas compram uma mentira a ajudam ela "se tornar verdade porque foi repetida mil vezes". Veja: https://www.tabnews.com.br/maniero/c-ganha-como-linguagem-do-ano-no-tiobe.

S2


Farei algo que muitos pedem para aprender a programar corretamente, gratuitamente (não vendo nada, é retribuição na minha aposentadoria) (links aqui).