Save 37% off PRO during our Black Friday Sale! »

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.

27c093d0834208f4712faaaec38c2c5c?s=128

Luciano Ramalho

March 23, 2021
Tweet

Transcript

  1. None
  2. Roteiro

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

  4. Technology Radar

  5. None
  6. None
  7. None
  8. None
  9. None
  10. None
  11. None
  12. None
  13. Linguagens mencionadas nos blips

  14. None
  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
  16. Adote ou Experimente (edições recentes)

  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
  18. A trajetória de Kotlin

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

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

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

  22. Blips notáveis

  23. None
  24. None
  25. None
  26. features!

  27. None
  28. features!

  29. None
  30. None
  31. features!

  32. None
  33. features!

  34. None
  35. features!

  36. None
  37. None
  38. features!

  39. None
  40. features-- features++

  41. Características emergentes

  42. Características emergentes features!

  43. Orientação a objetos “2.0”

  44. “OOP 2.0” Soluções alternativas para reuso sem o forte acoplamento

    e a hierarquia rígida imposta pela herança
  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
  46. Tipagem gradual

  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
  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
  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)
  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{}
  51. Sistemas de tipos

  52. None
  53. C++ Java Scala Go Ruby Python JavaScript

  54. C++ Java Scala Go Ruby Python JavaScript

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

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

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

    JavaScript TypeScript TypeScript Python Go
  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
  59. Além dos paradigmas

  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
  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!
  62. Palm OS era programado em C orientado a objeto! (não

    C++)
  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
  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
  65. Ao invés de paradigmas...

  66. Considere as características

  67. Considere as características: features

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

  69. Características funcionais

  70. • Closures ◦ Pré-requisito para funções de ordem superior •

    Imutabilidade ◦ Pré-requisito para programação concorrente tolerante a falhas features!
  71. None
  72. None
  73. None
  74. Concorrência sem threads ou callbacks

  75. Além de callbacks • Corrotinas com async/await: programação assíncrona sem

    callbacks ou promises • Ex.: C#, Python 3, JavaScript ES8
  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
  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)
  78. None
  79. Grandes tendências

  80. Como se preparar: • Características funcionais viram essenciais

  81. Como se preparar: • • Clojure, Elixir Características funcionais viram

    essenciais
  82. Características funcionais viram essenciais

  83. Características > paradigmas Como se preparar: •

  84. Características > paradigmas Como se preparar: • •

  85. Características > paradigmas Como se preparar: • • ◦

  86. Características > paradigmas Como se preparar: • • ◦ ◦

  87. Características > paradigmas Como se preparar: • • ◦ ◦

  88. Características > paradigmas Como se preparar: • • ◦ ◦

    ◦ features!
  89. Características > paradigmas

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

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

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

  93. Democratização da programação

  94. “O que permanece é o que faz sentido para o

    coletivo.” - Rosi Teixeira (ThoughtWorks)
  95. Luciano Ramalho lramalho@thoughtworks.com Muito grato