Slide 1

Slide 1 text

E x e m p l o s e m G o e P y t h o n ALÉM DOS PARADIGMAS Entenda as características da linguagem e saiba escolher e adaptar padrões de projeto Luciano Ramalho @ramalhoorg

Slide 2

Slide 2 text

2 Sometimes you need a blank template.

Slide 3

Slide 3 text

FLUENT PYTHON, MEU 1º LIVRO Fluent Python (O’Reilly, 2015) Python Fluente (Novatec, 2015) Python к вершинам
 мастерства (DMK, 2015) 流暢的 Python (Gotop, 2016) also in Polish, Korean, etc… 3 4.7 stars at
 Amazon.com

Slide 4

Slide 4 text

PARADIGMAS Categorias de linguagens de programação 4

Slide 5

Slide 5 text

O PRIMEIRO “PARADIGMA" QUE APRENDI: IMPERATIVO 5 HP-25 TI 58C

Slide 6

Slide 6 text

PROGRAMA PARA CALCULADORA HP-25 6

Slide 7

Slide 7 text

PANORAMA SOBRE LINGUAGENS DE PROGRAMAÇÃO Programming Language Pragmatics,
 4th edition (2015) Michael L. Scott 7

Slide 8

Slide 8 text

MDC: ASM X86 Máximo divisor comum em Assembly x86 (Scott, 2015) 8

Slide 9

Slide 9 text

MDC EM C, OCAML, PROLOG 9

Slide 10

Slide 10 text

MDC EM PYTHON Estilo imperativo Estilo funcional 10

Slide 11

Slide 11 text

MDC EM PYTHON 11 Inadequado para Python que não faz otimização de chamada de cauda (TCO) Estilo imperativo Estilo funcional

Slide 12

Slide 12 text

UMA CLASSIFICAÇÃO 12 Programming Language Pragmatics,
 4th edition (2015) Michael L. Scott

Slide 13

Slide 13 text

UMA CLASSIFICAÇÃO (ZOOM) 13

Slide 14

Slide 14 text

UMA CLASSIFICAÇÃO (ZOOM) 14 ???

Slide 15

Slide 15 text

OUTRO LIVRO, OUTRA CLASSIFICAÇÃO Princípios de Linguagens de Programação
 (2003) Ana Cristina Vieira de Melo Flávio Soares Corrêa da Silva 15

Slide 16

Slide 16 text

16

Slide 17

Slide 17 text

17 Lógicas

Slide 18

Slide 18 text

SITE: THE LANGUAGE LIST 18

Slide 19

Slide 19 text

SITE QUEBRADO, LINGUAGENS FALTANDO… 19

Slide 20

Slide 20 text

CATEGORIAS DE LINGUAGENS 20

Slide 21

Slide 21 text

CATEGORIAS DE LINGUAGENS (2) 21

Slide 22

Slide 22 text

CATEGORIAS DE LINGUAGENS (3) 22

Slide 23

Slide 23 text

CATEGORIAS DE LINGUAGENS (4) 23

Slide 24

Slide 24 text

CATEGORIAS Ontologia é tão anos 90… 24

Slide 25

Slide 25 text

EM UMA ENCICLOPÉDIA BORGIANA… 25

Slide 26

Slide 26 text

UMA CLASSIFICAÇÃO BASEADA EM FATOS CIENTÍFICOS 26

Slide 27

Slide 27 text

UMA CLASSIFICAÇÃO BASEADA EM FATOS CIENTÍFICOS? 27 "Gases" “nobres"!?

Slide 28

Slide 28 text

“Ontology is overrated.” Clay Shirky 28 Ontologias são sobrevalorizadas. Pesquise o artigo em inglês!

Slide 29

Slide 29 text

UMA ABORDAGEM MELHOR Fundamental Features of Programming Languages 29

Slide 30

Slide 30 text

ENSINO MODERNO DE TEORIA DE LINGUAGENS 30 Ensinando linguagens de programação na era
 pós-Lineu

Slide 31

Slide 31 text

ARTIGO APRESENTANDO A ABORDAGEM 31

Slide 32

Slide 32 text

ARTIGO APRESENTANDO A ABORDAGEM 32 “Paradigmas" de linguagens de programação são um legado moribundo e tedioso…

Slide 33

Slide 33 text

ARTIGO APRESENTANDO A ABORDAGEM 33

Slide 34

Slide 34 text

ARTIGO APRESENTANDO A ABORDAGEM 34 Criadores de linguagens modernas não têm o menor respeito por eles…

Slide 35

Slide 35 text

ARTIGO APRESENTANDO A ABORDAGEM 35

Slide 36

Slide 36 text

ARTIGO APRESENTANDO A ABORDAGEM 36 …devemos abandonar esse método no ensino de linguagens…

Slide 37

Slide 37 text

ARTIGO APRESENTANDO A ABORDAGEM 37

Slide 38

Slide 38 text

ARTIGO APRESENTANDO A ABORDAGEM 38 …um livro-texto que explora esses assuntos.

Slide 39

Slide 39 text

TEORIA NA PRÁTICA COM RACKET (DIALETOS DE SCHEME) 39

Slide 40

Slide 40 text

PADRÕES DE PROJETO Quando as linguagens deixam a desejar 40

Slide 41

Slide 41 text

GOF: LIVRO CLÁSSICO DA “GANG OF FOUR” Design Patterns: Elements of Reusable Object-Oriented Software (1995) Erich Gamma
 Richard Helm
 Ralph Johnson
 John Vlissides 41

Slide 42

Slide 42 text

PROBLEMAS NA DIFUSÃO DOS PADRÕES 42 Ralph Johnson no IME/USP (2014?)

Slide 43

Slide 43 text

PROBLEMAS NA DIFUSÃO DOS PADRÕES 43 Ralph Johnson no IME/USP (2014?) Excesso de ênfase nos padrões como resultados finais em vez de passos no processo de design

Slide 44

Slide 44 text

PROBLEMAS NA DIFUSÃO DOS PADRÕES 44 Ralph Johnson no IME/USP (2014?) Conformidade com padrões não é uma medida de qualidade.

Slide 45

Slide 45 text

NEM TODO PADRÃO É UNIVERSAL Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides, Design Patterns: Elements of Reusable Object-Oriented Software (Addison-Wesley, 1995), p. 4. 45

Slide 46

Slide 46 text

NEM TODO PADRÃO É UNIVERSAL Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides, Design Patterns: Elements of Reusable Object-Oriented Software (Addison-Wesley, 1995), p. 4. 46 Nossos padrões assumem características no nível de Smalltalk/C++…

Slide 47

Slide 47 text

NEM TODO PADRÃO É UNIVERSAL Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides, Design Patterns: Elements of Reusable Object-Oriented Software (Addison-Wesley, 1995), p. 4. 47 Se tivéssemos assumido linguagens procedurais, talvez tivéssemos incluído padrões como “Herança”, “Encapsulamento" e “Polimorfismo".

Slide 48

Slide 48 text

48

Slide 49

Slide 49 text

49

Slide 50

Slide 50 text

50 Estudo do livro “Padrões de Projeto”: 16 dos 23 padrões têm implementações qualitativamente mais simples em Lisp ou Dylan do que em C++, ao menos para alguns usos de cada padrão.

Slide 51

Slide 51 text

51 16 dos 23 padrões são invisíveis ou mais simples, devido a essas características

Slide 52

Slide 52 text

CARACTERÍSTICAS Características essenciais, não apenas açúcar sintático. 52

Slide 53

Slide 53 text

AMOSTRA DE CARACTERÍSTICAS ✖ LINGUAGENS 53 Common Lisp C Java Python Go Funções de 1ª classe ✔ ∗ ✔ ✔ ✔ Tipos de 1ª classe ✔ ✔ Iteradores ∗ ✔ ✔ ∗ Modelo de variáveis referência valor* valor e referência referência valor* e referência Checagem de tipos dinâmica estática estática dinâmica estática Expressão de tipos estrutural nominal nominal estrutural estrutural

Slide 54

Slide 54 text

AMOSTRA DE CARACTERÍSTICAS ✖ LINGUAGENS 54 Common Lisp C Java Python Go Funções de 1ª classe ✔ ∗ ✔ ✔ ✔ Tipos de 1ª classe ✔ ✔ Iteradores ∗ ✔ ✔ ∗ Modelo de variáveis referência valor* valor e referência referência valor* e referência Checagem de tipos dinâmica estática estática dinâmica estática Expressão de tipos estrutural nominal nominal estrutural estrutural Funções são objetos Classes são objetos

Slide 55

Slide 55 text

AMOSTRA DE CARACTERÍSTICAS ✖ LINGUAGENS 55 Common Lisp C Java Python Go Funções de 1ª classe ✔ ∗ ✔ ✔ ✔ Tipos de 1ª classe ✔ ✔ Iteradores ∗ ✔ ✔ ∗ Modelo de variáveis referência valor* valor e referência referência valor* e referência Checagem de tipos dinâmica estática estática dinâmica estática Expressão de tipos estrutural nominal nominal estrutural estrutural

Slide 56

Slide 56 text

AMOSTRA DE CARACTERÍSTICAS ✖ LINGUAGENS 56 Common Lisp C Java Python Go Funções de 1ª classe ✔ ∗ ✔ ✔ ✔ Tipos de 1ª classe ✔ ✔ Iteradores ∗ ✔ ✔ ∗ Modelo de variáveis referência valor* valor e referência referência valor* e referência Checagem de tipos dinâmica estática estática dinâmica estática Expressão de tipos estrutural nominal nominal estrutural estrutural

Slide 57

Slide 57 text

AMOSTRA DE CARACTERÍSTICAS ✖ LINGUAGENS 57 Common Lisp C Java Go Python Funções de 1ª classe ✔ ∗ ✔ ✔ ✔ Tipos de 1ª classe ✔ ✔ Iteradores ∗ ✔ ∗ ✔ Modelo de variáveis referência valor* valor e referência valor* e referência referência Checagem de tipos dinâmica estática estática estática dinâmica Expressão de tipos estrutural nominal nominal estrutural estrutural

Slide 58

Slide 58 text

AMOSTRA DE CARACTERÍSTICAS ✖ LINGUAGENS 58 Common Lisp C Java Go Python Funções de 1ª classe ✔ ∗ ✔ ✔ ✔ Tipos de 1ª classe ✔ ✔ Iteradores ∗ ✔ ∗ ✔ Modelo de variáveis referência valor* valor e referência valor* e referência referência Checagem de tipos dinâmica estática estática estática dinâmica Expressão de tipos estrutural nominal nominal estrutural estrutural

Slide 59

Slide 59 text

STRATEGY EM GO Aproveitando as características de Go 59

Slide 60

Slide 60 text

SELECIONAR UM ALGORITMO EM TEMPO DE EXECUÇÃO 60

Slide 61

Slide 61 text

61 Contexto Estratégia Estratégias concretas SELECIONAR UM ALGORITMO EM TEMPO DE EXECUÇÃO

Slide 62

Slide 62 text

STRATEGY EM GO Implementação “clássica” usando interface Implementação usando funções como objetos 62

Slide 63

Slide 63 text

TESTES 63 interface/strategy_test.go Repo: https://github.com/ramalho/go-paradigma/

Slide 64

Slide 64 text

TESTES 64 interface/strategy_test.go

Slide 65

Slide 65 text

CLIENTE E ITENS DE UM PEDIDO 65 interface/store.go

Slide 66

Slide 66 text

CONTEXTO E ESTRATÉGIA 66 interface/strategy.go

Slide 67

Slide 67 text

ESTRATÉGIA CONCRETA 67 interface/store.go

Slide 68

Slide 68 text

MAIS ESTRATÉGIAS CONCRETAS 68 interface/store.go

Slide 69

Slide 69 text

STRATEGY COM FUNÇÕES DE 1ª CLASSE 69

Slide 70

Slide 70 text

TESTES COM FUNÇÕES 70

Slide 71

Slide 71 text

ESTRATÉGIAS CONCRETAS COM FUNÇÕES 71

Slide 72

Slide 72 text

QUAL SOLUÇÃO É MAIS IDIOMÁTICA? Interfaces x funções 72

Slide 73

Slide 73 text

INTERFACE X FUNÇÕES DE 1ª CLASSE Na biblioteca padrão, interfaces de um método são comuns. 73

Slide 74

Slide 74 text

INTERFACE X FUNÇÕES DE 1ª CLASSE Mas o pacote http suporta os dois estilos de programação*: 74 *Kumar Iyer (ThoughtWorks): Higher-order functions vs interfaces in golang http://bit.ly/2j39uKh

Slide 75

Slide 75 text

STRATEGY EM PYTHON Aproveitando características de Python 75

Slide 76

Slide 76 text

ESTRATÉGIA PARAMETRIZADA COM INVOCÁVEL 76

Slide 77

Slide 77 text

ESTRATÉGIA PARAMETRIZADA COM INVOCÁVEL 77 objeto promo é instanciado com porcentagem de desconto

Slide 78

Slide 78 text

SUB-CLASSES IMPLEMENTADAS COMO INVOCÁVEIS 78

Slide 79

Slide 79 text

QUAL A SOLUÇÃO MAIS IDIOMÁTICA? Classes x funções 79

Slide 80

Slide 80 text

QUAL É MAIS IDIOMÁTICA? Estratégia clássica parece muito verbosa em Python* Funções de 1ª classe são muito comuns na biblioteca padrão •Exemplo: argumento key nas funções embutidas sorted, max, min 80 * Sim, isto é subjetivo. Estamos falando de estilo!

Slide 81

Slide 81 text

QUAL É MAIS IDIOMÁTICA COM PARÂMETROS? Use de closures é comum em Python •Python 3 ganhou a declaração nonlocal para suportar melhor essa prática Objetos invocáveis são característica típica de Python •Graham Dumpleton recomenda invocáveis para construir @decorators 81

Slide 82

Slide 82 text

CONCLUINDO Aprenda as características fundamentais 82

Slide 83

Slide 83 text

EM VEZ DE CATEGORIAS ESTANQUES… 83 A B C D E F G

Slide 84

Slide 84 text

PENSE NAS CARACTERÍSTICAS FUNDAMENTAIS 84 A B C D E F G

Slide 85

Slide 85 text

Para decidir se determinada implementação ou padrão faz sentido… AS CARACTERÍSTICAS DÃO A DICA A B C D E F G + ✔ ✔ ✔ ✔ + ✔ ✔ ✔ ✔ + ✔ ✔ ✔ ✔ ✔

Slide 86

Slide 86 text

PORQUE APRENDER AS CARACTERÍSTICAS FUNDAMENTAIS Aprender novas linguagens mais rápido Aproveitar melhor as características de cada linguagem Escolher entre implementações alternativas Fazer bom uso de padrões de projeto Depurar problemas difíceis Emular características que fazem falta 86 Inspirado por Programming Language Pragmatics Michael L. Scott *

Slide 87

Slide 87 text

Luciano Ramalho luciano.ramalho@thoughtworks.com
 Twitter: @ramalhoorg Github: github.com/standupdev/paradigm-free Slides: speakerdeck.com/ramalho MUITO GRATO!