Você está na página 1de 13

Tipagem Fraca, Forte, Esttica,

Dinmica e Inferncia de Tipo


por Perera em Jun 5, 2016

Nas ltimas semanas tenho descoberto que existe um dbito tcnico muito
grande em relao a programao.
Dbito tcnico: leia-se uma forma bonita que aprendi a falar para mostrar
que tenho uma grande capacidade de programar sem saber de fato a
aplicao, teoria, filosofia daquilo que est sendo escrito.
Tipagem fraca, forte, dinmica, esttica e inferncia de tipos so 5
conceitos diferentes - s pra ficar bem claro.

Inferncia de Tipo
A inferncia de tipos a capacidade do compilador entender/adivinhar qual
o tipo de dados de determinada varivel sem ela ter sido declarada no cdigo
escrito. Isso, mastigue o conceito com calma tomando a sua cerveja.
Vamos aos exemplos. No C# temos inferncia de tipo ao declarar variveis
locais com o var antes do nome da nossa varivel, tipo:
var inferencia = 10; //Nossa varivel 'inferencia' ter seu
tipo setado em tempo de compilao

A l, que beleza. No declaramos tipo nenhum, mas na hora que o compilador


enxerga o valor ele entende que uma varivel do tipo int, e essa capacidade
que define que uma linguagem infere tipos. Temos PHP, Python , Javascript,
etc. Um exemplo contrrio seria o Java, nela o tipo deve ser determinado na
declarao da varivel (Pelo que pesquisei est tendo um esforo gradual em
colocar a inferncia de tipo no java h algum tempo ver JEP 286: Local-Variable
Type Inferecen ).

Tipagem Forte e Fraca


Uma forma simples de definir a tipagem forte e fraca que, caso ela seja forte,
teremos a verificao de tipos em todas as operaes em tempo de execuo
ou compilao, j a fraca no temos essa verificao.

Por exemplo, temos nosso amigo Javascript que uma tipagem fraca, ou seja,
alm de no ter a capacidade de detectar erros em operaes de tipos
diferentes, ela nos d um resultado nas operaes de tipos diferentes, mas
como assim?
Em Javascript podemos fazer:
'1' + 1 // o resultado ser '11'
'1' + true // o resultado ser 1true

Abra seu navegador e teste amiguinho. O PHP uma outra linguagem de


tipagem fraca.
Um Exemplo de tipagem forte seria o Python. Fazendo as mesmas operaes
do Javascript no python temos:
'1' + 1
Traceback (most recent call last): File "
<stdin>", line 1, in <module>
TypeError: cannot concatenate 'str' and 'int'
objects</module></stdin>

'1' + True
Traceback (most recent call last): File "
<stdin>", line 1, in <module>
TypeError: cannot concatenate 'str' and 'bool'
objects</module></stdin>

Note que PHP tem tipagem fraca e o Python tem tipagem forte mas as
duas linguagens tem Inferncia de Tipos.

Tipagem Esttica e Dinmica


Tipagem Esttica a capacidade de uma linguagem ajudar na segurana de
tipos, onde, a partir do momento que uma linguagem determina o tipo de uma
varivel esse tipo no pode ser alterado durante a compilao, fazendo com
que o jovem programador no se preocupe tanto pois o compilador acusar
erro caso seja alterado o tipo de uma varivel.

Por exemplo, em C#:


var i = 1; //Note que ter a inferncia do tipo inteiro
i = 'A'; //Dar erro de compilao pois o tipo da varivel
inteiro

J na Tipagem Dinmica temos a possibilidade de alterar o tipo da nossa


varivel em tempo de execuo. A essa capacidade definimos uma linguagem
como Dinmica, como por exemplo, o nosso velho amigo Javascript, veja:
var i = 1; //Note que ter a inferncia do tipo inteiro
i = 'A'; //A partir desse momento sua varivel do tipo
string com o valor 'A'. Lance normal, segue o jogo.

Note que o C# tem inferncia de tipo, forte e esttica, j o javascript


tem inferncia de tipo, fraca e dinmica.
Veja que uma linguagem com tipagem dinmica, no implica em uma
linguagem dinmica, e em relao a isso j deixo o post do akita que uma
traduo do post de Steven Devijver que analisa um terceiro post! :)
Um outro objetivo do blog repassar conceito que deveriam ser bsicos, mas
pelo menos na minha cidade, a maioria das pessaos que conversam j vo
direto pra um framework e passam batidos nesse tipo de diferena, o que
acaba influenciando na qualidade dos profissionais, acredito eu.
Eae, vocs sabiam essas diferenas? Eu duvido!

Tipagem fraca/forte e inferncia de tipo


Em desenvolvimento de software muito se fala de tipagem forte e fraca, mas uma
coisa que muita gente ainda no entende, o mesmo quanto a inferncia de tipo, que por
muitas das vezes confundido com tipagem e vice-versa. Frequentemente pessoas
falam mal de uma linguagem de programao porque no entendem estes conceitos,
por isso resolvi fazer este post para explicar melhor.
Primeiro inferncia de tipo. O que isso?
Quando estamos programando em um linguagem esttica como Java ou C# devemos
declarar os tipos das variveis obrigatoriamente. Em Java declaramos o tipo da
varivel e somente podemos atribuir valores deste tipo para esta, em C# porm, alm

desta forma podemos usar a palavra reservada var que no momento da atribuio o
compilador ir verificar o tipo do valor que est sendo atribudo e automaticamente ir
entender que aquela varivel do mesmo tipo do valor que queremos guardar. Veja o
exemplo abaixo nos arquivos InferenciaDeTipo.java e InferenciaDeTipo.cs.
Repare que em Java no temos o recurso de inferncia de tipo fazendo com que o
arquivo no seja compilado, j em C# ele descobrir o tipo pra voc, desde que use
o var na declarao da varivel.
Linguagens como PHP, Ruby, Python, Javascript e muitas outras inferem o tipo
sempre, nessas linguagens voc no declara os tipos.
A partir deste momento comea a confuso, onde muita gente comea a falar mal das
linguagens dinmicas por confundir inferncia de tipo com tipagem fraca. Pois bem
vamos l, so duas coisas completamente diferentes, s porque infere o tipo no quer
dizer que tenha tipagem fraca.
O que tipagem forte e fraca?
Bem, veja o Java e o C#, eles te obrigam a declarar os tipos das variveis. Em Java voc
sempre ter de declarar os tipos. Em C# voc pode usar o var para inferir o tipo e
deixar o seu cdigo mais limpo mas nem todos os lugares poder fazer isso, com
variveis que pertencem a uma classe por exemplo obrigatria a declarao do tipo.
Mas o que torna estas linguagens fortemente tipadas no s a declarao explcita de
tipo, mas sim o fato de que voc no conseguir realizar alguns tipos de operaes com
variveis de tipos diferentes, como somar um nmero int com boolean, ou subtrair um
float de uma string e por a vai.
Linguagens como Ruby e Python inferem o tipo para voc mas so fortemente tipadas.
Veja o exemplo abaixo no arquivo tipagem_forte.rb e tipagem_forte.py. Execute e
ver que no consegue somar/subtrair nmero com texto, se tentar outras operaes
com tipos diferentes ver que o interpretador ir acusar um erro.
J linguagens como PHP e Javascript os tipos tambm so inferidos porm sua tipagem
fraca o que faz com que anomalias aconteam quando se executam operaes com
valores de tipos diferentes. Primeiro execute o cdigo do
arquivo tipagem_fraca.php, nele estamos somando um int com string que por
coincidncia tem um nmero no meio, e o que o interpretador faz? Ao executar voc
ver que ele converteu sua string para int e somou ao outro valor sem nem acusar nada.
Com o arquivo tipagem_fraca.js acontece a mesma coisa, aqui estamos somando um
int com boolean, ele no acusa problema, ele simplesmente realiza a converso do
boolean para 1 e soma com o outro valor.
Com strings o Javascript no apresenta o problema do PHP porque ele as trata de
forma diferente, realizando a operao de concatenao. Em Java e C# ao somar uma
string com outro valor tambm realizada uma concatenao pois strings tambm so
tratadas de forma diferente onde o operador de soma sobrecarregado com outro
comportamento. Como podem ver, algumas linguagens tem tratamentos especiais para
certos recursos, seja por questes de desempenho ou praticidade.
using System;

public class InferenciaDeTipo


{
public static void Main(String[] args)
{
int valor1 = 10;

String valor2 = "Valor";

var permitido1 = 1;
var permitido2 = "Permitido";
}
}
view rawInferenciaDeTipo.cs hosted with

by GitHub

public class InferenciaDeTipo {


public static void main(String[] args){
int valor1 = 10;
String valor2 = "Valor";

naoPermitido = 42;
}
}
view rawInferenciaDeTipo.java hosted with

by GitHub

print 42.0 - " resposta pra tudo no universo "


view rawtipagem_forte.py hosted with

by GitHub

puts 42 + "tipagem forte"


view rawtipagem_forte.rb hosted with

by GitHub

// WTF
console.log(10 + true);
view rawtipagem_fraca.js hosted with

by GitHub

<?php
// WTF
echo "5 laranjas" + 10 . "\n";
echo 10 + "5 laranjas" . "\n";
// OK
echo 10 . "5 laranjas" . "\n";
?>
view rawtipagem_fraca.php hosted with

Espero que minha explicao tenha sido concisa.

by GitHub

Qualquer dvida contribua com um comentrio para que eu possa melhorar/corrigir o


post.

H uma certa confuso em vrios termos sobre este assunto. Em alguns casos
no h uma definio formal aceita universalmente.
Popularmente as linguagens so classificadas pela sua tipagem, ento linguagens
estticas formalmente so linguagem que possuem tipagem esttica. E linguagens
dinmicas possuem tipagem dinmica.
Algumas linguagens podem ser classificadas como dinmicas por terem outras
caractersticas. Elas permitem execuo de cdigo arbitrrio ( eval) ou a
transformao de cdigos existentes em tempo de execuo. Cada vez mais
comum as linguagens modernas permitirem estas flexibilidades. No importa a
tipagem, ento formalmente existem linguagens que so dinmicas por esta
definio e estticas pela tipagem.

Definio
Esttica
A definio bsica da tipagem esttica que uma linguagem de programao pode
ter como caracterstica que h uma verificao dos tipos usados em dados e
variveis para garantir que sempre est sendo usado um tipo que esperado em
todas as situaes. Esta verificao feita no cdigo fonte pelo processo de
compilao. Esta anlise ajuda na chamada segurana de tipos na utilizao dos
dados pelo programa permitindo que o programador se preocupe menos com
esta questo. O compilador fornece garantias que alguns problemas no podero
ocorrer aps o programa passar por esta verificao, ou seja, erros so detectados
logo, antes do programa ser efeticamente executado.
Uma varivel no pode mudar seu tipo.
No entanto a tipagem esttica pode causar uma falsa sensao de segurana. S
uma parte dos erros podem ser descobertos antecipadamente.
Exemplo (est em C# mas poderia bem ser pseudocdigo):
var x = 1;
x = "1"; //erro de compilao, no pode trocar o tipo da varivel

Dinmica
Na tipagem dinmica esta verificao tambm ocorre mas ela feita em cima do
dado em si, j que as variveis podem conter qualquer tipo de dado. Claro que em
determinado momento uma varivel s pode conter um tipo de dado e isto
verificado. Mas a principal diferena que a esta verificao feita em tempo de

execuo. Isto feito atravs de uma infraestrutura auxiliar (uma mquina virtual
ou uma biblioteca normalmente chamada de runtime). comum o programador ter
que fazer suas prprias verificaes no programa ou em cdigos externos de teste
para garantir que todos os tipos esto corretos nos momentos certos. O
programador tem que se preocupar mais com os tipos embora em solues
simples pode parecer que a preocupao no seja necessria.
O que dinmico efetivamente o tipo da varivel. Entender e documentar os
tipos ainda so necessrios. H linguagens que incentivam fazer a documentao
no cdigo com notao hngara.
Dados precisam ser representados concretamente no computador. Varivel
um design pattern. Portanto uma abstrao. Dados no podem assumir vrias
formas, no mximo pode ser interpretados de formas diferentes em casos
especficos. Variveis podem se referenciar a tipos de diferentes. Portanto a
tipagem dinmica costuma ser um caso especial da tipagem esttica. Segundo
Bob Harper, um dos criadores da linguagem Standard ML, "uma linguagem
dinamicamente tipada uma linguagem estaticamente tipada com apenas um tipo
esttico".
Na prtica a tipagem dinmica uma abstrao tambm. H uma iluso que voc
pode se referenciar a um dado que possui diferentes tipos mas na prtica existe
apenas um marcador e h um apontamento para um dado esttico diferente.
As tcnicas mais comuns para alcanar esta iluso o uso de um tipo unio
(union em C/C++) e/ou ponteiros sem especificao de tipo ( void * em C/C++).
Todos os dados tero algum overhead de memria.
Exemplo (est em JavaScript mas poderia ser pseudocdigo, note que a sintaxe
idntica ao exemplo anterior mas a semntica diferente)
var x = 1;
x = "1"; //operao normal, o tipo que era um number passar ser string

Performance
Outra grande diferena em relao a performance. Embora seja possvel fazer
otimizaes em um programa escrito com "linguagem dinmica" para aproximar ou
at ultrapassar a performance dos programas escritos em "linguagens estticas",
pela dificuldade de alcanar isto normalmente no feito com eficcia. Em teoria
um compilador JIT tem mais condies de otimizar cdigo com informaes
precisas de como o programa ser executado e mesmo na prtica pode at
conseguir algum resultado melhor isoladamente.
Por outro lado se voc j sabe com o que vai lidar, no precisa ter nada no cdigo
gerado auxiliando o funcionamento no programa e o prprio programa no precisa
ter certas verificaes escritas pelo programador. Se a verificao feita antes da
execuo um programa com tipagem esttica no precisa ter este trabalho durante
a execuo.

No ajuda tambm o fato de que a maioria dos programas com tipagem dinmica
vo rodar em uma mquina virtual j que isto facilita o desenvolvimento da
linguagem e permite algumas flexibilidades extras normalmente desejveis em
"linguagens dinmicas".
Na prtica as linguagens no costumam ser 100% qualquer coisa. Ferramentas
pragmticas sabem quando fugir um pouco de um conceito para dar melhor
vantagem para o programador.

Linguagens hbridas
Existem as linguagens hbridas. Na prtica no possvel ter as duas formas de
tipagem mas possvel usar parte de um ou de outro conceito.

Linguagem esttica com tipos dinmicos


Quando uma linguagem considerada esttica, formalmente ela tem tipagem
esttica, ela pode ter a infraestrutura necessria para guardar dados diferentes em
uma varivel. Mas os dados so guardados de uma forma diferente dos outros
tipos. Voc ter um tipo esttico que pode guardar dados dinamicamente, mas a
linguagem ainda tem tipagem esttica em sua essncia.
A grosso modo a linguagem usa uma estrutura de dados extra para guardar o seu
tipo e indicar onde est o dado real. Normalmente feito na biblioteca e costuma
ter auxlio do compilador apenas para indicar que a verificao normalmente feita
deve ser relaxada j que a verificao ser feita por esta biblioteca at certo ponto
e tambm pelo programador para evitar que determinados erros sero gerados
em runtime atravs desta biblioteca.

Linguagem dinmica com tipos estticos


Linguagem com tipagem dinmica no pode efeticamente ser parcialmente
estticas. Afinal uma linguagem dinmica, formalmente que a tipagem seja
dinmica, deve sempre esperar qualquer tipo. Se ela comear esperar um tipo
especfico e fazer a verificao antes da execuo, ela se transforma em
"linguagem esttica". No possvel reduzir o nvel de abstrao.
at possvel prover uma verificao de tipos anterior como recurso adicional da
linguagem mas no faz muito sentido se no vier acompanhado da mudana na
forma com que os dados so gerenciados na memria. Se o programa precisa ter
seus tipos fixos e garantidos antecipadamente seria um desperdcio ele usar uma
estrutura que permita ter vrios tipos. Esta estrutura tem custo de memria (tag do
tipo, referncias para o tipo em todas situaes *) e de processamento (indireo
extra, seleo do dado/mtodo especfico a ser utilizado).

Tipagem manifesta
possvel uma "linguagem dinmica" usar tipagem manifesta sem mudar sua
caracterstica de tipagem dinmica. A vantagem pequena ou at questionvel.
Mas tambm h casos de linguagens que conseguem compilar partes do cdigo
com tipagem esttica e partes com tipagem dinmica. A interface entre as partes
precisam ser normalizadas para um jeito ou outro. Curiosamente algumas
preferem se definir como estticas ou dinmicas para tentar incutir uma cultura
predominante e usar a outra como exceo. Os puristas, para o bem ou para o
mal, consideram uma escolha ruim. Na verdade existem duas linguagens muito
semelhantes neste caso.
Algumas linguagens estticas possuem referncias para tipos quando os dados
sero armazenados no heap. E mesmo no stack a informao ainda existir no
cdigo para permitir reflexo, mas no haver consumo de memria no stack para
guardar o tipo.
*

Inferncia
Tipagem esttica no significa que todos os tipos precisam ser declarados
explicitamente. comum, na maioria das situaes, que o compilador consiga
inferir o tipo de uma varivel de acordo com sua atribuio ou at mesmo sua
utilizao (menos comum).
A grande vantagem da tipagem esttica est mais no fato que a varivel no poder
mudar seu tipo. Isto realmente ajuda muito o desenvolvimento. Ter que escrever o
tipo explicitamente ajuda pouco ou nada. Alguns acham que fica mais legvel
quando o tipo escrito, outros acham que apenas deficincia do compilador.
Ento possvel ter uma "linguagem esttica" que usa tipagem implcita reduzindo
parcialmente a cerimnia que estas linguagens costumam ter.

Hack
O PHP possui a possibilidade de fazer uma verificao de tipos antes da execuo
mas isto ajuda pouco porque a linguagem costuma ser executada de forma
interpretada e principalmente porque ela no pode verificar todos os tipos, todas as
situaes, portanto voc no tem segurana alguma. A segurana definida pelo
elo mais fraco. Durante a execuo tudo dinmico.
No conheo a linguagem Hack o suficiente para dizer como ela funciona mas
parece que ela possui tipagem esttica.
Eventualmente pode-se usar o tipo mixed que aquela estrutura de dados que
permitir que qualquer dado seja guardado ali. provvel que o compilador trate
este tipo de forma diferente. O programa trata dados de forma dinmica por

exceo, o programador diz que ali tudo pode acontecer porque isto que ele
quer.
Por vrias razes parece que Hack o PHP que bebe na gua do C#, me parece
que o mixed se comporta como o dynamic do C#.

Vantagens e desvantagens
Muitas vezes as vantagens e desvantagens variam de acordo com os olhos de
quem v. Programadores discordam do que realmente seja uma vantagem, at
porque quase tudo uma questo de trade-off, ento [ mais fcil falar em
diferenas. Algumas delas podem ser:

As
principais
vantagens
das
"linguagens
estticas"
so
a segurana, performance e auxlio
em
tempo
de
desenvolvimento (refatorao, completao de cdigo, informao auxiliar,
cobertura de cdigo etc.).
As "linguagens dinmicas" so flexveis, rpidas para prototipar, concisas.

bom entender que os bugs mais complicados continuam complicados igualmente


nas duas tipagens.
Certamente h uma vantagem nas "linguagens dinmicas" quando se pensa no
desenvolvimento da prpria linguagem. Definir a linguagem e criar uma
implementao bsica muito mais simples que uma "linguagem esttica". Porm
para criar uma implementao poderosa, que possa resolver algumas das suas
desvantagens, se torna um trabalho dificlimo. At hoje ningum resolveu todas
desvantagens.

Tipagem forte e fraca


Algumas vezes estes conceitos so confundidos com tipagem forte e fraca. Isto se
explica em parte porque a fora da tipagem no bem definida e no
universalmente aceita.
Tipagem forte costuma ser a caracterstica que no permite um mesmo dado ser
tratado como se fosse de outro tipo. muito comum linguagens estticas terem
tipagem forte. Mas existem excees.
Isto d mais robustez ao cdigo.
C, por exemplo, permite que um dado seja acessado/interpretado como se fosse
outro. Pode, por exemplo:

Gravar um int e acess-lo como se fosse um ponteiro.


Gravar um float e acessar como se fosse um int. certo que o resultado
ser catastrfico neste caso, mas possvel.
Obter um 0 ser considerado falso ou outros nmeros (no importa de que
tipo) serem interpretados como verdadeiro em operaes que exigem um
booliano.
Gravar dois short em sequncia e ler como um int. Provavelmente nada til
ser obtido mas possvel.
Gravar "SOpt" e ler isto como se fosse um int, sei l porque.

C uma linguagem de tipagem fraca. C++ tambm, apesar dela tentar reforar um
estilo onde isto no seja to usado.
Os compiladores de C/C++ tentam evitar que isto seja usado abusivamente.
Da conclumos que segurana de tipos no uma caracterstica inerente de
linguagens ditas estticas. A segurana pode ser quebrada por outros
fatores. Type safety outro conceito diferente que pode ser confundido
erroneamente com tipagem forte e tipagem esttica.
Muitas "linguagens dinmicas" possuem tipagem forte, mas outras possuem
tipagem fraca, normalmente criando coeres implcitas. comum existir

coero em algumas situaes sob regras definidas. Exemplo: "1" == 1


verdadeiro e 1 + "1" d "11".
A coero implcita tem a vantagem de tornar o cdigo ligeiramente mais curto. Isto
costuma ser caracterstica de linguagens de script, onde o tamanho do cdigo faz
diferena. Ento, linguagens feitas para desenvolver aplicaes, em oposio
scripts, no deveriam ter esta caracterstica (helloPHP).
A definio destes termos no ajudam muito e dizer que uma linguagem
fracamente ou fortemente tipada de forma exclusiva tambm no costuma ser
verdade.

Linguagens de script
Cada vez mais fica difcil definir linguagens de script. Elas costumam ser
dinmicas mas nada impede que sejam estticas.
A tipagem dinmica d mais flexibilidade e ajuda fazer aplicaes pequenas
rapidamente. Estas linguagens costumam exigir pouca cerimnia e a tipagem
dinmica prov pouca cerimnia na tipagem. Mas mais uma questo de
adequao do que uma exigncia.
Linguagens dinmicas costumam executar mais de forma interpretada do que
compilada e outro fator indireto que ajuda a serem usadas para fazer scripts.
Mas apenas um facilitador, novamente, no uma exigncia.
Nenhuma linguagem quer perder espao por isso cada vez mais as linguagens (de
tipagem) estticas permitem caractersticas de tipagem dinmicas, reflexo,
conciso, e execuo de forma simplificada (iluso de interpretao). Assim elas
podem ser consideradas de script tambm, apesar de no ser seu foco principal.
Alm da adequao, a caracterstica de script est mais ligada implementao
do que linguagem em si.

Uma reflexo
Se uma linguagem permite que seus tipos estticos possuam valores invlidos ou
que no correspondem ao que se espera neste tipo, um null por exemplo, ela
ainda tem tipagem esttica? Parece que sim, mas h dvida se deveriam. Quebra
a segurana de tipos e de uma certa forma pode ser interpretado como o dado
podendo ter dois tipos. Obriga uma verificao em runtime para garantir que no
haver problemas com o tipo.

Qual melhor?
A pergunta que no quer e provavelmente nunca vai calar : qual melhor?

bvio que no h universalmente uma melhor que a outra. Sempre podemos


falar o clich que existe uma ferramenta melhor para um problema.
Na prtica eu vejo que a escolha recai, na maioria das vezes, em gosto e
experincia. E isto bom. Eu costumo dizer que antes de escolher a melhor
ferramenta para o problema, escolha algo que voc saiba e se sente confortvel
em usar: "a melhor ferramenta aquela que voc sabe usar". a velha disputa
entre engenheiros que querem que tudo seja perfeito e administradores que
querem que venha o melhor resultado. Uma serra eltrica corta madeira mais
rpido e com mais preciso. Um marceneiro de fim de semana pode se machucar
com uma serra eltrica.
Claro que h casos que tecnicamente uma melhor que a outra mas isto est
cada vez mais sutil.
Minha obervao pessoal que programadores de "linguagens dinmicas"
costumam pensar menos no problema e criam designs excessivamente
simplificados trazendo problemas futuros. Mas h casos que um design melhor
no vantagem.
Por outro lado vejo que programadores de "linguagens estticas" tendem a pensar
demais nos problemas e criam designs excessivamente complicados sem trazer
muitas vantagens futuras e no resolvendo todos os problemas futuros.
Note que isto no define a qualidade do programador e muito menos que 100%
dos programadores so assim em 100% dos casos. H casos que o oposto
acontece. E deveria mesmo. Quando se programa em "linguagens dinmicas" o
planejamento antecipado costuma ser mais importante.
No posso afirmar que a tipagem em si seja responsvel pela tendncia (se ela for
verdadeira). Pode ser o tipo de programador que a tipagem atrai. o surfista indo
ao mar com ondas e no o mar com ondas fazendo o sujeito virar surfista. Talvez
as pessoas escolham a tipagem pelos motivos errados.
O que eu vejo acontecer muito que programadores que usam "linguagens
estticas" no usam as facilidades dinmicas existentes nestas linguagens a no
ser que no tenha outro jeito. E os programadores de "linguagens dinmicas"
acham que verificar os contratos nunca deveriam ser feitos dentro do cdigo (de
fato estas linguagens no costumam fornecer facilidades para isto). No sei se
deveria ser assim.