Roteiro
© 2020 ThoughtWorks
Technology
Radar
© 2020 ThoughtWorks
● Technology Radar
● Características
emergentes
● Grandes
tendências
© 2020 ThoughtWorks
© 2020 ThoughtWorks
Linguagens
mencionadas
nos blips
≥ 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
© 2020 ThoughtWorks
© 2020 ThoughtWorks
Adote ou
Experimente
(edições recentes)
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
© 2020 ThoughtWorks
A trajetória
de Kotlin
© 2020 ThoughtWorks
Trajetória de Kotlin
Vol. 16
março
2017:
Avalie
© 2020 ThoughtWorks
Trajetória de Kotlin
Vol. 17
novembro
2017:
Experimente
© 2020 ThoughtWorks
Trajetória de Kotlin
Vol. 18
maio
2018:
Adote
© 2020 ThoughtWorks
Blips
notáveis
features!
features!
features!
features!
features!
features!
features--
features++
Características
emergentes
© 2020 ThoughtWorks
Características
emergentes
© 2020 ThoughtWorks
features!
Orientação a
objetos “2.0”
© 2020 ThoughtWorks
“OOP 2.0”
Soluções alternativas para
reuso sem o forte
acoplamento e a hierarquia
rígida imposta pela herança
● 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
Tipagem
gradual
© 2020 ThoughtWorks
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.
● Body size default to 16 px Open Sans.
● Body size default to 16 px Open Sans.
Text and an image
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.
● Body size default to 16 px Open Sans.
● Body size default to 16 px Open Sans.
Text and an image
© 2020 ThoughtWorks
“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)
● 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{}
Sistemas
de tipos
© 2020 ThoughtWorks
VERIFICAÇÃO DINÂMICA
(durante a execução)
© 2020 ThoughtWorks
VERIFICAÇÃO ESTÁTICA
(antes da execução)
TIPOS
ESTRUTURAIS
TIPOS
NOMINAIS
VERIFICAÇÃO DINÂMICA
(durante a execução)
© 2020 ThoughtWorks
VERIFICAÇÃO ESTÁTICA
(antes da execução)
TIPOS
ESTRUTURAIS
TIPOS
NOMINAISC++
Java
Scala
Go
Ruby
Python
JavaScript
VERIFICAÇÃO DINÂMICA
(durante a execução)
© 2020 ThoughtWorks
VERIFICAÇÃO ESTÁTICA
(antes da execução)
TIPOS
ESTRUTURAIS
TIPOS
NOMINAIS
duck
typing
tipagem
estática
C++
Java
Scala
Go
Ruby
Python
JavaScript
VERIFICAÇÃO DINÂMICA
(durante a execução)
© 2020 ThoughtWorks
VERIFICAÇÃO ESTÁTICA
(antes da execução)
TIPOS
ESTRUTURAIS
TIPOS
NOMINAIS
duck
typing
tipagem
estática
duck
typing
estático
C++
Java
Scala
Go
Scala
Go
Ruby
Python
JavaScript
VERIFICAÇÃO DINÂMICA
(durante a execução)
© 2020 ThoughtWorks
VERIFICAÇÃO ESTÁTICA
(antes da execução)
TIPOS
ESTRUTURAIS
TIPOS
NOMINAIS
duck
typing
tipagem
estática
duck
typing
estático
goose
typing
C++
Java
Scala
Go
Scala
Go
Ruby
Python
JavaScript
Python
Go
VERIFICAÇÃO DINÂMICA
(durante a execução)
© 2020 ThoughtWorks
VERIFICAÇÃO ESTÁTICA
(antes da execução)
TIPOS
ESTRUTURAIS
TIPOS
NOMINAIS
duck
typing
tipagem
estática
duck
typing
estático
goose
typing
C++
Java
Scala
Go
Scala
Go
TypeScript
TypeScript
Ruby
Python
JavaScript
TypeScript
TypeScript
Python
Go
VERIFICAÇÃO DINÂMICA
(durante a execução)
© 2020 ThoughtWorks
VERIFICAÇÃO ESTÁTICA
(antes da execução)
TIPOS
ESTRUTURAIS
TIPOS
NOMINAIS
duck
typing
tipagem
estática
duck
typing
estático
goose
typing
C++
Java
Scala
Go
Scala
Go
TypeScript
Python ≥ 3.8
TypeScript
Ruby
Python
JavaScript
TypeScript
Python ≥ 3.5
Ruby ≥ 3.0
TypeScript
Python
Go
Além dos
paradigmas
© 2020 ThoughtWorks
© 2020 ThoughtWorks
“[...] 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
© 2020 ThoughtWorks
“[...] 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!
© 2020 ThoughtWorks
Palm OS era
programado
em C orientado
a objeto!
(não C++)
PalmPilot Professional photo by Wikipedia user Letdorf—CC BY-SA 3.0
https://creativecommons.org/licenses/by-sa/3.0/deed.en
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.
● Body size default to 16 px Open Sans.
● Body size default to 16 px Open Sans.
Text and an image
© 2020 ThoughtWorks
“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
© 2020 ThoughtWorks
Ao invés de paradigmas...
B
E
A
C
D
G
F
© 2020 ThoughtWorks
Considere as características
B
E
A
C
D
G
F
© 2020 ThoughtWorks
Considere as características:
B
E
A
C
D
G
F
features
© 2020 ThoughtWorks
Características são a chave para
saber usar cada linguagem
Características
funcionais
© 2020 ThoughtWorks
● Closures
○ Pré-requisito para funções
de ordem superior
● Imutabilidade
○ Pré-requisito para
programação concorrente
tolerante a falhas
© 2020 ThoughtWorks
features!
© 2020 ThoughtWorks
© 2020 ThoughtWorks
Concorrência
sem threads
ou callbacks
© 2020 ThoughtWorks
Além de callbacks
● Corrotinas com async/await:
programação assíncrona sem
callbacks ou promises
● Ex.: C#, Python 3, JavaScript ES8
Além de threads e locks (1)
● CSP (Communicating Sequential
Processes): troca de dados e
sincronização via channels
síncronos
● Ex: Go, Clojure
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)
Grandes
tendências
© 2020 ThoughtWorks
Como se preparar:
● Estude uma linguagem funcional
Características funcionais
viram essenciais
Como se preparar:
● Estude uma linguagem funcional
● Experimente uma linguagem funcional
com tipos dinâmicos, para facilitar a
curva de aprendizagem.
Ex: Clojure, Elixir
Características funcionais
viram essenciais
Características funcionais
viram essenciais
Características > paradigmas
Como se preparar:
● Monitore o roadmap de suas linguagens
preferenciais.
Características > paradigmas
Como se preparar:
● Monitore o roadmap de suas linguagens
preferenciais.
● Experimente, divulgue internamente, e
adote novas características relevantes.
Alguns exemplos:
Características > paradigmas
Como se preparar:
● Monitore o roadmap de suas linguagens
preferenciais.
● Experimente, divulgue internamente, e
adote novas características relevantes.
Alguns exemplos:
○ Concorrência sem threads ou callbacks
Características > paradigmas
Como se preparar:
● Monitore o roadmap de suas linguagens
preferenciais.
● Experimente, divulgue internamente, e
adote novas características relevantes.
Alguns exemplos:
○ Concorrência sem threads ou callbacks
○ Tipos estruturais
Características > paradigmas
Como se preparar:
● Monitore o roadmap de suas linguagens
preferenciais.
● Experimente, divulgue internamente, e
adote novas características relevantes.
Alguns exemplos:
○ Concorrência sem threads ou callbacks
○ Tipos estruturais
○ Processamento lazy
Características > paradigmas
Como se preparar:
● Monitore o roadmap de suas linguagens
preferenciais.
● Experimente, divulgue internamente, e
adote novas características relevantes.
Alguns exemplos:
○ Concorrência sem threads ou callbacks
○ Tipos estruturais
○ Processamento lazy
features!
Características > paradigmas
Democratização da
programação
Como se preparar:
● Entenda que pessoas diferentes têm
necessidades diferentes ao adotar
ferramentas, linguagens e técnicas
Democratização da
programação
Como se preparar:
● Entenda que pessoas diferentes têm
necessidades diferentes ao adotar
ferramentas, linguagens e técnicas
● Não nivele “por cima” nem “por baixo”
Democratização da
programação
Como se preparar:
● Entenda que pessoas diferentes têm
necessidades diferentes ao adotar
ferramentas, linguagens e técnicas
● Não nivele “por cima” nem “por baixo”
● Planeje o caminho de migração de
soluções emergentes para produção
em escala, quando necessário
Democratização da
programação
© 2020 ThoughtWorks
“O que permanece é o que
faz sentido para o coletivo.”
- Rosi Teixeira (ThoughtWorks)
Luciano Ramalho
lramalho@thoughtworks.com
Muito grato
© 2020 ThoughtWorks

[XConf Brasil 2020] Linguagens no Technology Radar da ThoughtWorks