Slide 1

Slide 1 text

além da programação funcional

Slide 2

Slide 2 text

twitter.com/elaine_nw speakerdeck.com/elainenaomi Elaine Naomi Watanabe Desenvolvedora de Software (Plataformatec) Mestrado em Ciência da Computação (USP)

Slide 3

Slide 3 text

num passado não tão distante Python ~ 6 meses Java ~ 1 ano C++ ~ 1 ano PHP ~ 3 anos

Slide 4

Slide 4 text

no momento Elixir 2 meses Ruby 3,5 anos

Slide 5

Slide 5 text

1996

Slide 6

Slide 6 text

Sistemas distribuídos Concorrência e paralelismo Aplicações intensivas em dados no meio tempo

Slide 7

Slide 7 text

no meio tempo Modelagem de domínio Modelos transacionais Bancos de dados distribuídos NoSQL

Slide 8

Slide 8 text

no momento Elixir 2 meses Ruby 3,5 anos

Slide 9

Slide 9 text

No content

Slide 10

Slide 10 text

Compartilhar minha jornada em uma nova linguagem

Slide 11

Slide 11 text

Parte I Conhecendo Elixir Parte II Migrando para Elixir Parte III Entregando valor com Elixir

Slide 12

Slide 12 text

vamos nessa?

Slide 13

Slide 13 text

PARTE I

Slide 14

Slide 14 text

Conhecendo Elixir

Slide 15

Slide 15 text

No content

Slide 16

Slide 16 text

No content

Slide 17

Slide 17 text

...

Slide 18

Slide 18 text

Linguagem nova Paradigma funcional

Slide 19

Slide 19 text

Linguagem nova Paradigma funcional Muitas pessoas de Ruby comentando

Slide 20

Slide 20 text

José Valim Co-fundador da Plataformatec Criador do Elixir

Slide 21

Slide 21 text

No content

Slide 22

Slide 22 text

criadora das gems:

Slide 23

Slide 23 text

ELIXIR BRASIL 2018

Slide 24

Slide 24 text

...

Slide 25

Slide 25 text

No content

Slide 26

Slide 26 text

Erlang Erlang/OTP Processos Macros

Slide 27

Slide 27 text

Erlang Erlang/OTP Processos Macros

Slide 28

Slide 28 text

Erlang Erlang/OTP Processos Macros

Slide 29

Slide 29 text

Erlang Erlang/OTP Processos Supervisors

Slide 30

Slide 30 text

No content

Slide 31

Slide 31 text

...

Slide 32

Slide 32 text

TERMOS MÁGICOS

Slide 33

Slide 33 text

Entendendo o idioma Entendendo concorrência Utilizando todos os cores Distribuindo minha aplicação Lidando com falhas

Slide 34

Slide 34 text

No content

Slide 35

Slide 35 text

+30 anos

Slide 36

Slide 36 text

telefonia

Slide 37

Slide 37 text

Concorrência e distribuição Alta disponibilidade Hot code swapping

Slide 38

Slide 38 text

Erlang: linguagem Erlang: máquina virtual Erlang: plataforma

Slide 39

Slide 39 text

Erlang: linguagem Erlang: máquina virtual Erlang: plataforma

Slide 40

Slide 40 text

Erlang: linguagem Erlang: máquina virtual Erlang: plataforma

Slide 41

Slide 41 text

erlang BEAM bytecode

Slide 42

Slide 42 text

BEAM: Björn's Erlang Abstract Machine

Slide 43

Slide 43 text

BEAM BEAM bytecode processes scheduler CPU Core processes scheduler CPU Core

Slide 44

Slide 44 text

Erlang/OTP: Erlang/Open Telecom Platform

Slide 45

Slide 45 text

erlang BEAM process scheduler core process scheduler core Erlang/OTP

Slide 46

Slide 46 text

erlang BEAM process scheduler core process scheduler core Erlang/OTP + Bibliotecas + Princípios de design

Slide 47

Slide 47 text

ElixirConf 2018 - Erlang OTP What's in the Box - João Britto youtube.com/watch?v=CozSfI-Zepw

Slide 48

Slide 48 text

Entendendo o idioma Entendendo concorrência Utilizando todos os cores Distribuindo minha aplicação Lidando com falhas

Slide 49

Slide 49 text

BEAM process process process process process process process process process

Slide 50

Slide 50 text

No content

Slide 51

Slide 51 text

No content

Slide 52

Slide 52 text

BEAM process process process process process process process process process

Slide 53

Slide 53 text

Entendendo o idioma Entendendo concorrência Utilizando todos os cores Distribuindo minha aplicação Lidando com falhas

Slide 54

Slide 54 text

BEAM process process process process process process process process process

Slide 55

Slide 55 text

BEAM process process process process process process process process process CPU 2 CPU 1

Slide 56

Slide 56 text

Entendendo o idioma Entendendo concorrência Utilizando todos os cores Distribuindo minha aplicação Lidando com falhas

Slide 57

Slide 57 text

BEAM process process process process process process process process process 10.0.1.2 10.0.1.1 BEAM

Slide 58

Slide 58 text

Entendendo o idioma Entendendo concorrência Utilizando todos os cores Distribuindo minha aplicação Lidando com falhas

Slide 59

Slide 59 text

BEAM process process process process process process process process process

Slide 60

Slide 60 text

supervisor BEAM process process process process process process process process process supervisor

Slide 61

Slide 61 text

supervisor BEAM process process process process process process process process process supervisor

Slide 62

Slide 62 text

supervisor BEAM process process process process process process process process supervisor

Slide 63

Slide 63 text

supervisor BEAM process process process process process process process process process supervisor

Slide 64

Slide 64 text

...

Slide 65

Slide 65 text

web

Slide 66

Slide 66 text

No content

Slide 67

Slide 67 text

No content

Slide 68

Slide 68 text

No content

Slide 69

Slide 69 text

No content

Slide 70

Slide 70 text

No content

Slide 71

Slide 71 text

ERLANG

Slide 72

Slide 72 text

ERLANG

Slide 73

Slide 73 text

Por que não juntar os dois mundos?

Slide 74

Slide 74 text

...

Slide 75

Slide 75 text

O MUNDO CONCORRENTE

Slide 76

Slide 76 text

gotw.ca/publications/concurrency-ddj.htm 2005

Slide 77

Slide 77 text

Lei de Moore O número de transistores em um processador dobrava a cada 2 anos 1975

Slide 78

Slide 78 text

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

Slide 79

Slide 79 text

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

Slide 80

Slide 80 text

multi-cores threads concorrência paralelismo etc

Slide 81

Slide 81 text

multi-cores threads concorrência paralelismo etc nem sempre é fácil

Slide 82

Slide 82 text

Erlang foi criado para ser distribuído e tolerante a falhas

Slide 83

Slide 83 text

Erlang foi criado para ser distribuído e tolerante a falhas esse foi o objetivo desde o início

Slide 84

Slide 84 text

blog.whatsapp.com/196/1-million-is-so-2011 ERLANG 2 milhões de conexões em um único nó

Slide 85

Slide 85 text

http://stackoverflow.com/questions/1636455/where-is-erlang-used-and-why

Slide 86

Slide 86 text

ELIXIR + ERLANG VM

Slide 87

Slide 87 text

BEAM bytecode

Slide 88

Slide 88 text

BEAM bytecode

Slide 89

Slide 89 text

No content

Slide 90

Slide 90 text

POR QUE ELIXIR?

Slide 91

Slide 91 text

No content

Slide 92

Slide 92 text

PRODUTIVIDADE

Slide 93

Slide 93 text

-module(hello). -export([world/0]). world() -> io:format("Hello, world\n"). hello.erl ERLANG

Slide 94

Slide 94 text

$ 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

Slide 95

Slide 95 text

defmodule Hello do def world do IO.puts "Hello, world" end end ELIXIR

Slide 96

Slide 96 text

$ 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

Slide 97

Slide 97 text

Execução paralela

Slide 98

Slide 98 text

First-class documentation Tooling (ExUnit, IEx, Mix) Hex packages Code formatter

Slide 99

Slide 99 text

Compilação Carregamento Testes Tarefas

Slide 100

Slide 100 text

No content

Slide 101

Slide 101 text

No content

Slide 102

Slide 102 text

hex.pm

Slide 103

Slide 103 text

elixir-lang.org/getting-started

Slide 104

Slide 104 text

COMPATIBILIDADE

Slide 105

Slide 105 text

EXTENSIBILIDADE

Slide 106

Slide 106 text

Macros!

Slide 107

Slide 107 text

defmacro unless(expr, opts) do quote do if(!unquote(expr), unquote(opts)) end end unless(is_number(x), do: raise("oops") ELIXIR

Slide 108

Slide 108 text

Representar domínios diferentes

Slide 109

Slide 109 text

defmodule MathTest do use ExUnit.Case test "basic operations" do assert 1 + 1 == 2 end end ELIXIR

Slide 110

Slide 110 text

No content

Slide 111

Slide 111 text

blog.whatsapp.com/196/1-million-is-so-2011 ERLANG 2 milhões de conexões em um único nó

Slide 112

Slide 112 text

2 milhões de conexões em um único nó phoenixframework.org/blog/the-road-to-2-million-websocket-connections ELIXIR

Slide 113

Slide 113 text

Sintaxe parecida com Ruby Focado em tolerância a falhas Paralelismo Documentação

Slide 114

Slide 114 text

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

Slide 115

Slide 115 text

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

Slide 116

Slide 116 text

Programação funcional é um meio para conseguir distribuir sua aplicação

Slide 117

Slide 117 text

PARTE II

Slide 118

Slide 118 text

Migrando para Elixir

Slide 119

Slide 119 text

No content

Slide 120

Slide 120 text

Funcional vs POO

Slide 121

Slide 121 text

Imutabilidade Funções anônimas Pattern matching Recursão Tail Call Optimization Pipelines Lazy evaluation Funções puras vs impuras

Slide 122

Slide 122 text

Imutabilidade Funções anônimas Pattern matching Recursão Tail Call Optimization Pipelines Lazy evaluation Funções puras vs impuras

Slide 123

Slide 123 text

Aprender a lidar estados explícitos

Slide 124

Slide 124 text

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

Slide 125

Slide 125 text

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

Slide 126

Slide 126 text

Imutabilidade Transformações de dados

Slide 127

Slide 127 text

["elixir", "is", "fun"] |> Enum.join(" ") # "elixir is fun" |> String.upcase() # "ELIXIR IS FUN"

Slide 128

Slide 128 text

Pattern matching

Slide 129

Slide 129 text

case {:ok, "Hello World"} do {:ok, result} -> result {:error} -> "Uh oh!" _ -> "Catch all" end

Slide 130

Slide 130 text

case {:ok, "Hello World"} do {:ok, result} -> result {:error} -> "Uh oh!" _ -> "Catch all" end

Slide 131

Slide 131 text

case {:ok, "Hello World"} do {:ok, result} -> result {:error} -> "Uh oh!" _ -> "Catch all" end

Slide 132

Slide 132 text

case {:error, "Invalid credit card"} do {:ok, result} -> result {:error} -> "Oh no!" _ -> "Catch all" end

Slide 133

Slide 133 text

case {:error, "Invalid credit card"} do {:ok, result} -> result {:error} -> "Oh no!" _ -> "Catch all" end

Slide 134

Slide 134 text

case {:error, "Invalid credit card"} do {:ok, result} -> result {:error} -> "Oh no!" _ -> "Catch all" end

Slide 135

Slide 135 text

case {"unexpected error"} do {:ok, result} -> result {:error} -> "Oh no!" _ -> "Catch all" end

Slide 136

Slide 136 text

case {"unexpected error"} do {:ok, result} -> result {:error} -> "Oh no!" _ -> "Catch all" end

Slide 137

Slide 137 text

case {"unexpected error"} do {:ok, result} -> result {:error} -> "Oh no!" _ -> "Catch all" end

Slide 138

Slide 138 text

Sensação de re-aprender a programar

Slide 139

Slide 139 text

Sensação de re-aprender tudo mas é só um pouco

Slide 140

Slide 140 text

GOTO 2018 - Functional Programming in 40 Minutes - Russ Olsen youtube.com/watch?v=0if71HOyVjY

Slide 141

Slide 141 text

Um bom livro para quem vem do Rails

Slide 142

Slide 142 text

...

Slide 143

Slide 143 text

Olhando para minha carreira

Slide 144

Slide 144 text

Sou apaixonada por Ruby <3

Slide 145

Slide 145 text

No content

Slide 146

Slide 146 text

as mais populares

Slide 147

Slide 147 text

No content

Slide 148

Slide 148 text

Elixir

Slide 149

Slide 149 text

Ruby

Slide 150

Slide 150 text

as mais amadas

Slide 151

Slide 151 text

No content

Slide 152

Slide 152 text

Elixir

Slide 153

Slide 153 text

Ruby

Slide 154

Slide 154 text

as mais temidas

Slide 155

Slide 155 text

Elixir

Slide 156

Slide 156 text

Ruby

Slide 157

Slide 157 text

as mais procuradas

Slide 158

Slide 158 text

Elixir

Slide 159

Slide 159 text

Ruby

Slide 160

Slide 160 text

as mais bem pagas

Slide 161

Slide 161 text

Clojure

Slide 162

Slide 162 text

Scala

Slide 163

Slide 163 text

Elixir

Slide 164

Slide 164 text

Ruby

Slide 165

Slide 165 text

Sou apaixonada por Ruby <3 Elixir lembra Ruby (um pouquinho)

Slide 166

Slide 166 text

E tem uma comunidade incrível

Slide 167

Slide 167 text

No content

Slide 168

Slide 168 text

t.me/elixirbr

Slide 169

Slide 169 text

No content

Slide 170

Slide 170 text

plataformatec.com.br/elixir-radar

Slide 171

Slide 171 text

...

Slide 172

Slide 172 text

PARTE III

Slide 173

Slide 173 text

Entregando valor com Elixir

Slide 174

Slide 174 text

No content

Slide 175

Slide 175 text

OOP vs FP Consultar a doc sempre

Slide 176

Slide 176 text

Rever fundamentos! <3

Slide 177

Slide 177 text

Estou gostando da jornada Desenvolvimento web Sistemas distribuídos Paralelismo e concorrência

Slide 178

Slide 178 text

Consigo trabalhar com Ruby/Elixir OOP + FP

Slide 179

Slide 179 text

Elixir + Ruby

Slide 180

Slide 180 text

Amo a comunidade de Ruby

Slide 181

Slide 181 text

No content

Slide 182

Slide 182 text

t.me/rubybrasil

Slide 183

Slide 183 text

...

Slide 184

Slide 184 text

por que todo mundo só fala de funcional?

Slide 185

Slide 185 text

No content

Slide 186

Slide 186 text

No content

Slide 187

Slide 187 text

No content

Slide 188

Slide 188 text

No content

Slide 189

Slide 189 text

The free lunch is over

Slide 190

Slide 190 text

Arquiteturas multi-cores

Slide 191

Slide 191 text

threads processamento assíncrono arquitetura orientada a eventos microsserviços etc

Slide 192

Slide 192 text

Concorrência Processamento distribuído

Slide 193

Slide 193 text

ESCALABILIDADE

Slide 194

Slide 194 text

ESCALABILIDADE

Slide 195

Slide 195 text

Escalar produtos digitais Escalar times de desenvolvimento Ser uma empresa de grande impacto

Slide 196

Slide 196 text

É sobre performance É sobre alta disponibilidade

Slide 197

Slide 197 text

É sobre performance É sobre alta disponibilidade

Slide 198

Slide 198 text

...

Slide 199

Slide 199 text

Até seu smartphone tem mais de um core.

Slide 200

Slide 200 text

A gente deveria usar todos os cores Em todos os ambientes Em dev também

Slide 201

Slide 201 text

...

Slide 202

Slide 202 text

Cases de sucesso

Slide 203

Slide 203 text

Discord, Pinterest, Moz and Bleacher Report ELIXIR

Slide 204

Slide 204 text

techworld.com/apps-wearables/how-elixir-helped-bleacher-report-handle-8x-more-traffic-3653957/ ELIXIR

Slide 205

Slide 205 text

150 servidores para apenas 5 ELIXIR

Slide 206

Slide 206 text

The RealReal - Elixir adoption story youtube.com/watch?v=sTs_4T1ufLY ELIXIR

Slide 207

Slide 207 text

Desempenho Tolerância a Falhas Produtividade ELIXIR

Slide 208

Slide 208 text

PARTE IV: BONUS

Slide 209

Slide 209 text

No content

Slide 210

Slide 210 text

Real Time Web

Slide 211

Slide 211 text

ELIXIR

Slide 212

Slide 212 text

Exemplo do LiveView

Slide 213

Slide 213 text

Internet das Coisas

Slide 214

Slide 214 text

Sistemas embarcados ELIXIR

Slide 215

Slide 215 text

...

Slide 216

Slide 216 text

Mas faz sentido usar elixir pra tudo?

Slide 217

Slide 217 text

Equipe Sistemas Legados Distribuição Integração Deploy Métricas

Slide 218

Slide 218 text

Depende :p

Slide 219

Slide 219 text

como começar?

Slide 220

Slide 220 text

elixir-lang.org

Slide 221

Slide 221 text

elixirschool.com

Slide 222

Slide 222 text

No content

Slide 223

Slide 223 text

No content

Slide 224

Slide 224 text

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/

Slide 225

Slide 225 text

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

Slide 226

Slide 226 text

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

Slide 227

Slide 227 text

Inside - Programação Funcional youtube.com/watch?v=zHzEBLyJvJg

Slide 228

Slide 228 text

...

Slide 229

Slide 229 text

Quanto do seu código é concorrente?

Slide 230

Slide 230 text

muito obrigada speakerdeck.com/elainenaomi