Apresentação |
---|
Página institucional |
Regime de Avaliação |
Sumários | Calendário |
Material |
Bibliografia |
Equipa docente | Horário |
Alunos |
Atendimento |
Anos anteriores |
16-Nov: Enunciado do trabalho prático e material associado publicados em Material. (Data de entrega: 10-Jan-2025)
16-Nov: está disponível, em Material, a ficha nr.º 10 que deve ser preparada para as próximas aulas TP.
Bem vindo à página da edição de 2024/25 da unidade curricular de Cálculo de Programas. O principal objectivo desta disciplina é o ensino de métodos que estão na base da abordagem científica ao desenvolvimento de software.
A palavra “programa” vem do grego “programma”, uma derivação de “prographein” = “pro” (antes) + “graphein” (escrever). Isto sugere que alguém que programa deve pensar antes no que vai fazer.
A indústria de software espera das universidades um ensino sistemático da programação, i.e. científico. Só assim haverá garantias de que não há erros de programação. Tal como noutros ramos da engenharia, para isso é preciso introduzir a noção de cálculo em programação, isto é, uma disciplina que nos ajude a pensar os programas, raciocinar sobre eles e obter versões eficientes sem introduzir erros.
O Departamento de Informática da Universidade do Minho tem uma longa tradição neste tipo de ensino. Com mais de 20 anos de leccionação, Cálculo de Programas é uma das unidades curriculares que ensinam tais competências. Mais do que tecnologia ensina-se método, que é afinal aquilo que a maioria dos programadores acaba por não ter.
Conteúdos segundo a taxonomia ACM (5 ECTS no total):
Esta UC é dada aos cursos de Engenharia Informática e Ciências da Computação, em dois semestres diferentes.
À parte provas de avaliação, os conteúdos (regime de avaliação, etc) dessas duas edições são exactamente os mesmos.
Programação composicional: aprender a escrever programas complexos por composição de programas mais simples (princípio da composicionalidade).
Programação construtiva: aprender a escrever programas funcionais com recurso a combinadores algébricos.
Transformação de programas: recurso à algebra da programação para se obter eficiência sem sacrifício da correcção.
Arquitectura da programação: Análise, compreensão e catalogação de programas: recurso à factorização em pares “fold” + “unfold” (hilomorfismos) como forma de se perceber a arquitectura dos algoritmos e sua taxonomia.
Síntese de programas: cálculo de ciclos-for a partir de definições indutivas da matemática.
Programação funcional avançada: construir e raciocinar sobre programas funcionais com efeitos sob a forma de mónades.
Is abstraction the key to computing? por Jeff Kramer (2007).
Programming and Maths por Harold Carr (LambdaConf 2015).
Efeméride: foi em 1978 que o cientista da IBM John Backus publicou o artigo da sua Turing Award - Can Programming be Liberated from the von Neumann Style? A Functional Style and Its Algebra of Programs - em que declarou as linguagens convencionais incapazes para os desafios que se anunciavam (arquitecturas paralelas), promovendo a programação funcional e iniciando a disciplina da álgebra da programação.
Haskell na indústria de Software: link