Teoria das categorias é uma área da matemática que estuda estruturas abstratas com foco no relacionamento (morfismos) entre objetos. As categorias possuem duas propriedades básicas: a existência de um morfismo identidade e um operador de composição entre dois morfismos.
A composição remete a forma como programamos um algoritmo: dividindo um problema em pequenos pedaços, resolvendo cada um deles, e compondo as funções criadas.
Muitos dos padrões estudados em categorias podem ser traduzidas diretamente para designs de programação que incentivam a criação de códigos genéricos, concisos, redução de boilerplate codes, diminuição do uso de mutabilidade e abuso variáveis globais, dentre outros benefícios.
Como exemplos notáveis temos as estruturas optional do C++, Streams do Java, Monoids no C++, etc.
Esse estudo também motivou um novo design de programação chamado de Type-driven development (em contraste com Test-driven development) em que o objetivo, diferente do que estamos acostumados, é dificultar a compilação do código para que, quando compilar, ele tenha menor chance de conter bugs.
Esse curso foi montado baseado no livro disponível gratuitamente em https://bartoszmilewski.com/2014/10/28/category-theory-for-programmers-the-preface/ com diversos exemplos complementares. O foco será em como podemos utilizar as diversas construções de Teoria das Categorias para criarmos programas mais claros, genéricos e com menor chance de erros.
Os códigos mostrados durante o curso serão dados primariamente em Haskell (mas conhecimento da linguagem não será um pré-requisito) e, em boa parte do curso, também em C++ e Python.
Objetivos do curso: permitir a identificação de padrões comuns durante a fase de planejamento e desenvolvimento de sistema de forma a permitir a criação de códigos corretos, concisos, genéricos e que separe as computações que geram efeitos-colaterais das funções puras.
Metodologia: aulas teóricas intercalando conceitos abstratos da Teoria das Categorias com exemplos concretos em desenvolvimento de sistemas e discussões sobre estudos de caso. Ao final de cada aula serão passadas tarefas de programação para fixar os conceitos aprendidos e, ao final, um mini-projeto teórico ou de programação para avaliação.
Pré-requisito: conhecimento intermediário em alguma linguagem de programação (C++, Python, Java, Scala, Haskell)
Dias e horários: 03/08, 10/08, 17/08, das 08h às 12h.
Local: Universidade Federal do ABC, campus Santo André. Sala a confirmar.
Inscrições: https://sig.ufabc.edu.br/sigaa/link/public/extensao/visualizacaoAcaoExtensao/808
Contato: folivetti@ufabc.edu.br