Return to Video

RailsConf 2014 - All the Little Things by Sandi Metz

  • 0:01 - 0:17
    (musica de jazz)
  • 0:17 - 0:20
    Sandi: Então você pensaria que escrever
  • 0:20 - 0:23
    código orientado a objetos
    fosse difícil.
  • 0:23 - 0:27
    Tudo que precisa fazer é
    olhas nossos apps, certo?
  • 0:27 - 0:30
    Temos boas intenções,
    e quase sempre escrevemos
  • 0:30 - 0:35
    códigos que podemos vir a
    odiar.
  • 0:35 - 0:37
    E quando mais eu penso
    nisso, vejo que,
  • 0:37 - 0:39
    meu trabalho é pensar em
    como escrever código melhor.
  • 0:39 - 0:43
    E quanto mais penso,
    mais acho que
  • 0:43 - 0:47
    todos os problemas, tem uma
    mesma solução simples
  • 0:47 - 0:49
    e agora quando pessoas me perguntam
  • 0:49 - 0:51
    como escrever código
    orientado a objetos,
  • 0:51 - 0:55
    eu dou-lhes uma pequena dica.
  • 0:55 - 0:58
    Eu digo "criar coisas menores", é só isso.
  • 0:58 - 1:01
    Criar classes menores, métodos menores,
  • 1:01 - 1:05
    e deixar-lhes saber o mínimo possível
    um sobre o outro.
  • 1:05 - 1:07
    E ultimamente estou em uma missão
  • 1:07 - 1:08
    Tenho tido essa obsessão
    nos últimos meses,
  • 1:08 - 1:10
    e é sobre condicionais.
  • 1:10 - 1:11
    Tem muito código por aí
  • 1:11 - 1:13
    com condicionais feios nele,
  • 1:13 - 1:16
    e ando me questionando
    quando eu deveria substituir
  • 1:16 - 1:18
    trocar condicionais por objetos pequenos
  • 1:18 - 1:20
    e como eu deveria fazer isso
  • 1:20 - 1:23
    e o que aconteceria com meu código
    se eu fizesse isso.
  • 1:23 - 1:24
    Eu estava muito confiante
    em Miami em novembro
  • 1:24 - 1:27
    e eu tive essa obsessão em Jim Weirich,
  • 1:27 - 1:30
    quem alguns de vocês
    provavelmente conheceram,
  • 1:30 - 1:33
    e ele me direcionou para o 'Gilded Rose'.
  • 1:33 - 1:35
    Isso é um 'Kata',
    aparentemente é
  • 1:35 - 1:37
    muito conhecido,
    mas eu não saio muito,
  • 1:37 - 1:39
    então eu
    (risos)
  • 1:39 - 1:41
    nunca tinha ouvido disso.
  • 1:41 - 1:44
    É tão famoso que você pode
    simplesmente botar no Google
  • 1:44 - 1:47
    e achar uma explicação do problema,
    mas eu não fiz isso.
  • 1:47 - 1:48
    Eu queria tratar esse
    problema como
  • 1:48 - 1:50
    se fosse um problema de produção mesmo,
  • 1:50 - 1:52
    e que minha única informação
  • 1:52 - 1:54
    fosse o teste e o código.
  • 1:54 - 1:56
    Então eu olhei para o dele.
  • 1:56 - 1:58
    Eu baixei o repositório dele,
  • 1:58 - 1:59
    e olhei para o problema,
  • 1:59 - 2:02
    e tinha tanta interesse nele
    que tirei ideias
  • 2:02 - 2:07
    da minha palestra de hoje.
  • 2:07 - 2:10
    Eu alterei o código dele só um pouco,
  • 2:10 - 2:11
    mas só para ser
    mais fácil de falar
  • 2:11 - 2:14
    Isso realmente é a 'Gilded Rose Kata',
  • 2:14 - 2:15
    então, vamos.
  • 2:15 - 2:17
    Tem a classe 'Gilded Rose', e essa
    é a estrutura
  • 2:17 - 2:20
    Ela tem atributos para nome, qualidade
    e dias restantes
  • 2:20 - 2:22
    ela initializa valores,
  • 2:22 - 2:25
    e tem um método "tick".
  • 2:25 - 2:28
    Agora aqui tem o método 'tick',
    não, na verdade
  • 2:28 - 2:33
    isso é apenas a primeira metade dele,
    aqui tem o resto.
  • 2:33 - 2:34
    Eu sei que não dá para ler isso
  • 2:34 - 2:36
    Nem tente, mesmo se conseguir, ok?
  • 2:36 - 2:37
    Aqui é o método inteiro.
  • 2:37 - 2:39
    Eu só quero que vocês tenham uma ideia
  • 2:39 - 2:40
    do tamanho e forma dele.
  • 2:40 - 2:43
    É um 'if' de 43 linhas.
  • 2:43 - 2:45
    E para mim isso é muito, muito difícil,
  • 2:45 - 2:49
    mas eu sou conhecida por
    ser boolean-impedida.
  • 2:49 - 2:50
    (risos)
  • 2:50 - 2:52
    Eu sei que é subjetivo o meu senso de
    quão dificil
  • 2:52 - 2:55
    de entender algo.
    E isso possivelmente é errado
  • 2:55 - 2:57
    então em vez disso eu usei algumas métricas.
  • 2:57 - 3:01
    Analisei ele usando a métrica "Flog".
  • 3:01 - 3:02
    "Flog" é uma métrica.
    Ok, o que é uma métrica?
  • 3:02 - 3:06
    Uma métrica é uma ideia "crowdsource" sobre alguma coisa.
  • 3:06 - 3:10
    Ok? Eu tenho minha própria opinião
    sobre quanto isso é complexo,
  • 3:10 - 3:13
    mas eu posso usar a sabedoria-da-multidão
    dessa métrica,
  • 3:13 - 3:15
    a métrica Flog, que anota....
  • 3:15 - 3:17
    É uma métrica ABC, então anota atribuições,
  • 3:17 - 3:19
    'branches', e condicionais.
  • 3:19 - 3:21
    Ela simplesmente conta coisas e soma-las.
  • 3:21 - 3:22
    Pontuações maiores são piores.
  • 3:22 - 3:24
    Elas indicam código mais complexo,
  • 3:24 - 3:25
    código que vai ser mais difícil
  • 3:25 - 3:27
    a entender e raciocinar.
  • 3:27 - 3:30
    Então, Flog disse que a classe GildedRose registrou 50,
  • 3:30 - 3:34
    e aquele método "tick" ganhou 45.
  • 3:34 - 3:36
    (lamentação)
    Dói, né?
  • 3:36 - 3:38
    Então Flog disse que é complicado,
  • 3:38 - 3:40
    mas antes de continuar eu quero introduzir
  • 3:40 - 3:44
    uma métrica muito subjetiva
    sobre complexidade.
  • 3:44 - 3:46
    Então, passo muito tempo esses dias
  • 3:46 - 3:51
    indo para lugares e olhando código
    sobre qual eu não sei nada.
  • 3:51 - 3:53
    Pessoas me ligam, e vou pro escritório deles,
  • 3:53 - 3:54
    e passo alguns dias.
  • 3:54 - 3:56
    E como você poderia imaginar,
  • 3:56 - 4:00
    ninguém me liga se as coisas
    estão indo bem.
  • 4:00 - 4:02
    (risos)
    Né?
  • 4:02 - 4:04
    E quando eu chegar, eles não me pedem
  • 4:04 - 4:07
    para olhar o código do
    qual eles tem orgulho.
  • 4:07 - 4:09
    Eles me pedem para olhar as
    partes mais hediondas,
  • 4:09 - 4:11
    as coisas que tem contextos meio longos
  • 4:11 - 4:14
    e complexos na história.
  • 4:14 - 4:17
    Código que tem saído completamente
    do controle.
  • 4:17 - 4:20
    E as explicações não são apenas
    longas e confusas
  • 4:20 - 4:22
    porque o problema é difícil,
  • 4:22 - 4:22
    mas eles fazem aquilo que
    todos nós fazemos,
  • 4:22 - 4:25
    você sabe aquilo que faz quando precisa
  • 4:25 - 4:26
    explicar um pouco de código que você escreveu
  • 4:26 - 4:28
    de qual você tem vergonha?
  • 4:28 - 4:30
    Você não apenas explica como funciona.
  • 4:30 - 4:32
    Você se sente obrigado a explicar
  • 4:32 - 4:35
    todos os motivos por ter ficado assim.
    (risos) Né?
  • 4:35 - 4:37
    Podem rir. Eu faço. Eu sei que vocês
    também fazem, né?
  • 4:37 - 4:39
    Simplesmente dói. Odiamos isso.
  • 4:39 - 4:40
    Então essas explicações são longas
  • 4:40 - 4:41
    e confusas e tem muitas
  • 4:41 - 4:44
    informações paralelas
  • 4:44 - 4:46
    E chega um ponto, eu entendo...
  • 4:46 - 4:47
    mas chega um ponto durante toda
  • 4:47 - 4:50
    explicação quando eu começo a
    me sentir igual aquele cachorro,
  • 4:50 - 4:55
    Ginger, no desenho do Gary Larson.
  • 4:55 - 4:56
    quando começa a virar "blah, blah, blah,"
  • 4:56 - 4:58
    Sandi "blah, blah, blah"
    (risos)
  • 4:58 - 5:00
    E de repente eu volto
  • 5:00 - 5:02
    para ouvir eles dizendo
  • 5:02 - 5:04
    então, o que você acha que
    deveríamos fazer
  • 5:04 - 5:07
    sobre essa linha de código?
    (risos)
  • 5:07 - 5:09
    E antigamente me assustava muito
  • 5:09 - 5:11
    Senti como se precisasse entender tudo
  • 5:11 - 5:13
    para poder ajudar com alguma coisa.
  • 5:13 - 5:14
    Mas depois de algumas viagens,
  • 5:14 - 5:16
    eu percebi que tem algo muito
  • 5:16 - 5:17
    simples que poderia fazer para me ajudar
  • 5:17 - 5:20
    a identificar o que eles poderiam
    se beneficiar modificando.
  • 5:20 - 5:24
    Eu chamo isso do "teste vesgo".
    (risos)
  • 5:24 - 5:26
    É assim que funciona:
  • 5:26 - 5:29
    Aperte os olhos, se incline
  • 5:29 - 5:31
    e olhe o código.
  • 5:31 - 5:36
    Buscamos por mudanças
    na forma (risos)
  • 5:36 - 5:40
    e mudanças de cor.
  • 5:41 - 5:44
    Mudanças da forma quer dizer
    que temos condicionais aninhados
  • 5:44 - 5:46
    e são difíceis de racionalizar.
  • 5:46 - 5:49
    Mudanças de cor dizem que seu código está
  • 5:49 - 5:50
    em níveis diferentes de abstração,
  • 5:50 - 5:52
    e querem dizer que a história que conta
  • 5:52 - 5:54
    vai ser difícil a seguir.
  • 5:54 - 5:56
    Agora, o que é sobre esse código?
  • 5:56 - 5:57
    Bem, ele tem 16 condicionais "if",
  • 5:57 - 5:59
    algumas delas são negadas,
  • 5:59 - 6:01
    e conectam algo com um "&",
  • 6:01 - 6:02
    tem 3 Strings mágicos, que são usados em todo lugar,
  • 6:02 - 6:05
    e vários números mágicos,
  • 6:05 - 6:06
    nem sei quantos.
    (risos)
  • 6:06 - 6:08
    Agora, pelo menos tem testes.
  • 6:08 - 6:09
    Ah, desculpe, aqui são os Strings mágicos.
  • 6:09 - 6:12
    Essas três coisas:
  • 6:12 - 6:13
    Brie, Sulfuras, e Backstage passes,
  • 6:13 - 6:18
    sei lá o que isso quer dizer.
  • 6:18 - 6:22
    E tem testes e eles passam.
  • 6:22 - 6:25
    Agora, tem seis testes pulados, certo?
    (risos)
  • 6:25 - 6:27
    Então sei lá o que é isso.
  • 6:27 - 6:31
    Então eu abro o código e só
    olho esse primeiro teste.
  • 6:31 - 6:33
    Ah, desculpe, os testes são relacionados
    as Strings mágicas
  • 6:33 - 6:34
    exceto desse grupo que é sobre
  • 6:34 - 6:38
    algo que se chama "Normal",
  • 6:38 - 6:40
    que nunca é mencionada nas condicionais.
    (risos)
  • 6:40 - 6:41
    Eu suspeito que tem um "else"
  • 6:41 - 6:43
    em algum lugar que importa, certo?
  • 6:43 - 6:46
    Então eu abro o teste e olho nele.
  • 6:46 - 6:50
    Aqui tem um, são todos assim.
  • 6:50 - 6:52
    Estou vendendo algo, certo?
  • 6:52 - 6:55
    Presumindo um GildedRose
    que tem esse nome,
  • 6:55 - 7:00
    atributo e qualidade,
    esses são nossos três attr_readers,
  • 7:00 - 7:02
    quando eu dou 'tick', nesse caso,
    qualidade baixa por um,
  • 7:02 - 7:03
    dias sobrando baixa por um,
  • 7:03 - 7:04
    ambos baixam por um.
  • 7:04 - 7:07
    É como seu eu estivesse vendendo leite,
  • 7:07 - 7:10
    ou ovos, ou queijo ou algo
    que tem validade,
  • 7:10 - 7:13
    que vai expirar, onde eles
    ficam ruins em alguma data.
  • 7:13 - 7:15
    Então, ainda estou explorando,
  • 7:15 - 7:18
    ainda nem sei qual é meu trabalho,
  • 7:18 - 7:23
    e olho para os três testes pulados,
  • 7:23 - 7:23
    e tem algo que se chama "Conjurado",
    (risos)
  • 7:23 - 7:25
    e todos seguem a mesma linha,
  • 7:25 - 7:27
    todos os testes parecem que supondo isso
  • 7:27 - 7:30
    quando eu dou "tick", vejo essa mudança.
  • 7:30 - 7:33
    E agora eu percebo, caramba,
  • 7:33 - 7:37
    eu preciso modificar esse código.
    (risos)
  • 7:37 - 7:42
    Então eu tentei, eu tentei,
  • 7:42 - 7:43
    muito obedientemente, eu tentei, mas foi uma falha miserável.
  • 7:43 - 7:45
    Eu não consegui.
  • 7:45 - 7:48
    Aquele condicional de 43 linhas me venceu.
  • 7:48 - 7:49
    Toda vez que eu tentei, eu tipo abri
    um teste Conjurado
  • 7:49 - 7:52
    eu fui fazer uma mudança
    naquele condicional
  • 7:52 - 7:53
    para fazer o teste passar,
    quebraria mais algo.
  • 7:53 - 7:55
    Gastei horas nisso.
  • 7:55 - 7:57
    Agora, eu fui prejudicada,
    mas realmente, foi difícil.
  • 7:57 - 7:59
    Seria difícil para você também, eu acho.
  • 7:59 - 8:00
    Então, se mudar aquele condicional
  • 8:00 - 8:02
    fosse tão difícil, você precisa perguntar,
  • 8:02 - 8:03
    por que eu estava tentando? Por que eu tentei fazer,
  • 8:03 - 8:09
    o que me levou a tentar alterar
  • 8:09 - 8:12
    aquele pedação de código incrívelmente complicado.
  • 8:12 - 8:14
    E a resposta é que me senti que eu deveria.
  • 8:14 - 8:17
    E isso é o que acontece, né?
  • 8:17 - 8:18
    Você escreve um código, e alguém pede uma mudança.
  • 8:18 - 8:18
    O que nos fazemos?
  • 8:18 - 8:21
    Você roda o código procurando
  • 8:21 - 8:22
    um código que é parecido com
  • 8:22 - 8:25
    a coisa nova que está tentando fazer,
  • 8:25 - 8:25
    e você coloque o código aí.
  • 8:25 - 8:28
    É assim que agimos.
  • 8:28 - 8:31
    Novatos mais, eles tem medo de criar novos objetos,
  • 8:31 - 8:33
    então eles só coloquem mais código aonde conseguem
  • 8:33 - 8:34
    achar algo parecido com aquilo que estão tentando adicionar,
  • 8:34 - 8:37
    e se aquele lugar já tem um "if",
  • 8:37 - 8:39
    eles adicionam mais um galho, né?
  • 8:39 - 8:40
    É assim que funciona.
  • 8:40 - 8:41
    E o que acontece é, a tendência natural
  • 8:41 - 8:42
    é que código cresce,
  • 8:42 - 8:43
    e cresce, e cresce.
  • 8:43 - 8:44
    E chega um ponto, né?
  • 8:44 - 8:46
    Ele cresce, e cresce, e cresce.
  • 8:46 - 8:48
    E chega um ponto em que vira,
  • 8:48 - 8:51
    e naquele ponto é tão grande que
  • 8:51 - 8:53
    você não consegue imaginar colocando código em outro lugar.
  • 8:53 - 8:56
  • 8:56 - 8:59
  • 8:59 - 9:02
  • 9:02 - 9:04
  • 9:04 - 9:06
  • 9:06 - 9:09
  • 9:09 - 9:13
  • 9:13 - 9:14
  • 9:14 - 9:17
  • 9:17 - 9:19
  • 9:19 - 9:21
  • 9:21 - 9:23
  • 9:23 - 9:26
  • 9:26 - 9:27
  • 9:27 - 9:29
  • 9:29 - 9:31
  • 9:31 - 9:32
  • 9:32 - 9:35
  • 9:35 - 9:37
  • 9:37 - 9:39
  • 9:39 - 9:40
  • 9:40 - 9:42
  • 9:42 - 9:43
  • 9:43 - 9:45
  • 9:45 - 9:46
  • 9:46 - 9:47
  • 9:47 - 9:49
  • 9:49 - 9:51
  • 9:51 - 9:55
  • 9:55 - 9:56
  • 9:56 - 9:58
  • 9:58 - 10:00
  • 10:00 - 10:02
  • 10:02 - 10:05
  • 10:05 - 10:09
  • 10:09 - 10:10
  • 10:10 - 10:13
  • 10:13 - 10:15
  • 10:15 - 10:18
  • 10:18 - 10:23
  • 10:23 - 10:27
  • 10:27 - 10:30
  • 10:30 - 10:33
  • 10:33 - 10:34
  • 10:34 - 10:37
  • 10:37 - 10:38
  • 10:38 - 10:42
  • 10:42 - 10:45
  • 10:45 - 10:48
  • 10:48 - 10:52
  • 10:52 - 10:55
  • 10:55 - 10:56
  • 10:56 - 10:59
  • 10:59 - 11:03
  • 11:03 - 11:07
  • 11:07 - 11:11
  • 11:11 - 11:13
  • 11:13 - 11:15
  • 11:15 - 11:18
  • 11:18 - 11:20
  • 11:20 - 11:25
  • 11:25 - 11:27
  • 11:27 - 11:29
  • 11:29 - 11:30
  • 11:30 - 11:33
  • 11:33 - 11:38
  • 11:38 - 11:40
  • 11:40 - 11:42
  • 11:42 - 11:46
  • 11:46 - 11:49
  • 11:49 - 11:52
  • 11:52 - 11:54
  • 11:54 - 11:56
  • 11:56 - 11:59
  • 11:59 - 12:03
  • 12:03 - 12:06
  • 12:06 - 12:06
  • 12:06 - 12:08
  • 12:08 - 12:11
  • 12:11 - 12:14
  • 12:14 - 12:14
  • 12:14 - 12:18
  • 12:18 - 12:21
  • 12:21 - 12:22
  • 12:22 - 12:25
  • 12:25 - 12:26
  • 12:26 - 12:29
  • 12:29 - 12:31
  • 12:31 - 12:33
  • 12:33 - 12:34
  • 12:34 - 12:36
  • 12:36 - 12:37
  • 12:37 - 12:40
  • 12:40 - 12:42
  • 12:42 - 12:44
  • 12:44 - 12:47
  • 12:47 - 12:48
  • 12:48 - 12:51
  • 12:51 - 12:53
  • 12:53 - 12:57
  • 12:57 - 12:58
  • 12:58 - 13:01
  • 13:01 - 13:03
  • 13:03 - 13:04
  • 13:04 - 13:06
  • 13:06 - 13:09
  • 13:09 - 13:10
  • 13:10 - 13:12
  • 13:12 - 13:14
  • 13:14 - 13:17
  • 13:17 - 13:19
  • 13:19 - 13:21
  • 13:21 - 13:22
  • 13:22 - 13:23
  • 13:23 - 13:25
  • 13:25 - 13:27
  • 13:27 - 13:29
  • 13:29 - 13:30
  • 13:30 - 13:32
  • 13:32 - 13:34
  • 13:34 - 13:35
  • 13:35 - 13:37
  • 13:37 - 13:39
  • 13:39 - 13:42
  • 13:42 - 13:43
  • 13:43 - 13:44
  • 13:44 - 13:45
  • 13:45 - 13:49
  • 13:49 - 13:50
  • 13:50 - 13:53
  • 13:53 - 13:56
  • 13:56 - 14:00
  • 14:00 - 14:01
  • 14:01 - 14:02
  • 14:02 - 14:07
  • 14:07 - 14:10
  • 14:10 - 14:13
  • 14:13 - 14:15
  • 14:15 - 14:17
  • 14:17 - 14:19
  • 14:19 - 14:22
  • 14:22 - 14:24
  • 14:24 - 14:26
  • 14:26 - 14:28
  • 14:28 - 14:30
  • 14:30 - 14:31
  • 14:31 - 14:34
  • 14:34 - 14:36
  • 14:36 - 14:38
  • 14:38 - 14:40
  • 14:40 - 14:43
  • 14:43 - 14:44
  • 14:44 - 14:48
  • 14:48 - 14:51
  • 14:51 - 14:53
  • 14:53 - 14:57
  • 14:57 - 15:00
  • 15:00 - 15:01
  • 15:01 - 15:03
  • 15:03 - 15:06
  • 15:06 - 15:09
  • 15:09 - 15:11
  • 15:11 - 15:14
  • 15:14 - 15:15
  • 15:15 - 15:21
  • 15:21 - 15:23
  • 15:23 - 15:25
  • 15:25 - 15:26
  • 15:26 - 15:30
  • 15:30 - 15:32
  • 15:32 - 15:34
  • 15:34 - 15:35
  • 15:35 - 15:37
  • 15:37 - 15:38
  • 15:38 - 15:40
  • 15:40 - 15:43
  • 15:43 - 15:46
  • 15:46 - 15:47
  • 15:47 - 15:49
  • 15:49 - 15:50
  • 15:50 - 15:52
  • 15:52 - 15:54
  • 15:54 - 15:57
  • 15:57 - 16:00
  • 16:00 - 16:01
  • 16:01 - 16:03
  • 16:03 - 16:06
  • 16:06 - 16:12
  • 16:12 - 16:14
  • 16:14 - 16:15
  • 16:15 - 16:17
  • 16:17 - 16:18
  • 16:18 - 16:21
  • 16:21 - 16:22
  • 16:22 - 16:23
  • 16:23 - 16:26
  • 16:26 - 16:31
  • 16:31 - 16:34
  • 16:34 - 16:35
  • 16:35 - 16:37
  • 16:37 - 16:39
  • 16:39 - 16:42
  • 16:42 - 16:44
  • 16:44 - 16:47
  • 16:47 - 16:48
  • 16:48 - 16:51
  • 16:51 - 16:53
  • 16:53 - 16:56
  • 16:56 - 16:57
  • 16:57 - 17:00
  • 17:00 - 17:03
  • 17:03 - 17:07
  • 17:07 - 17:12
  • 17:12 - 17:14
  • 17:14 - 17:15
  • 17:15 - 17:16
  • 17:16 - 17:19
  • 17:19 - 17:21
  • 17:21 - 17:25
  • 17:25 - 17:28
  • 17:28 - 17:29
  • 17:29 - 17:32
  • 17:32 - 17:32
  • 17:32 - 17:35
  • 17:35 - 17:37
  • 17:37 - 17:40
  • 17:40 - 17:41
  • 17:41 - 17:42
  • 17:42 - 17:44
  • 17:44 - 17:45
  • 17:45 - 17:48
  • 17:48 - 17:49
  • 17:49 - 17:52
  • 17:52 - 17:52
  • 17:52 - 17:54
  • 17:54 - 17:55
  • 17:55 - 17:57
  • 17:57 - 17:58
  • 17:58 - 18:02
  • 18:02 - 18:04
  • 18:04 - 18:07
  • 18:07 - 18:08
  • 18:08 - 18:11
  • 18:11 - 18:15
  • 18:15 - 18:18
  • 18:18 - 18:21
  • 18:21 - 18:23
  • 18:23 - 18:26
  • 18:26 - 18:28
  • 18:28 - 18:31
  • 18:31 - 18:33
  • 18:33 - 18:33
  • 18:33 - 18:37
  • 18:37 - 18:40
  • 18:40 - 18:41
  • 18:41 - 18:44
  • 18:44 - 18:46
  • 18:46 - 18:47
  • 18:47 - 18:49
  • 18:49 - 18:51
  • 18:51 - 18:53
  • 18:53 - 18:54
  • 18:54 - 18:56
  • 18:56 - 18:59
  • 18:59 - 19:00
  • 19:00 - 19:03
  • 19:03 - 19:06
  • 19:06 - 19:10
  • 19:10 - 19:15
  • 19:15 - 19:17
  • 19:17 - 19:20
  • 19:20 - 19:22
  • 19:22 - 19:24
  • 19:24 - 19:26
  • 19:26 - 19:29
  • 19:29 - 19:32
  • 19:32 - 19:35
  • 19:35 - 19:36
  • 19:36 - 19:39
  • 19:39 - 19:44
  • 19:44 - 19:49
  • 19:49 - 19:51
  • 19:51 - 19:53
  • 19:53 - 19:55
  • 19:55 - 20:00
  • 20:00 - 20:03
  • 20:03 - 20:04
  • 20:04 - 20:06
  • 20:06 - 20:08
  • 20:08 - 20:10
  • 20:10 - 20:14
  • 20:14 - 20:18
  • 20:18 - 20:21
  • 20:21 - 20:24
  • 20:24 - 20:27
  • 20:27 - 20:30
  • 20:30 - 20:34
  • 20:34 - 20:38
  • 20:38 - 20:39
  • 20:39 - 20:43
  • 20:43 - 20:46
  • 20:46 - 20:48
  • 20:48 - 20:49
  • 20:49 - 20:52
  • 20:52 - 20:55
  • 20:55 - 20:58
  • 20:58 - 21:01
  • 21:01 - 21:04
  • 21:04 - 21:05
  • 21:05 - 21:07
  • 21:07 - 21:11
  • 21:11 - 21:13
  • 21:13 - 21:15
  • 21:15 - 21:19
  • 21:19 - 21:20
  • 21:20 - 21:23
  • 21:23 - 21:25
  • 21:25 - 21:27
  • 21:27 - 21:31
  • 21:31 - 21:34
  • 21:34 - 21:36
  • 21:36 - 21:37
  • 21:37 - 21:40
  • 21:40 - 21:43
  • 21:43 - 21:45
  • 21:45 - 21:47
  • 21:47 - 21:53
  • 21:53 - 21:56
  • 21:56 - 21:58
  • 21:58 - 22:01
  • 22:01 - 22:02
  • 22:02 - 22:04
  • 22:04 - 22:07
  • 22:07 - 22:09
  • 22:09 - 22:11
  • 22:11 - 22:13
  • 22:13 - 22:15
  • 22:15 - 22:16
  • 22:16 - 22:18
  • 22:18 - 22:21
  • 22:21 - 22:23
  • 22:23 - 22:25
  • 22:25 - 22:28
  • 22:28 - 22:30
  • 22:30 - 22:35
  • 22:35 - 22:37
  • 22:37 - 22:38
  • 22:38 - 22:40
  • 22:40 - 22:43
  • 22:43 - 22:46
  • 22:46 - 22:48
  • 22:48 - 22:51
  • 22:51 - 22:53
  • 22:53 - 22:54
  • 22:54 - 22:57
  • 22:57 - 22:58
  • 22:58 - 23:00
  • 23:00 - 23:02
  • 23:02 - 23:06
  • 23:06 - 23:07
  • 23:07 - 23:10
  • 23:10 - 23:13
  • 23:13 - 23:15
  • 23:15 - 23:16
  • 23:16 - 23:19
  • 23:19 - 23:21
  • 23:21 - 23:25
  • 23:25 - 23:27
  • 23:27 - 23:30
  • 23:30 - 23:32
  • 23:32 - 23:35
  • 23:35 - 23:37
  • 23:37 - 23:38
  • 23:38 - 23:40
  • 23:40 - 23:42
  • 23:42 - 23:43
  • 23:43 - 23:45
  • 23:45 - 23:48
  • 23:48 - 23:49
  • 23:49 - 23:51
  • 23:51 - 23:53
  • 23:53 - 23:57
  • 23:57 - 23:59
  • 23:59 - 24:02
  • 24:02 - 24:04
  • 24:04 - 24:07
  • 24:07 - 24:09
  • 24:09 - 24:11
  • 24:11 - 24:12
  • 24:12 - 24:14
  • 24:14 - 24:17
  • 24:17 - 24:18
  • 24:18 - 24:20
  • 24:20 - 24:21
  • 24:21 - 24:23
  • 24:23 - 24:25
  • 24:25 - 24:29
  • 24:29 - 24:33
  • 24:33 - 24:35
  • 24:35 - 24:36
  • 24:36 - 24:37
  • 24:37 - 24:39
  • 24:39 - 24:42
  • 24:42 - 24:43
  • 24:43 - 24:45
  • 24:45 - 24:48
  • 24:48 - 24:49
  • 24:49 - 24:51
  • 24:51 - 24:52
  • 24:52 - 24:54
  • 24:54 - 24:58
  • 24:58 - 25:00
  • 25:00 - 25:01
  • 25:01 - 25:03
  • 25:03 - 25:06
  • 25:06 - 25:07
  • 25:07 - 25:09
  • 25:09 - 25:11
  • 25:11 - 25:16
  • 25:16 - 25:21
  • 25:21 - 25:23
  • 25:23 - 25:27
  • 25:27 - 25:28
  • 25:28 - 25:30
  • 25:30 - 25:31
  • 25:31 - 25:34
  • 25:34 - 25:37
  • 25:37 - 25:39
  • 25:39 - 25:41
  • 25:41 - 25:45
  • 25:45 - 25:47
  • 25:47 - 25:48
  • 25:48 - 25:50
  • 25:50 - 25:52
  • 25:52 - 25:55
  • 25:55 - 25:57
  • 25:57 - 26:00
  • 26:00 - 26:02
  • 26:02 - 26:05
  • 26:05 - 26:06
  • 26:06 - 26:07
  • 26:07 - 26:10
  • 26:10 - 26:12
  • 26:12 - 26:15
  • 26:15 - 26:17
  • 26:17 - 26:19
  • 26:19 - 26:21
  • 26:21 - 26:23
  • 26:23 - 26:26
  • 26:26 - 26:29
  • 26:29 - 26:31
  • 26:31 - 26:35
  • 26:35 - 26:36
  • 26:36 - 26:38
  • 26:38 - 26:39
  • 26:39 - 26:40
  • 26:40 - 26:42
  • 26:42 - 26:43
  • 26:43 - 26:45
  • 26:45 - 26:47
  • 26:47 - 26:48
  • 26:48 - 26:49
  • 26:49 - 26:53
  • 26:53 - 26:56
  • 26:56 - 26:58
  • 26:58 - 27:01
  • 27:01 - 27:02
  • 27:02 - 27:05
  • 27:05 - 27:09
  • 27:09 - 27:13
  • 27:13 - 27:16
  • 27:16 - 27:19
  • 27:19 - 27:20
  • 27:20 - 27:23
  • 27:23 - 27:24
  • 27:24 - 27:27
  • 27:27 - 27:29
  • 27:29 - 27:32
  • 27:32 - 27:34
  • 27:34 - 27:36
  • 27:36 - 27:39
  • 27:39 - 27:41
  • 27:41 - 27:43
  • 27:43 - 27:46
  • 27:46 - 27:48
  • 27:48 - 27:51
  • 27:51 - 27:56
  • 27:56 - 27:59
  • 27:59 - 28:02
  • 28:02 - 28:05
  • 28:05 - 28:06
  • 28:06 - 28:10
  • 28:10 - 28:12
  • 28:12 - 28:13
  • 28:13 - 28:15
  • 28:15 - 28:18
  • 28:18 - 28:20
  • 28:20 - 28:21
  • 28:21 - 28:24
  • 28:24 - 28:26
  • 28:26 - 28:28
  • 28:28 - 28:31
  • 28:31 - 28:33
  • 28:33 - 28:35
  • 28:35 - 28:38
  • 28:38 - 28:40
  • 28:40 - 28:42
  • 28:42 - 28:44
  • 28:44 - 28:45
  • 28:45 - 28:47
  • 28:47 - 28:48
  • 28:48 - 28:50
  • 28:50 - 28:52
  • 28:52 - 28:53
  • 28:53 - 28:55
  • 28:55 - 28:58
  • 28:58 - 29:00
  • 29:00 - 29:02
  • 29:02 - 29:04
  • 29:04 - 29:07
  • 29:07 - 29:09
  • 29:09 - 29:11
  • 29:11 - 29:16
  • 29:16 - 29:19
  • 29:19 - 29:20
  • 29:20 - 29:21
  • 29:21 - 29:24
  • 29:24 - 29:26
  • 29:26 - 29:27
  • 29:27 - 29:30
  • 29:30 - 29:31
  • 29:31 - 29:35
  • 29:35 - 29:38
  • 29:38 - 29:41
  • 29:41 - 29:44
  • 29:44 - 29:45
  • 29:45 - 29:48
  • 29:48 - 29:50
  • 29:50 - 29:52
  • 29:52 - 29:54
  • 29:54 - 29:57
  • 29:57 - 29:58
  • 29:58 - 30:02
  • 30:02 - 30:03
  • 30:03 - 30:04
  • 30:04 - 30:06
  • 30:06 - 30:10
  • 30:10 - 30:11
  • 30:11 - 30:14
  • 30:14 - 30:17
  • 30:17 - 30:20
  • 30:20 - 30:21
  • 30:21 - 30:24
  • 30:24 - 30:27
  • 30:27 - 30:29
  • 30:29 - 30:31
  • 30:31 - 30:35
  • 30:35 - 30:37
  • 30:37 - 30:40
  • 30:40 - 30:43
  • 30:43 - 30:44
  • 30:44 - 30:46
  • 30:46 - 30:50
  • 30:50 - 30:52
  • 30:52 - 30:55
  • 30:55 - 30:57
  • 30:57 - 30:59
  • 30:59 - 31:02
  • 31:02 - 31:04
  • 31:04 - 31:07
  • 31:07 - 31:08
  • 31:08 - 31:11
  • 31:11 - 31:13
  • 31:13 - 31:15
  • 31:15 - 31:18
  • 31:18 - 31:20
  • 31:20 - 31:24
  • 31:24 - 31:26
  • 31:26 - 31:29
  • 31:29 - 31:31
  • 31:31 - 31:32
  • 31:32 - 31:35
  • 31:35 - 31:38
  • 31:38 - 31:40
  • 31:40 - 31:42
  • 31:42 - 31:46
  • 31:46 - 31:50
  • 31:50 - 31:55
  • 31:55 - 31:59
  • 31:59 - 32:02
  • 32:02 - 32:06
  • 32:06 - 32:10
  • 32:10 - 32:12
  • 32:12 - 32:12
  • 32:12 - 32:14
  • 32:14 - 32:17
  • 32:17 - 32:21
  • 32:21 - 32:24
  • 32:24 - 32:26
  • 32:26 - 32:28
  • 32:28 - 32:30
  • 32:30 - 32:33
  • 32:33 - 32:37
  • 32:37 - 32:40
  • 32:40 - 32:44
  • 32:44 - 32:47
  • 32:47 - 32:49
  • 32:49 - 32:51
  • 32:51 - 32:53
  • 32:53 - 32:54
  • 32:54 - 32:57
  • 32:57 - 32:59
  • 32:59 - 33:02
  • 33:02 - 33:03
  • 33:03 - 33:07
  • 33:07 - 33:10
  • 33:10 - 33:13
  • 33:13 - 33:14
  • 33:14 - 33:16
  • 33:16 - 33:19
  • 33:19 - 33:22
  • 33:22 - 33:24
  • 33:24 - 33:26
  • 33:26 - 33:29
  • 33:29 - 33:32
  • 33:32 - 33:36
  • 33:36 - 33:38
  • 33:38 - 33:41
  • 33:41 - 33:42
  • 33:42 - 33:44
  • 33:44 - 33:48
  • 33:48 - 33:49
  • 33:49 - 33:52
  • 33:52 - 33:54
  • 33:54 - 33:57
  • 33:57 - 34:01
  • 34:01 - 34:02
  • 34:02 - 34:06
  • 34:06 - 34:08
  • 34:08 - 34:11
  • 34:11 - 34:14
  • 34:14 - 34:19
  • 34:19 - 34:21
  • 34:21 - 34:24
  • 34:24 - 34:25
  • 34:25 - 34:26
  • 34:26 - 34:30
  • 34:30 - 34:31
  • 34:31 - 34:33
  • 34:33 - 34:37
  • 34:37 - 34:39
  • 34:39 - 34:41
  • 34:41 - 34:42
  • 34:42 - 34:44
  • 34:44 - 34:46
  • 34:46 - 34:49
  • 34:49 - 34:50
  • 34:50 - 34:53
  • 34:53 - 34:54
  • 34:54 - 34:58
  • 34:58 - 34:59
  • 34:59 - 35:01
  • 35:01 - 35:03
  • 35:03 - 35:05
  • 35:05 - 35:07
  • 35:07 - 35:11
  • 35:11 - 35:14
  • 35:14 - 35:20
  • 35:20 - 35:21
  • 35:21 - 35:23
  • 35:23 - 35:30
  • 35:30 - 35:35
  • 35:35 - 35:38
  • 35:38 - 35:41
  • 35:41 - 35:45
  • 35:45 - 35:48
  • 35:48 - 35:50
  • 35:50 - 35:51
  • 35:51 - 35:53
  • 35:53 - 35:54
  • 35:54 - 35:57
  • 35:57 - 35:59
  • 35:59 - 36:01
  • 36:01 - 36:04
  • 36:04 - 36:06
  • 36:06 - 36:08
  • 36:08 - 36:11
  • 36:11 - 36:14
  • 36:14 - 36:16
  • 36:16 - 36:18
  • 36:18 - 36:21
  • 36:21 - 36:23
  • 36:23 - 36:26
  • 36:26 - 36:30
  • 36:30 - 36:32
  • 36:32 - 36:36
  • 36:36 - 36:39
  • 36:39 - 36:43
  • 36:43 - 36:45
  • 36:45 - 36:47
  • 36:47 - 36:51
  • 36:51 - 36:52
  • 36:52 - 36:56
  • 36:56 - 37:00
  • 37:00 - 37:03
  • 37:03 - 37:05
  • 37:05 - 37:08
  • 37:08 - 37:12
  • 37:12 - 37:15
  • 37:15 - 37:18
  • 37:18 - 37:20
  • 37:20 - 37:23
  • 37:23 - 37:25
  • 37:25 - 37:27
  • 37:27 - 37:30
  • 37:30 - 37:32
  • 37:32 - 37:35
  • 37:35 - 37:39
  • 37:39 - 37:43
  • 37:43 - 37:44
  • 37:44 - 37:47
  • 37:47 - 37:50
  • 37:50 - 37:54
  • 37:54 - 37:57
  • 37:57 - 38:02
  • 38:02 - 38:05
  • 38:05 - 38:07
  • 38:07 - 38:07
  • 38:07 - 38:09
  • 38:09 - 38:12
  • 38:12 - 38:14
  • 38:14 - 38:16
  • 38:16 - 38:27
    (aplausos)
  • 38:27 - 38:44
Title:
RailsConf 2014 - All the Little Things by Sandi Metz
Description:

more » « less
Video Language:
English
Duration:
38:47

Portuguese, Brazilian subtitles

Incomplete

Revisions