SlideShare une entreprise Scribd logo
1  sur  230
Télécharger pour lire hors ligne
além da
programação funcional
twitter.com/elaine_nw
speakerdeck.com/elainenaomi
Elaine Naomi Watanabe
Desenvolvedora de Software (Plataformatec)
Mestrado em Ciência da Computação (USP)
num passado não tão distante
Python ~ 6 meses
Java ~ 1 ano
C++ ~ 1 ano
PHP ~ 3 anos
no momento
Elixir 2 meses
Ruby 3,5 anos
1996
Sistemas distribuídos
Concorrência e paralelismo
Aplicações intensivas em dados
no meio tempo
no meio tempo
Modelagem de domínio
Modelos transacionais
Bancos de dados distribuídos
NoSQL
no momento
Elixir 2 meses
Ruby 3,5 anos
Compartilhar minha jornada
em uma nova linguagem
Parte I Conhecendo Elixir
Parte II Migrando para Elixir
Parte III Entregando valor com Elixir
vamos nessa?
PARTE I
Conhecendo Elixir
...
Linguagem nova
Paradigma funcional
Linguagem nova
Paradigma funcional
Muitas pessoas de Ruby comentando
José Valim
Co-fundador da Plataformatec
Criador do Elixir
criadora das gems:
ELIXIR BRASIL 2018
...
Erlang
Erlang/OTP
Processos
Macros
Erlang
Erlang/OTP
Processos
Macros
Erlang
Erlang/OTP
Processos
Macros
Erlang
Erlang/OTP
Processos
Supervisors
...
TERMOS MÁGICOS
Entendendo o idioma
Entendendo concorrência
Utilizando todos os cores
Distribuindo minha aplicação
Lidando com falhas
+30 anos
telefonia
Concorrência e distribuição
Alta disponibilidade
Hot code swapping
Erlang: linguagem
Erlang: máquina virtual
Erlang: plataforma
Erlang: linguagem
Erlang: máquina virtual
Erlang: plataforma
Erlang: linguagem
Erlang: máquina virtual
Erlang: plataforma
erlang BEAM
bytecode
BEAM:
Björn's Erlang Abstract Machine
BEAM
BEAM
bytecode
processes
scheduler
CPU Core
processes
scheduler
CPU Core
Erlang/OTP:
Erlang/Open Telecom Platform
erlang
BEAM
process
scheduler
core
process
scheduler
core
Erlang/OTP
erlang
BEAM
process
scheduler
core
process
scheduler
core
Erlang/OTP+ Bibliotecas
+ Princípios de design
ElixirConf 2018 - Erlang OTP What's in the Box - João Britto
youtube.com/watch?v=CozSfI-Zepw
Entendendo o idioma
Entendendo concorrência
Utilizando todos os cores
Distribuindo minha aplicação
Lidando com falhas
BEAM
process
process process
process
process
process
process
process
process
BEAM
process
process process
process
process
process
process
process
process
Entendendo o idioma
Entendendo concorrência
Utilizando todos os cores
Distribuindo minha aplicação
Lidando com falhas
BEAM
process
process process
process
process
process
process
process
process
BEAM
process
process process
process
process
process
process
process
process CPU 2CPU 1
Entendendo o idioma
Entendendo concorrência
Utilizando todos os cores
Distribuindo minha aplicação
Lidando com falhas
BEAM
process
process process
process
process
process
process
process
process 10.0.1.210.0.1.1
BEAM
Entendendo o idioma
Entendendo concorrência
Utilizando todos os cores
Distribuindo minha aplicação
Lidando com falhas
BEAM
process
process process
process
process
process
process
process
process
supervisor
BEAM
process
process process
process
process
process
process
process
process
supervisor
supervisor
BEAM
process
process process
process
process
process
process
process
process
supervisor
supervisor
BEAM
process
process process
process
process
process
process
process
supervisor
supervisor
BEAM
process
process process
process
process
process
process
process
process
supervisor
...
web
ERLANG
ERLANG
Por que não juntar os dois mundos?
...
O MUNDO CONCORRENTE
gotw.ca/publications/concurrency-ddj.htm
2005
Lei de Moore
O número de transistores em
um processador dobrava a
cada 2 anos
1975
Free lunch
O software ficava mais rápido
com o avanço das CPUs
Não era necessário fazer nada
além de atualizar o hardware
Free lunch is over
A partir de ~2003, o clock
speed parou de crescer como
antes. Se continuasse, seria
comum ter CPUs com 10GHz,
por ex.
Em 2005, surgiu o primeiro
processador dual-core
multi-cores
threads
concorrência
paralelismo
etc
multi-cores
threads
concorrência
paralelismo
etc
nem sempre é fácil
Erlang foi criado para ser
distribuído e tolerante a falhas
Erlang foi criado para ser
distribuído e tolerante a falhas
esse foi o objetivo desde o início
blog.whatsapp.com/196/1-million-is-so-2011
ERLANG
2 milhões de conexões
em um único nó
http://stackoverflow.com/questions/1636455/where-is-erlang-used-and-why
ELIXIR + ERLANG VM
BEAM
bytecode
BEAM
bytecode
POR QUE ELIXIR?
PRODUTIVIDADE
-module(hello).
-export([world/0]).
world() -> io:format("Hello, worldn").
hello.erl
ERLANG
$ erl
Erlang/OTP 22 [erts-10.4.3] [source] [64-bit] [smp:4:4]
[ds:4:4:10] [async-threads:1] [hipe]
Eshell V10.4.3 (abort with ^G)
1> c(hello).
{ok,hello}
2> hello:world().
Hello, world
ok
ERLANG
defmodule Hello do
def world do
IO.puts "Hello, world"
end
end
ELIXIR
$ iex
Erlang/OTP 22 [erts-10.4.3] [source] [64-bit] [smp:4:4]
[ds:4:4:10] [async-threads:1] [hipe]
Interactive Elixir (1.8.2) - press Ctrl+C to exit (type h()
ENTER for help)
iex(1)> # copia e cola o código
iex(2)> Hello.world
Hello, world
:ok
ELIXIR
Execução paralela
First-class documentation
Tooling (ExUnit, IEx, Mix)
Hex packages
Code formatter
Compilação
Carregamento
Testes
Tarefas
hex.pm
elixir-lang.org/getting-started
COMPATIBILIDADE
EXTENSIBILIDADE
Macros!
defmacro unless(expr, opts) do
quote do
if(!unquote(expr), unquote(opts))
end
end
unless(is_number(x), do: raise("oops")
ELIXIR
Representar domínios diferentes
defmodule MathTest do
use ExUnit.Case
test "basic operations" do
assert 1 + 1 == 2
end
end
ELIXIR
blog.whatsapp.com/196/1-million-is-so-2011
ERLANG
2 milhões de conexões
em um único nó
2 milhões de conexões
em um único nó
phoenixframework.org/blog/the-road-to-2-million-websocket-connections
ELIXIR
Sintaxe parecida com Ruby
Focado em tolerância a falhas
Paralelismo
Documentação
Até seu relógio tem mais de um processador.
concorrência não é mais a exceção, é regra.
blog.plataformatec.com.br/2017/07/the-fallacies-of-web-application-performance/
2017
Até seu relógio tem mais de um processador.
Concorrência não é mais a exceção, é regra.
blog.plataformatec.com.br/2017/07/the-fallacies-of-web-application-performance/
2017
Programação funcional é um meio para
conseguir distribuir sua aplicação
PARTE II
Migrando para Elixir
Funcional vs POO
Imutabilidade
Funções anônimas
Pattern matching
Recursão
Tail Call Optimization
Pipelines
Lazy evaluation
Funções puras vs impuras
Imutabilidade
Funções anônimas
Pattern matching
Recursão
Tail Call Optimization
Pipelines
Lazy evaluation
Funções puras vs impuras
Aprender a lidar estados explícitos
class Counter
def initialize
@count = 0
end
def increment
@count = @count + 1
end
end
c = Counter.new
c.increment # @count = 1
c.increment # @count = 2
c.increment # @count = 3
OOP
defmodule Counter do
def increment(count) do
count + 1
end
end
Counter.increment(1) # 2
Counter.increment(1) # 2
Counter.increment(1) # 2
Pure FP
Imutabilidade
Transformações de dados
["elixir", "is", "fun"]
|> Enum.join(" ") # "elixir is fun"
|> String.upcase() # "ELIXIR IS FUN"
Pattern matching
case {:ok, "Hello World"} do
{:ok, result} -> result
{:error} -> "Uh oh!"
_ -> "Catch all"
end
case {:ok, "Hello World"} do
{:ok, result} -> result
{:error} -> "Uh oh!"
_ -> "Catch all"
end
case {:ok, "Hello World"} do
{:ok, result} -> result
{:error} -> "Uh oh!"
_ -> "Catch all"
end
case {:error, "Invalid credit card"} do
{:ok, result} -> result
{:error} -> "Oh no!"
_ -> "Catch all"
end
case {:error, "Invalid credit card"} do
{:ok, result} -> result
{:error} -> "Oh no!"
_ -> "Catch all"
end
case {:error, "Invalid credit card"} do
{:ok, result} -> result
{:error} -> "Oh no!"
_ -> "Catch all"
end
case {"unexpected error"} do
{:ok, result} -> result
{:error} -> "Oh no!"
_ -> "Catch all"
end
case {"unexpected error"} do
{:ok, result} -> result
{:error} -> "Oh no!"
_ -> "Catch all"
end
case {"unexpected error"} do
{:ok, result} -> result
{:error} -> "Oh no!"
_ -> "Catch all"
end
Sensação de re-aprender a programar
Sensação de re-aprender tudo
mas é só um pouco
GOTO 2018 - Functional Programming in 40 Minutes - Russ Olsen
youtube.com/watch?v=0if71HOyVjY
Um bom livro para
quem vem do Rails
...
Olhando para minha carreira
Sou apaixonada por Ruby <3
as mais populares
Elixir
Ruby
as mais amadas
Elixir
Ruby
as mais temidas
Elixir
Ruby
as mais procuradas
Elixir
Ruby
as mais bem pagas
Clojure
Scala
Elixir
Ruby
Sou apaixonada por Ruby <3
Elixir lembra Ruby (um pouquinho)
E tem uma comunidade incrível
t.me/elixirbr
plataformatec.com.br/elixir-radar
...
PARTE III
Entregando valor com Elixir
OOP vs FP
Consultar a doc sempre
Rever fundamentos! <3
Estou gostando da jornada
Desenvolvimento web
Sistemas distribuídos
Paralelismo e concorrência
Consigo trabalhar com Ruby/Elixir
OOP + FP
Elixir + Ruby
Amo a comunidade de Ruby
t.me/rubybrasil
...
por que todo mundo
só fala de funcional?
The free lunch is over
Arquiteturas multi-cores
threads
processamento assíncrono
arquitetura orientada a eventos
microsserviços
etc
Concorrência
Processamento distribuído
ESCALABILIDADE
ESCALABILIDADE
Escalar produtos digitais
Escalar times de desenvolvimento
Ser uma empresa de grande impacto
É sobre performance
É sobre alta disponibilidade
É sobre performance
É sobre alta disponibilidade
...
Até seu smartphone tem mais
de um core.
A gente deveria usar todos os cores
Em todos os ambientes
Em dev também
...
Cases de sucesso
Discord, Pinterest,
Moz and Bleacher Report
ELIXIR
techworld.com/apps-wearables/how-elixir-helped-bleacher-report-handle-8x-more-traffic-3653957/
ELIXIR
150 servidores para apenas 5
ELIXIR
The RealReal - Elixir adoption story
youtube.com/watch?v=sTs_4T1ufLY
ELIXIR
Desempenho
Tolerância a Falhas
Produtividade
ELIXIR
PARTE IV: BONUS
Real Time Web
ELIXIR
Exemplo do LiveView
Internet das Coisas
Sistemas embarcados
ELIXIR
...
Mas faz sentido usar elixir pra tudo?
Equipe
Sistemas Legados
Distribuição
Integração
Deploy
Métricas
Depende :p
como começar?
elixir-lang.org
elixirschool.com
Como uma empresa brasileira criou uma linguagem que é usada no
mundo inteiro. O case da Plataformatec com o Elixir - Hugo Baraúna
infoq.com/br/presentations/como-uma-empresa-brasileira-criou-uma-linguagem-que-e-usada-
no-mundo-inteiro/
RubyElixirConfTaiwan 2018: Idioms for building distributed
fault-tolerant applications with Elixir- José Valim
youtube.com/watch?v=01UB1DaX1Uc
Como concorrência funciona em Elixir? - Amanda Sposito
en.eventials.com/locaweb/como-concorrencia-funciona-em-elixir-com-amanda-sposito/
Software Verification - José Valim
en.eventials.com/locaweb/software-verification-com-jose-valim/
GOTO 2018 - SOLID Elixir - Georgina McFadyen
youtube.com/watch?v=rmftOs2BzgU
GOTO 2018 - The Do's and Don'ts of Error Handling - Joe Armstrong
youtube.com/watch?v=TTM_b7EJg5E
RailsConf 2014 - All the Little Things by Sandi Metz
youtube.com/watch?v=8bZh5LMaSmE
Mocks and explicit contracts - José Valim
blog.plataformatec.com.br/2015/10/mocks-and-explicit-contracts/
Elixir, processos e esse tal de OTP - Amanda Sposito
blog.plataformatec.com.br/2018/04/elixir-processos-e-esse-tal-de-otp/
Starting with Elixir, the Study Guide - Rafael Rocha
blog.plataformatec.com.br/2018/11/starting-with-elixir-the-study-guide/
Tail Call Optimization: The Musical!! - Anjana Vakil & Natalia Margolis
youtube.com/watch?v=-PX0BV9hGZY
Inside - Programação Funcional
youtube.com/watch?v=zHzEBLyJvJg
...
Quanto do seu código
é concorrente?
muito obrigada
speakerdeck.com/elainenaomi

Contenu connexe

Tendances

Erlang e Elixir por uma web mais feliz
Erlang e Elixir por uma web mais felizErlang e Elixir por uma web mais feliz
Erlang e Elixir por uma web mais feliz
Bruno Henrique - Garu
 
Python - Introdução Básica
Python - Introdução BásicaPython - Introdução Básica
Python - Introdução Básica
Christian Perone
 
Trabalho de Paradigmas Da Linguagem De Programação - Python
Trabalho de Paradigmas Da Linguagem De Programação - PythonTrabalho de Paradigmas Da Linguagem De Programação - Python
Trabalho de Paradigmas Da Linguagem De Programação - Python
Janderson Campêlo
 
ruby on rails e o mercado
ruby on rails e o mercadoruby on rails e o mercado
ruby on rails e o mercado
elliando dias
 

Tendances (20)

Python Módulo Básico - Introdução a linguagem Python
Python Módulo Básico - Introdução a linguagem PythonPython Módulo Básico - Introdução a linguagem Python
Python Módulo Básico - Introdução a linguagem Python
 
TechEd Brasil 2011: WEB 302 - Presente e futuro da linguagem de programação J...
TechEd Brasil 2011: WEB 302 - Presente e futuro da linguagem de programação J...TechEd Brasil 2011: WEB 302 - Presente e futuro da linguagem de programação J...
TechEd Brasil 2011: WEB 302 - Presente e futuro da linguagem de programação J...
 
Ruby on Rails e o Mercado
Ruby on Rails e o MercadoRuby on Rails e o Mercado
Ruby on Rails e o Mercado
 
A lógica do Python e seus termos
A lógica do Python e seus termosA lógica do Python e seus termos
A lógica do Python e seus termos
 
Scala
ScalaScala
Scala
 
Escalando apps com React e Type Script e SOLID
Escalando apps com React e Type Script e SOLIDEscalando apps com React e Type Script e SOLID
Escalando apps com React e Type Script e SOLID
 
Erlang e Elixir por uma web mais feliz
Erlang e Elixir por uma web mais felizErlang e Elixir por uma web mais feliz
Erlang e Elixir por uma web mais feliz
 
Functional Programming - Scala
Functional Programming - ScalaFunctional Programming - Scala
Functional Programming - Scala
 
Introdução a linguagem Python
Introdução a linguagem PythonIntrodução a linguagem Python
Introdução a linguagem Python
 
Implementação de Aplicações Móveis e Jogos com Python - Aula 1
Implementação de Aplicações Móveis e Jogos com Python - Aula 1Implementação de Aplicações Móveis e Jogos com Python - Aula 1
Implementação de Aplicações Móveis e Jogos com Python - Aula 1
 
TechEd Brasil 2011: DEV 303 - Atualizando suas habilidades de programação com...
TechEd Brasil 2011: DEV 303 - Atualizando suas habilidades de programação com...TechEd Brasil 2011: DEV 303 - Atualizando suas habilidades de programação com...
TechEd Brasil 2011: DEV 303 - Atualizando suas habilidades de programação com...
 
Linguagens Dinamicas na JVM
Linguagens Dinamicas na JVMLinguagens Dinamicas na JVM
Linguagens Dinamicas na JVM
 
Python - Introdução Básica
Python - Introdução BásicaPython - Introdução Básica
Python - Introdução Básica
 
Esta começando a programar para a web? Então começe com Rails
Esta começando a programar para a web? Então começe com RailsEsta começando a programar para a web? Então começe com Rails
Esta começando a programar para a web? Então começe com Rails
 
Palestra Apresentando Python e Suas Aplicações
Palestra Apresentando Python e Suas AplicaçõesPalestra Apresentando Python e Suas Aplicações
Palestra Apresentando Python e Suas Aplicações
 
Segurança em Aplicações Web com PHP
Segurança em Aplicações Web com PHPSegurança em Aplicações Web com PHP
Segurança em Aplicações Web com PHP
 
Trabalho de Paradigmas Da Linguagem De Programação - Python
Trabalho de Paradigmas Da Linguagem De Programação - PythonTrabalho de Paradigmas Da Linguagem De Programação - Python
Trabalho de Paradigmas Da Linguagem De Programação - Python
 
ruby on rails e o mercado
ruby on rails e o mercadoruby on rails e o mercado
ruby on rails e o mercado
 
O futuro do elephante: as promessas do php para 2019
O futuro do elephante: as promessas do php para 2019O futuro do elephante: as promessas do php para 2019
O futuro do elephante: as promessas do php para 2019
 
Csharp
CsharpCsharp
Csharp
 

Similaire à Além da programação funcional com Elixir e Erlang

Aprenda a programar-luciano_ramalho
Aprenda a programar-luciano_ramalhoAprenda a programar-luciano_ramalho
Aprenda a programar-luciano_ramalho
FelipeDi
 
PHP para aplicações Web de grande porte
PHP para aplicações Web  de grande portePHP para aplicações Web  de grande porte
PHP para aplicações Web de grande porte
Felipe Ribeiro
 

Similaire à Além da programação funcional com Elixir e Erlang (20)

O case da Plataformatec com o Elixir - Como uma empresa brasileira criou uma ...
O case da Plataformatec com o Elixir - Como uma empresa brasileira criou uma ...O case da Plataformatec com o Elixir - Como uma empresa brasileira criou uma ...
O case da Plataformatec com o Elixir - Como uma empresa brasileira criou uma ...
 
Porque aprender várias linguagens me tornou um DBA (e desenvolvedor) melhor
Porque aprender várias linguagens me tornou um DBA (e desenvolvedor) melhorPorque aprender várias linguagens me tornou um DBA (e desenvolvedor) melhor
Porque aprender várias linguagens me tornou um DBA (e desenvolvedor) melhor
 
FISL14: Como domar uma fera de 1 TFlop que cabe na palma da sua mão!
FISL14: Como domar uma fera de 1 TFlop que cabe na palma da sua mão!FISL14: Como domar uma fera de 1 TFlop que cabe na palma da sua mão!
FISL14: Como domar uma fera de 1 TFlop que cabe na palma da sua mão!
 
FISL14: Como domar uma fera de 1 TFlop que cabe na palma da sua mão!
FISL14: Como domar uma fera de 1 TFlop que cabe na palma da sua mão!FISL14: Como domar uma fera de 1 TFlop que cabe na palma da sua mão!
FISL14: Como domar uma fera de 1 TFlop que cabe na palma da sua mão!
 
Palestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAPalestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVA
 
Direto das Trincheiras: Boas e más práticas de aplicações Ruby em ambientes c...
Direto das Trincheiras: Boas e más práticas de aplicações Ruby em ambientes c...Direto das Trincheiras: Boas e más práticas de aplicações Ruby em ambientes c...
Direto das Trincheiras: Boas e más práticas de aplicações Ruby em ambientes c...
 
Desenvolvimento ágil de software com Ruby on Rails
Desenvolvimento ágil de software com Ruby on RailsDesenvolvimento ágil de software com Ruby on Rails
Desenvolvimento ágil de software com Ruby on Rails
 
PHP(I-Bim).ppt
PHP(I-Bim).pptPHP(I-Bim).ppt
PHP(I-Bim).ppt
 
Ruby & Rails
Ruby & RailsRuby & Rails
Ruby & Rails
 
Palestra Faculdade Lourenço Filho
Palestra Faculdade Lourenço FilhoPalestra Faculdade Lourenço Filho
Palestra Faculdade Lourenço Filho
 
Conheça ROP - Programação orientada e trilhos​
Conheça ROP - Programação orientada e trilhos​Conheça ROP - Programação orientada e trilhos​
Conheça ROP - Programação orientada e trilhos​
 
Desenvolvimento de aplicações embarcadas utilizando Python
Desenvolvimento de aplicações embarcadas utilizando PythonDesenvolvimento de aplicações embarcadas utilizando Python
Desenvolvimento de aplicações embarcadas utilizando Python
 
Nodejs - A performance que eu sempre quis ter
Nodejs - A performance que eu sempre quis terNodejs - A performance que eu sempre quis ter
Nodejs - A performance que eu sempre quis ter
 
Aprenda a programar-luciano_ramalho
Aprenda a programar-luciano_ramalhoAprenda a programar-luciano_ramalho
Aprenda a programar-luciano_ramalho
 
Aprenda a programar-luciano_ramalho
Aprenda a programar-luciano_ramalhoAprenda a programar-luciano_ramalho
Aprenda a programar-luciano_ramalho
 
JavaScript: agora é sério
JavaScript: agora é sérioJavaScript: agora é sério
JavaScript: agora é sério
 
Javascript
JavascriptJavascript
Javascript
 
#DNAD15 - Diminuindo sofrimento com código legado de linguagens não mainstreams
#DNAD15  - Diminuindo sofrimento com código legado de linguagens não mainstreams#DNAD15  - Diminuindo sofrimento com código legado de linguagens não mainstreams
#DNAD15 - Diminuindo sofrimento com código legado de linguagens não mainstreams
 
PHP para aplicações Web de grande porte
PHP para aplicações Web  de grande portePHP para aplicações Web  de grande porte
PHP para aplicações Web de grande porte
 
Palestra: Computação Paralela na SECOMP 2013 (UNIFEI)
Palestra: Computação Paralela na SECOMP 2013 (UNIFEI)Palestra: Computação Paralela na SECOMP 2013 (UNIFEI)
Palestra: Computação Paralela na SECOMP 2013 (UNIFEI)
 

Plus de Elaine Naomi

Dealing with a search engine in your application - a Solr approach for beginners
Dealing with a search engine in your application - a Solr approach for beginnersDealing with a search engine in your application - a Solr approach for beginners
Dealing with a search engine in your application - a Solr approach for beginners
Elaine Naomi
 
Um Método para Paralelização Automática de Workflows Intensivos em Dados
Um Método para Paralelização Automática de Workflows Intensivos em DadosUm Método para Paralelização Automática de Workflows Intensivos em Dados
Um Método para Paralelização Automática de Workflows Intensivos em Dados
Elaine Naomi
 
Algoritmos para economia de energia no escalonamento de workflows em nuvens c...
Algoritmos para economia de energia no escalonamento de workflows em nuvens c...Algoritmos para economia de energia no escalonamento de workflows em nuvens c...
Algoritmos para economia de energia no escalonamento de workflows em nuvens c...
Elaine Naomi
 

Plus de Elaine Naomi (18)

Design de aplicações orientadas a objeto
Design de aplicações orientadas a objetoDesign de aplicações orientadas a objeto
Design de aplicações orientadas a objeto
 
Sobre code smells, refactoring e design: como SOLID pode te ajudar no dia a dia
Sobre code smells, refactoring e design: como SOLID pode te ajudar no dia a diaSobre code smells, refactoring e design: como SOLID pode te ajudar no dia a dia
Sobre code smells, refactoring e design: como SOLID pode te ajudar no dia a dia
 
Hacking Evening - Liskov Substitution Principle
Hacking Evening - Liskov Substitution PrincipleHacking Evening - Liskov Substitution Principle
Hacking Evening - Liskov Substitution Principle
 
Code Smells: o que eles dizem sobre seu código?
Code Smells: o que eles dizem sobre seu código?Code Smells: o que eles dizem sobre seu código?
Code Smells: o que eles dizem sobre seu código?
 
Guru SP: Decodificando o code review
Guru SP: Decodificando o code reviewGuru SP: Decodificando o code review
Guru SP: Decodificando o code review
 
Bootcamp de Rails - CaquiCoders Meetup
Bootcamp de Rails - CaquiCoders MeetupBootcamp de Rails - CaquiCoders Meetup
Bootcamp de Rails - CaquiCoders Meetup
 
GURU SP - Design de aplicações orientadas a objeto
GURU SP - Design de aplicações orientadas a objetoGURU SP - Design de aplicações orientadas a objeto
GURU SP - Design de aplicações orientadas a objeto
 
TDC SP 2019 - Decodificando o code review
TDC SP 2019 - Decodificando o code reviewTDC SP 2019 - Decodificando o code review
TDC SP 2019 - Decodificando o code review
 
Code review: o que isso diz sobre a cultura dos times de desenvolvimento?
Code review: o que isso diz sobre a cultura dos times de desenvolvimento?Code review: o que isso diz sobre a cultura dos times de desenvolvimento?
Code review: o que isso diz sobre a cultura dos times de desenvolvimento?
 
Explorando o Paralelismo em Workflows Intensivos em Dados com o Uso de Anotaç...
Explorando o Paralelismo em Workflows Intensivos em Dados com o Uso de Anotaç...Explorando o Paralelismo em Workflows Intensivos em Dados com o Uso de Anotaç...
Explorando o Paralelismo em Workflows Intensivos em Dados com o Uso de Anotaç...
 
Uso de Anotações Semânticas para Exploração de Paralelismo em Workflows Inten...
Uso de Anotações Semânticas para Exploração de Paralelismo em Workflows Inten...Uso de Anotações Semânticas para Exploração de Paralelismo em Workflows Inten...
Uso de Anotações Semânticas para Exploração de Paralelismo em Workflows Inten...
 
Dealing with a search engine in your application - a Solr approach for beginners
Dealing with a search engine in your application - a Solr approach for beginnersDealing with a search engine in your application - a Solr approach for beginners
Dealing with a search engine in your application - a Solr approach for beginners
 
Um Método para Paralelização Automática de Workflows Intensivos em Dados
Um Método para Paralelização Automática de Workflows Intensivos em DadosUm Método para Paralelização Automática de Workflows Intensivos em Dados
Um Método para Paralelização Automática de Workflows Intensivos em Dados
 
O que é BIG DATA e como pode influenciar nossas vidas
O que é BIG DATA e como pode influenciar nossas vidasO que é BIG DATA e como pode influenciar nossas vidas
O que é BIG DATA e como pode influenciar nossas vidas
 
Introdução ao MongoDB
Introdução ao MongoDBIntrodução ao MongoDB
Introdução ao MongoDB
 
Workflows científicos
Workflows científicosWorkflows científicos
Workflows científicos
 
Algoritmos para economia de energia no escalonamento de workflows em nuvens c...
Algoritmos para economia de energia no escalonamento de workflows em nuvens c...Algoritmos para economia de energia no escalonamento de workflows em nuvens c...
Algoritmos para economia de energia no escalonamento de workflows em nuvens c...
 
Qt Apresentação
Qt ApresentaçãoQt Apresentação
Qt Apresentação
 

Além da programação funcional com Elixir e Erlang