Slide 1

Slide 1 text

Te o r i a n a p r á t i c a CADÊ O PARADIGMA? Qual o paradigma da linguagem Go? Isso é uma boa pergunta? Vamos ver um jeito melhor de entender linguagens a fundo. 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) também em Polonês, Coreano… 3 4.7 stars na
 Amazon.com

Slide 4

Slide 4 text

REVISÃO TÉCNICA DA TRADUÇÃO PT-BR DO GOPL GOPL:
 A Linguagem de Programação Go (Novatec, 2016) Donovan & Kernighan 4

Slide 5

Slide 5 text

TUTORIAL: INTRODUÇÃO A GO COM TDD 5 Apostila e código: http://bit.ly/tw-go-tdd

Slide 6

Slide 6 text

PARADIGMAS Categorias de linguagens de programação 6

Slide 7

Slide 7 text

GOPL: ÁRVORE GENEALÓGICA DE GO A Linguagem de Programação Go (Novatec, 2016) Donovan & Kernighan 7

Slide 8

Slide 8 text

8

Slide 9

Slide 9 text

LINGUAGEM DA CALCULADORA HP-25 9

Slide 10

Slide 10 text

UM LIVRO ESTILO “SURVEY” (LEVANTAMENTO) Programming Language Pragmatics,
 4th edition (2015) Michael L. Scott 10

Slide 11

Slide 11 text

GCD ASM X86 Máximo divisor comum em assembly x86 (Scott, 2015) 11

Slide 12

Slide 12 text

GCD EM C, OCAML E PROLOG 12

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

UMA CLASSIFICAÇÃO (ZOOM) 14

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

OUTRO LIVRO Princípios de Linguagens de Programação
 (2003) Ana Cristina Vieira de Melo Flávio Soares Corrêa da Silva 16

Slide 17

Slide 17 text

17

Slide 18

Slide 18 text

18 Lógicas

Slide 19

Slide 19 text

THE LANGUAGE LIST 19

Slide 20

Slide 20 text

CADÊ AS LINGUAGENS? 20

Slide 21

Slide 21 text

CATEGORIAS DE LINGUAGENS 21

Slide 22

Slide 22 text

CATEGORIAS DE LINGUAGENS (2) 22

Slide 23

Slide 23 text

CATEGORIAS DE LINGUAGENS (3) 23

Slide 24

Slide 24 text

CATEGORIAS DE LINGUAGENS (4) 24

Slide 25

Slide 25 text

CATEGORIAS? “Ontology is overrated” — Clay Shirky 25

Slide 26

Slide 26 text

UMA CLASSIFICAÇÃO BASEADA EM FATOS! 26

Slide 27

Slide 27 text

UMA CLASSIFICAÇÃO BASEADA EM FATOS? 27 Gases nobres!?

Slide 28

Slide 28 text

ABORDAGEM MELHOR Características de Linguagens de Programação 28

Slide 29

Slide 29 text

ENSINO DE TEORIA DE LINGUAGENS 29

Slide 30

Slide 30 text

O PAPER QUE EXPLICA A ABORDAGEM 30

Slide 31

Slide 31 text

TEORIA E PRÁTICA EM RACKET (DIALETO DE SCHEME) 31

Slide 32

Slide 32 text

TEORIA E PRÁTICA EM PASCAL 32

Slide 33

Slide 33 text

CARACTERÍSTICAS Os mecanismos realmente importantes em linguagens de programação 33

Slide 34

Slide 34 text

Lisp (CLOS) 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** Tipagem dinâmica estática estática dinâmica estática Tipos estruturais nominais nominais estruturais estruturais ALGUMAS CARACTERÍSTICAS X LINGUAGENS 34

Slide 35

Slide 35 text

Lisp (CLOS) 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** Tipagem dinâmica estática estática dinâmica estática Tipos estruturais nominais nominais estruturais estruturais ALGUMAS CARACTERÍSTICAS X LINGUAGENS 35 Funções como objetos “Classes” como objetos

Slide 36

Slide 36 text

ALGUMAS CARACTERÍSTICAS X LINGUAGENS 36 Lisp (CLOS) 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** Tipagem dinâmica estática estática dinâmica estática Tipos estruturais nominais nominais estruturais estruturais

Slide 37

Slide 37 text

ALGUMAS CARACTERÍSTICAS X LINGUAGENS 37 Lisp (CLOS) 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** Tipagem dinâmica estática estática dinâmica estática Tipos estruturais nominais nominais estruturais estruturais

Slide 38

Slide 38 text

ALGUMAS CARACTERÍSTICAS X LINGUAGENS 38 Lisp (CLOS) 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** Tipagem dinâmica estática estática dinâmica estática Tipos estruturais nominais nominais estruturais estruturais

Slide 39

Slide 39 text

ALGUMAS CARACTERÍSTICAS X LINGUAGENS 39 Lisp (CLOS) 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 Tipagem dinâmica estática estática dinâmica estática Tipos estruturais nominais nominais estruturais estruturais

Slide 40

Slide 40 text

DESIGN PATTERNS Padrões de Projeto 40

Slide 41

Slide 41 text

GOF: O LIVRO DA “GANGUE DOS 4” 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 ADOÇÃO DE PATTERNS 42

Slide 43

Slide 43 text

NEM TODOS OS PATTERNS SÃO UNIVERSAIS Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides, Design Patterns: Elements of Reusable Object-Oriented Software (Addison-Wesley, 1995), p. 4. 43

Slide 44

Slide 44 text

NEM TODOS OS PATTERNS SÃO UNIVERSAIS Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides, Design Patterns: Elements of Reusable Object-Oriented Software (Addison-Wesley, 1995), p. 4. 44

Slide 45

Slide 45 text

45

Slide 46

Slide 46 text

46

Slide 47

Slide 47 text

47

Slide 48

Slide 48 text

STRATEGY EM GO Aproveitando as características de Go 48

Slide 49

Slide 49 text

SELECIONAR UM ALGORITMO EM TEMPO DE EXECUÇÃO 49

Slide 50

Slide 50 text

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

Slide 51

Slide 51 text

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

Slide 52

Slide 52 text

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

Slide 53

Slide 53 text

TESTES 53 interface/strategy_test.go

Slide 54

Slide 54 text

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

Slide 55

Slide 55 text

CONTEXTO E ESTRATÉGIA 55 interface/strategy.go

Slide 56

Slide 56 text

ESTRATÉGIA CONCRETA 56 interface/store.go

Slide 57

Slide 57 text

MAIS ESTRATÉGIAS CONCRETAS 57 interface/store.go

Slide 58

Slide 58 text

STRATEGY COM FUNÇÕES DE 1ª CLASSE 58

Slide 59

Slide 59 text

TESTES COM FUNÇÕES 59

Slide 60

Slide 60 text

ESTRATÉGIAS CONCRETAS COM FUNÇÕES 60

Slide 61

Slide 61 text

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

Slide 62

Slide 62 text

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

Slide 63

Slide 63 text

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

Slide 64

Slide 64 text

CONCLUSÃO Porque aprender os fundamentos 64

Slide 65

Slide 65 text

PORQUE APRENDER OS FUNDAMENTOS* Aprender mais facilmente novas linguagens Aproveitar melhor as características da linguagem Saber escolher formas alternativas de implementação Fazer bom uso de padrões de projeto Depurar bugs complicados Imitar características úteis em linguagens onde elas faltam 65 Inspirado por Programming Language Pragmatics Michael L. Scott *

Slide 66

Slide 66 text

VAMOS APRENDER A TEORIA CODANDO? Programming Languages: An Interpreter-based Approach (1990) Samuel Kamin Dica da bibliografia de Peter Norvig 66

Slide 67

Slide 67 text

Luciano Ramalho [email protected]
 Twitter: @ramalhoorg Github: github.com/ramalho/go-paradigma/ Slides: speakerdeck.com/ramalho MUITO GRATO!