Programando em
Adolfo Neto (PPGCA-DAINF-UTFPR)
@adolfont
bit.ly/adolfontEn
Sobre mim
● Professor DAINF desde 2008
● Orientador no Mestrado em Computação
Aplicada (PPGCA)
● Disciplinas:
− Lógica para Computação
− Métodos Ágeis
− Metodologia da Pesquisa
− Tópicos Avançados em Engenharia de Software 2
Temas de Pesquisa
● Métodos Ágeis para o Desenvolvimento
de Software (TDD, PP)
● Provadores de Teoremas (Tableaux e
SAT)
● Ensino de Lógica
● Encontros de Desenvolvedores (Coding
Dojos, Coderetreats, Meetups)
Roteiro
● Em quais linguagens…
● Linguagens mais usadas
● FizzBuzz
● José Valim
● Linguagens brasileiras
● Dave Thomas
● Características de Elixir
Roteiro
● Erlang
● Interactive Elixir
● Livro que inspirou a criação de Elixir
● Como aprender mais?
● O que tenho feito com Elixir?
● Empregos e Futuro em Elixir
Em quais linguagens de
programação você já
programou?
No mínimo um programa de umas 50
linhas
Em quais linguagens de
programação você já programou
50+ linhas?
● Java
● JavaScript
● C, C++ ou C#
● Python
● PHP
● Ruby
● Scala
● Lisp
● Clojure
● Prolog
● Erlang
● Lua
● Elixir
● Outra?
Linguagens mais
usadas
Como cheguei ao Elixir
● Histórico:
− 80’s: BASIC, Assembler
− 90-93: Algoritmos, Pascal, C, C++, LISP
− 94: Java (beta)
− 2003: Java (OO, Patterns GoF), AspectJ
− 2008-2010: Prolog, Ruby
− 2010: Clojure (Lisp e Java)
− 2014: Clojure *Meetup Durham, NC
− 2014-5: Elixir *Mentioned in several meetups at the
Research Triangle (Raleigh, Durham, Chapell Hill - NC)
Mais sobre como cheguei a Elixir
● Escutava falar de Elixir nos Meetups dos
EUA (04/2014-04/2015)
● Interessei-me pois o criador é brasileiro
● Elixir é funcional
● Elixir tem características de Clojure
Fizz Buzz
https://www.forbes.com/sites/kevinknudson/2016/08/25/fizzbuzz-party-games-meet
-coding/#1a1b73dd59c2
Fizz Buzz
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Múltiplos de 3:
Fizz
Múltiplos de 5:
Buzz
Múltiplos de 3 e
de 5: FizzBuzz
Demais: o
próprio número
FizzBuzz em Java e
em Elixir
Estética
Fizz Buzz em Java
public class FizzBuzz {
public static void main(String[] args) {
for (int i = 1; i <= 100; i++) {
if (i % 15 == 0) {
System.out.println("FizzBuzz")
} else if (i % 3 == 0) {
System.out.println("Fizz");
} else if (i % 5 == 0) {
System.out.println("Buzz");
} else {
System.out.println(String.valueOf(i));}}}}
https://codereview.stackexchange.com/questions/11489/fizzbuzz-implementation
Fizz Buzz em Elixir
https://www.leighhalliday.com/fizzbuzz-in-elixi
r
Criador do Elixir
José Valim
José Valim
José Valim
Co-founder
Linguagens Brasileiras
Como uma linguagem
de um país de terceiro
mundo fica famosa?
Dave Thomas
Dave Thomas
Dave Thomas
Testes
Dave Thomas é o criador de Elixir.
José Valim escreveu o primeiro livro sobre
Elixir.
Dave Thomas é um dos signatários do
Manifesto Ágil.
Elixir já está entre as 20 linguagens de
programação mais usadas no mundo,
segundo o Tiobe Index.
Características de Elixir
“Elixir é uma linguagem de programação
funcional, concorrente, de propósito geral
que executa na máquina virtual Erlang
(BEAM).”
“Elixir is a functional, concurrent,
general-purpose programming language that
runs on the Erlang virtual machine (BEAM).”
Características de Elixir
“Elixir is a functional, concurrent,
general-purpose programming language that
runs on the Erlang virtual machine (BEAM).”
(WIKIPEDIA)
Funcional: Fizz Buzz em Elixir
whichfizz = fn
(0, 0, _) -> "FizzBuzz"
(0, _, _) -> "Fizz"
(_, 0, _) -> "Buzz"
(_, _, n) -> n
end
fizzbuzz = fn (n) ->
whichfizz.(rem(n, 3), rem(n, 5),
https://www.leighhalliday.com/fizzbuzz-in-elixi
r
Casamento de Padrões
Erlang
● Criada na Ericsson
● Erlang VM:
− Pequenos processos concorrentes
− Processos trocam mensagens
− Tolerante a falhas
− Joe Armstrong, Robert Virding, and Mike
Williams
● WhatsApp
FizzBuzz com processos
Testes
Elixir pode ser usada em IoT.
Elixir roda na máquina virtual de Java.
Por ser uma linguagem voltada à
concorrência, Elixir deve ser boa para
computadores com múltiplos núcleos.
Em Elixir, funções são “cidadãos de segunda
classe”.
iex – Interactive Elixir
Livro que inspirou a criação de
Elixir
Seven Languages in Seven Weeks
2010
Seven Languages in Seven Weeks
● Prolog
● Clojure
● Haskell
● Scala
● Erlang
● Ruby
● Io
Seven Languages in Seven Weeks
● Erlang é uma linguagem funcional
● A sintaxe de Erlang é inspirada no do
Prolog, que usa Paradigma Lógico
● “Foi desenvolvida pela Ericsson para
suportar aplicações distribuídas e
tolerantes a falhas a serem executadas
em um ambiente de tempo real e
ininterrupto” (Wikipédia)
Erlang
Erlang
Erlang
Por que criar Elixir?
Elixir
Seven More Languages...
Seven More Languages...
● Elixir
● Lua
● ...
Testes
O livro que inspirou a criação de Elixir tinha
um capítulo sobre Prolog.
O segundo livro da série tem um capítulo
sobre Elixir e outro sobre Lua.
Uma das vantagens apontadas de Elixir sobre
Erlang é a sintaxe.
Como Aprender Mais?
Palestras
Meetups
Coding Dojos
Eventos (ex.: ElixirConf)
Livros
De preferência, em papel
Podcasts
● Elixir Fountain
● Elixir, a linguagem hipster - Hipsters #48 -
Hipsters Ponto Tech
● Grok Podcast: Série sobre Elixir (2015):
http://www.grokpodcast.com/series/elixir/
● Grok Podcast: Série sobre Erlan g (2011):
http://www.grokpodcast.com/series/erlang/
Screencasts
Elixir Sips, LearnElixir.tv
Palestras Gravadas
Youtube
MOOCs
Cursos em Vídeo
Sites
● Site da linguagem
● Elixir Forum
● Try Elixir http://tryelixir.online/
● Stack Overflow
● Reddit
● … Outros
Esqueci de algo?
Qual meio você gosta de usar para
aprender programação?
- Palestras presenciais
- Meetups
- Coding Dojos
- Eventos
- Livros
- Podcasts
- Screencasts
- Palestras gravadas
- MOOCs
- Sites
- Outros
O que tenho feito?
Investindo tempo
Usando com alunos de Lógica
https://gist.github.com/adolfont/521de03e09c8fac65b192302521f3b5
b
Testes
Valorações Lógicas
(Naive) SAT Solver - DPLL
Antifragilidade
● Desenvolvedores de software não podem
se acomodar (na verdade, ninguém deve)
● Forma de me manter em contato com o
mercado
● Problemas Reais para pesquisa
● Plano B
Projetos
● Mais Ensino de Lógica
● Ecossistema de Elixir (Meetups, Fóruns,
Livros, Podcasts etc.)
● DPLL (SAT Solver) em Elixir
Elixir Jobs
FIM
Adolfo Neto
adolfo@utfpr.edu.br
Formulário para interessados em cursos
mais longos de Elixir:
http://bit.ly/AdolfoElixir

Programando em Elixir