Teoria das Categorias para Programadores

Table of Contents

1. Apresentação do Curso

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.

book.jpg

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

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é-requisitos

Conhecimento intermediário em alguma linguagem de programação (C++, Python, Java, Scala, Haskell)

Programação

Dia 01: Categorias, Tipos e Funções, Categoria Kleisli, Produtos e Coprodutos, Tipos de Dados Algébricos, Functors

Dia 02: Bifunctors e profunctors, tipo função, transformação natural, monoids grátis, Functors representáveis

Dia 03: Yoneda, Functors Adjuntos, Monads, Comonads

2. Datas e Sala

O curso será ministrado pelo professor Fabrício Olivetti e terá duração de 12 horas nos dias 03/08, 10/08 e 17/08 das 08h00 às 12h00 no campus da UFABC de Santo André, bloco A sala S-204-0.

3. Inscrições

  • Número de vagas: 80
  • Para se inscrever: https://sig.ufabc.edu.br/sigaa/link/public/extensao/visualizacaoAcaoExtensao/808
    • Para se cadastrar o usuário deve clicar em "Clique aqui para fazer a sua Inscrição" → "Ainda não possuo cadastro".
    • Insira os dados solicitados e aguarde e-mail para finalização do cadastro. Após a finalização do cadastro, insira o e-mail e senha, clique em “Cursos e Eventos Abertos" e faça o cadastro no curso.

4. Como Chegar

Universidade Federal do ABC Avenida dos Estados, 5001, Bloco A, Sala 531-2 09210-580 Santo André - SP, Brazil.

Acesso pelos endereços: Av. dos Estados, 5001.

  1. Abolição, 378
  2. Santa Adélia, (em frente ao no. 221)

Estações de trem próximas: Prefeito Saladino e Santo André (CPTM L10) - recomendamos utilizar Uber para o trajeto estação-campus.

Mais informações: http://www.ufabc.edu.br/a-ufabc/campi/santo-andre

5. Material do Curso

6. Atividades e Suporte

As atividades do curso estão descritas e deverão ser submetidas pelo site https://classroom.github.com/classrooms/47036161-teoria-das-categorias-para-programadores Para submeter uma atividade, basta clicar no link da atividade para criar um novo repositório no Github, todo arquivo adicionado nesse repositório poderá ser acessado apenas pelo aluno e pelo professor da disciplina.

Atividades do Dia 01:

Atividades do Dia 02:

Atividades do Dia 03:

Durante o curso, utilizem o Piazza (https://piazza.com/class/jyhdahj8hovz) para tirar dúvidas. Nele também serão compartilhados materiais extras.

7. Contato

Author: Fabrício Olivetti

Created: 2021-06-11 sex 16:38