Apesar de linguagens funcionais estarem amplamente disponíveis há mais de 50 anos (Lisp foi apresentada ao mundo em 1958), surpreendentemente o primeiro livro texto que aborda estruturas de dados e seus algoritmos em um contexto funcional só foi publicado por Okasaki em 1998, ou seja, 40 anos após o nascimento de Lisp.
EDs funcionais têm diversas características que as diferenciam de suas colegas imperativas. Essas diferenças são tantas que justificam o seu estudo de maneira independente. Por exemplo, EDs funcionais são persistentes, o que significa que diversas versões da mesma ED podem conviver simultaneamente facilitando, por exemplo, a programação concorrente e paralela nestas estruturas.
Neste curso vamos explorar algumas das estruturas de dados funcionais mais comuns. Também veremos as técnicas mais comuns que são utilizadas nas suas implementações. Assim, ao final deste curso, o aluno saberá desenvolver a sua própria ED ou adaptar uma ED imperativa a um contexto funcional sempre que precisar.
Datas: 23/11, 30/11 e 07/12
Horário: 08h30 às 12h30
Local: Universidade Federal do ABC, campus Santo André. Sala a confirmar.
Contato: e.francesquini@ufabc.edu.br
Página: http://pesquisa.ufabc.edu.br/haskell/cursos/19.q3.eds_funcionais/
Grandes empresas de tecnologia como Microsoft, Facebook, Target e também do ramo financeiro têm utilizado linguagens de programação funcionais em parte de seus projetos. Além disso, linguagens multi-paradigmas como Java e Python vêm incorporando tais conceitos a cada nova versão para aumentar a expressividade e produtividade.
O uso desse paradigma está ainda mais evidente nas áreas de Data Science, devido a necessidade de algoritmos que possam ser processados de forma distribuída e também na área de programação para Web, com a popularização de frameworks baseados em programação funcional reativa, como por exemplo o ReactJS.
Esse fato é evidenciado pelas diversas ofertas de emprego que solicitam, especificamente, por capacidades em linguagens funcionais como Elixir, Erlang e Scala. Contudo, na maior parte dos currículos de graduação em computação e em áreas correlatas é dado um maior enfoque nos paradigmas estruturados e orientados a objetos. Isso cria um obstáculo para esses profissionais quando precisam lidar com essas novas tecnologias ou para o preenchimento dos requisitos durante a busca por uma nova colocação no mercado.
Este curso tem como objetivo apresentar o paradigma funcional e seus benefícios através da linguagem Haskell como uma ferramenta viável de criação, entendimento e corretude de algoritmos com aplicações voltadas à data science e programação para web.
Esperamos que ao final do curso os alunos tenham condições de perceber as vantagens do uso de linguagens funcionais além de permitir novas abstrações para soluções de problemas. O aluno também estará apto a aplicar linguagens funcionais e seus conceitos para a solução de problemas básicos em data science e programação em geral, requisitos para uma grande fatia das ofertas de emprego atuais.
No último dia do curso (19/10 às 10h30) teremos uma palestra com Guilherme de Maio da Telnyx (https://telnyx.com/) que nos falará sobre o uso de linguagens funcionais, em particular Elixir, em um ambiente corporativo real.
O curso é gratuito e será ministrado pelos professores da Universidade Federal do ABC, Fabrício Olivetti e Emílio Francesquini e terá duração de 12 horas.
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.
Você já sonhou em, após compilar um programa com sucesso, ele não apresentar bugs? Os seus sonhos se tornam realidade com o paradigma funcional! Esse curso irá ensinar como criar códigos expressivos e livre de bugs utilizando a linguagem Haskell.
Grandes empresas como Microsoft, Facebook, Target e diversas empresas do ramo financeiro têm utilizado linguagens de programação funcionais em parte de seus projetos. Além disso, linguagens multi-paradigmas como Java e Python vêm incorporando tais conceitos a cada nova versão para aumentar a expressividade e produtividade.