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

2010-2030: linguagens no Technology Radar

2010-2030: linguagens no Technology Radar

Nessa palestra veremos quais linguagens ganharam destaque desde 2010 no ThoughtWorks Technology Radar, que registra o uso de tecnologias em grandes empresas.

Considerando essa linguagens, identificamos algumas características emergentes, e através delas podemos imaginar o como serão as linguagens mais importantes nos próximos 10 anos.

Luciano Ramalho

March 23, 2021
Tweet

More Decks by Luciano Ramalho

Other Decks in Programming

Transcript

  1. View Slide

  2. Roteiro

    View Slide

  3. ● Technology Radar
    ● Características
    emergentes
    ● Grandes
    tendências

    View Slide

  4. Technology
    Radar

    View Slide

  5. View Slide

  6. View Slide

  7. View Slide

  8. View Slide

  9. View Slide

  10. View Slide

  11. View Slide

  12. View Slide

  13. Linguagens
    mencionadas
    nos blips

    View Slide

  14. View Slide

  15. ≥ 35 ≥ 17 ≥ 10
    203 JavaScript 31 C# 13 R
    110 Java 29 Go 13 Swift
    066 Python 25 TypeScript 12 Objective-C
    045 Ruby 20 Kotlin 12 Rust
    040 Clojure 19 PHP 11 C++
    035 Scala 17 F# 10 Groovy
    Linguagens: 10 ou mais menções

    View Slide

  16. Adote ou
    Experimente
    (edições recentes)

    View Slide

  17. Adote Experimente
    março 2017 Elixir
    novembro 2017 Python 3 Kotlin
    maio 2018 Kotlin
    novembro 2018 TypeScript
    abril 2019 TypeScript Rust
    novembro 2019 Flutter (Dart)
    maio 2020 Rust
    outubro 2020 Rust

    View Slide

  18. A trajetória
    de Kotlin

    View Slide

  19. Trajetória de Kotlin
    Vol. 16
    março
    2017:
    Avalie

    View Slide

  20. Trajetória de Kotlin
    Vol. 17
    novembro
    2017:
    Experimente

    View Slide

  21. Trajetória de Kotlin
    Vol. 18
    maio
    2018:
    Adote

    View Slide

  22. Blips
    notáveis

    View Slide

  23. View Slide

  24. View Slide

  25. View Slide

  26. features!

    View Slide

  27. View Slide

  28. features!

    View Slide

  29. View Slide

  30. View Slide

  31. features!

    View Slide

  32. View Slide

  33. features!

    View Slide

  34. View Slide

  35. features!

    View Slide

  36. View Slide

  37. View Slide

  38. features!

    View Slide

  39. View Slide

  40. features--
    features++

    View Slide

  41. Características
    emergentes

    View Slide

  42. Características
    emergentes
    features!

    View Slide

  43. Orientação a
    objetos “2.0”

    View Slide

  44. “OOP 2.0”
    Soluções alternativas para
    reuso sem o forte
    acoplamento e a hierarquia
    rígida imposta pela herança

    View Slide

  45. ● Menos herança, mais composição
    ● Suporte a polimorfismo
    independente de herança
    ● Ênfase em interfaces, protocolos
    e tipos estruturais
    ● Extension methods
    ● Linguagens que exemplificam:
    Go, Julia, Python, TypeScript
    Elementos de OOP 2.0

    View Slide

  46. Tipagem
    gradual

    View Slide

  47. Body size default to 16 px Open Sans
    Light. Place your image and “send to the
    back” to make use of the white mask to
    create the angle required.


    Text and an image

    View Slide

  48. Body size default to 16 px Open Sans
    Light. Place your image and “send to the
    back” to make use of the white mask to
    create the angle required.


    Text and an image

    View Slide

  49. “Static typing is a powerful tool to help programmers
    express their assumptions about the problem they are
    trying to solve and allows them to write more concise
    and correct code. Dealing with uncertain assumptions,
    dynamism and (unexepected) change is becoming
    increasingly important in a loosely coupled distributed
    world. [...] Static typing where possible,
    dynamic typing when needed!”
    - Erik Meijer and Peter Drayton (Microsoft Research)

    View Slide

  50. ● Linguagens com tipos dinâmicos
    adotam tipagem estática gradual.
    Ex: TypeScript, Python 3.5, Ruby 3
    ● Linguagens com tipos estáticos
    adotam um tipo dynamic.
    Ex: C#, Kotlin/JS*, Go**
    O caminho do meio
    * Não Kotlin para JVM ** interface{}

    View Slide

  51. Sistemas
    de tipos

    View Slide

  52. View Slide

  53. C++
    Java
    Scala
    Go
    Ruby
    Python
    JavaScript

    View Slide

  54. C++
    Java
    Scala
    Go
    Ruby
    Python
    JavaScript

    View Slide

  55. C++
    Java
    Scala
    Go
    Scala
    Go
    Ruby
    Python
    JavaScript

    View Slide

  56. C++
    Java
    Scala
    Go
    Scala
    Go
    Ruby
    Python
    JavaScript
    Python
    Go

    View Slide

  57. C++
    Java
    Scala
    Go
    Scala
    Go
    TypeScript
    TypeScript
    Ruby
    Python
    JavaScript
    TypeScript
    TypeScript
    Python
    Go

    View Slide

  58. C++
    Java
    Scala
    Go
    Scala
    Go
    TypeScript
    Python ≥ 3.8
    TypeScript
    Ruby
    Python
    JavaScript
    TypeScript
    Python ≥ 3.5
    Ruby ≥ 3.0
    TypeScript
    Python
    Go

    View Slide

  59. Além dos
    paradigmas

    View Slide

  60. “[...] nossos padrões assumem recursos de
    linguagem do nível de Smalltalk e C++.
    Se estivéssemos assumindo o uso de
    linguagens procedurais, teríamos incluído
    padrões como Herança, Encapsulamento
    e Polimorfismo.”
    - Gamma, Helm, Johnson & Vlissides—Padrões de Projeto

    View Slide

  61. “[...] nossos padrões assumem recursos de
    linguagem do nível de Smalltalk e C++.
    Se estivéssemos assumindo o uso de
    linguagens procedurais, teríamos incluído
    padrões como Herança, Encapsulamento
    e Polimorfismo.”
    - Gamma, Helm, Johnson & Vlissides—Padrões de Projeto
    features!

    View Slide

  62. Palm OS era
    programado
    em C orientado
    a objeto!
    (não C++)

    View Slide

  63. Body size default to 16 px Open Sans
    Light. Place your image and “send to the
    back” to make use of the white mask to
    create the angle required.


    Text and an image

    View Slide

  64. “Programming language ‘paradigms’ are
    a moribund and tedious legacy of a bygone
    age. Modern language designers pay them
    no respect, so why do our courses slavishly
    adhere to them?”
    Shriram Krishnamurthi—Brown University

    View Slide

  65. Ao invés de paradigmas...

    View Slide

  66. Considere as características

    View Slide

  67. Considere as características:
    features

    View Slide

  68. Características são a chave para
    saber usar cada linguagem

    View Slide

  69. Características
    funcionais

    View Slide

  70. ● Closures
    ○ Pré-requisito para funções
    de ordem superior
    ● Imutabilidade
    ○ Pré-requisito para
    programação concorrente
    tolerante a falhas
    features!

    View Slide

  71. View Slide

  72. View Slide

  73. View Slide

  74. Concorrência
    sem threads
    ou callbacks

    View Slide

  75. Além de callbacks
    ● Corrotinas com async/await:
    programação assíncrona sem
    callbacks ou promises
    ● Ex.: C#, Python 3, JavaScript ES8

    View Slide

  76. Além de threads e locks (1)
    ● CSP (Communicating Sequential
    Processes): troca de dados e
    sincronização via channels
    síncronos
    ● Ex: Go, Clojure

    View Slide

  77. Além de threads e locks (2)
    ● Actor Model: funções autônomas
    comunicando-se por mensagens
    assíncronas
    ● Ex:
    ○ Linguagens Erlang, Elixir
    ○ Framework Akka (Scala, Java)

    View Slide

  78. View Slide

  79. Grandes
    tendências

    View Slide

  80. Como se preparar:

    Características funcionais
    viram essenciais

    View Slide

  81. Como se preparar:


    Clojure, Elixir
    Características funcionais
    viram essenciais

    View Slide

  82. Características funcionais
    viram essenciais

    View Slide

  83. Características > paradigmas
    Como se preparar:

    View Slide

  84. Características > paradigmas
    Como se preparar:


    View Slide

  85. Características > paradigmas
    Como se preparar:



    View Slide

  86. Características > paradigmas
    Como se preparar:




    View Slide

  87. Características > paradigmas
    Como se preparar:





    View Slide

  88. Características > paradigmas
    Como se preparar:





    features!

    View Slide

  89. Características > paradigmas

    View Slide

  90. Democratização da
    programação
    Como se preparar:

    View Slide

  91. Democratização da
    programação
    Como se preparar:


    View Slide

  92. Democratização da
    programação
    Como se preparar:



    View Slide

  93. Democratização da
    programação

    View Slide

  94. “O que permanece é o que
    faz sentido para o coletivo.”
    - Rosi Teixeira (ThoughtWorks)

    View Slide

  95. Luciano Ramalho
    [email protected]
    Muito grato

    View Slide