Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Go: cadê o paradigma?

Go: cadê o paradigma?

Qual o paradigma da linguagem Go? Isso é uma boa pergunta? Vamos ver um jeito melhor de entender linguagens a fundo.

27c093d0834208f4712faaaec38c2c5c?s=128

Luciano Ramalho

November 17, 2017
Tweet

Transcript

  1. 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
  2. 2 Sometimes you need a blank template.

  3. 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
  4. REVISÃO TÉCNICA DA TRADUÇÃO PT-BR DO GOPL GOPL:
 A Linguagem

    de Programação Go (Novatec, 2016) Donovan & Kernighan 4
  5. TUTORIAL: INTRODUÇÃO A GO COM TDD 5 Apostila e código:

    http://bit.ly/tw-go-tdd
  6. PARADIGMAS Categorias de linguagens de programação 6

  7. GOPL: ÁRVORE GENEALÓGICA DE GO A Linguagem de Programação Go

    (Novatec, 2016) Donovan & Kernighan 7
  8. 8

  9. LINGUAGEM DA CALCULADORA HP-25 9

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

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

    2015) 11
  12. GCD EM C, OCAML E PROLOG 12

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

    L. Scott
  14. UMA CLASSIFICAÇÃO (ZOOM) 14

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

  16. OUTRO LIVRO Princípios de Linguagens de Programação
 (2003) Ana Cristina

    Vieira de Melo Flávio Soares Corrêa da Silva 16
  17. 17

  18. 18 Lógicas

  19. THE LANGUAGE LIST 19

  20. CADÊ AS LINGUAGENS? 20

  21. CATEGORIAS DE LINGUAGENS 21

  22. CATEGORIAS DE LINGUAGENS (2) 22

  23. CATEGORIAS DE LINGUAGENS (3) 23

  24. CATEGORIAS DE LINGUAGENS (4) 24

  25. CATEGORIAS? “Ontology is overrated” — Clay Shirky 25

  26. UMA CLASSIFICAÇÃO BASEADA EM FATOS! 26

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

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

  29. ENSINO DE TEORIA DE LINGUAGENS 29

  30. O PAPER QUE EXPLICA A ABORDAGEM 30

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

  32. TEORIA E PRÁTICA EM PASCAL 32

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

  34. 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
  35. 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
  36. 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
  37. 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
  38. 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
  39. 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
  40. DESIGN PATTERNS Padrões de Projeto 40

  41. 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
  42. PROBLEMAS NA ADOÇÃO DE PATTERNS 42

  43. 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
  44. 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
  45. 45

  46. 46

  47. 47

  48. STRATEGY EM GO Aproveitando as características de Go 48

  49. SELECIONAR UM ALGORITMO EM TEMPO DE EXECUÇÃO 49

  50. 50 Contexto Estratégia Estratégias concretas SELECIONAR UM ALGORITMO EM TEMPO

    DE EXECUÇÃO
  51. STRATEGY EM GO Implementação “clássica” usando interface Implementação usando funções

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

  53. TESTES 53 interface/strategy_test.go

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

  55. CONTEXTO E ESTRATÉGIA 55 interface/strategy.go

  56. ESTRATÉGIA CONCRETA 56 interface/store.go

  57. MAIS ESTRATÉGIAS CONCRETAS 57 interface/store.go

  58. STRATEGY COM FUNÇÕES DE 1ª CLASSE 58

  59. TESTES COM FUNÇÕES 59

  60. ESTRATÉGIAS CONCRETAS COM FUNÇÕES 60

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

  62. INTERFACE X FUNÇÕES DE 1ª CLASSE Na biblioteca padrão, interfaces

    de um método são comuns. 62
  63. 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
  64. CONCLUSÃO Porque aprender os fundamentos 64

  65. 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 *
  66. VAMOS APRENDER A TEORIA CODANDO? Programming Languages: An Interpreter-based Approach

    (1990) Samuel Kamin Dica da bibliografia de Peter Norvig 66
  67. Luciano Ramalho luciano.ramalho@thoughtworks.com
 Twitter: @ramalhoorg Github: github.com/ramalho/go-paradigma/ Slides: speakerdeck.com/ramalho MUITO

    GRATO!