TL;DR: Linguagens com tipagem dinâmica não nos ajudam a pensar em tipos e/ou abstrações. Por isso, tendemos a escrever código procedural.

Esse post é polêmico. Sempre que alguém me pergunta sobre linguagens dinâmicas, eu sempre solto alguma piadinha de mau gosto. Mas, bem, tenho lá meus motivos.

O primeiro deles é o que todos já conhecem. A falta da existência do tipo em tempo de compilação “desarma” um grande aliado: o compilador. Qualquer um que já programou mais do que 2 ou 3 métodos em uma linguagem dinâmica já confundiu a ordem dos parâmetros em uma função, ou já passou um array onde deveria vir lista. Quando você percebe isso? Só em tempo de execução. A desculpa de testes automatizados também não me é justa: por que preciso gastar tempo escrevendo testes para algo que poderia ser feito automaticamente pelo compilador, sem qualquer trabalho para mim?

O segundo é que discordo da “produtividade” em que todos os programadores de linguagens dinâmica alegam, afinal você  “escreve menos”. Quando você cria uma função, você pensa no tipo de todas as coisas que estão lá (esse será o meu ponto principal, que vem a seguir). A diferença é que (novamente) ao deixar isso implícito, você novamente perde o compilador.

Por fim, o que mais me incomoda, é que, quando o programador acostuma a deixar o tipo implícito em seu código, ele passa a “pensar menos nos tipos”. E pensar em tipos/abstrações é, pra mim, o que separa um simples escrevedor de código de um desenvolvedor. Se a linguagem não te dá maneiras claras de definir contratos, tendemos a escrever código linha abaixo de linha, de maneira procedural. Raramente expressamos nossas ideias como abstrações conversando entre si.

Obviamente, a tipagem dinâmica também tem seu espaço. Concordo muito com o artigo, do Erik Meijer e Peter Drayton [1]. Use tipagem estática onde possível, e tipagem dinâmica onde necessário.

[1] Meijer, Erik, and Peter Drayton. “Static typing where possible, dynamic typing when needed: The end of the cold war between programming languages.” OOPSLA, 2004.