graciano codes

Sotaques em programação

# Qual sua linguagem favorita?

Escuto tanto esta pergunta que já me acostumei a responder na ponta da língua: a que paga o meu salário. Não significa que não tenho preferências. Definitivamente quero distância de coisas mais antigas da microsoft como Visual Basic, SQL Server ou .NET.

Entretanto, a ideia aqui não é resmungar ou ser clubista. Quero propor a ideia de que existe um “sotaque” em programação. Na minha caminhada, observei esse “fenômeno” acontecer muitas vezes em circunstâncias parecidas:

  • quando a pessoa trabalhou muitos anos numa única linguagem e de repente precisou mudar
  • quando se usa uma tecnologia que poucas pessoas na equipe tem conhecimento básico
  • algumas outras circunstâncias somadas a prazos apertados demais, impossibilitando que os trabalhadores possam estudar os conceitos

# Quando um “javeiro raíz” não pegou a ideia do node

# Injeção de dependência

Observe este pedaço de código:

const { createReadStream } = require('fs')
const { createInterface } = require('readline')
const { sqsPush } = require('../service/sqsPush')

const dependencies = {
    sqsPush,
    createReadStream,
    createInterface,
}

const processaArquivo = async (file) => {
    const { sqsPush, createReadStream, createInterface } = Object.assign({}, dependencies)
    // ... código que usa as funções sqsPush, createReadStream, createInterface...
}

O autor deste código quis reproduzir um conceito de frameworks MVC (principalmente java) chamado injeção de dependência. Este conceito foi feito para facilitar testes automatizados instanciando objetos automaticamente. Também há o uso curioso do desctruct com o Object.assign({}, ... que mostra a intenção de copiar os valores das funções importadas no require para um novo bloco de memória dentro apenas do escopo da função que se deseja implementar.

O que acontece é que o javascript não é uma linguagem fortemente tipada ou mesmo que obrigue todas as variáveis a serem um objeto de uma classe. Funções são um tipo em javascript. Logo, todas as “dependências” que estão ali não precisam ser instanciadas e aplicação deste conceito se torna desnecessária. O código abaixo funciona do mesmo jeito e tem exatamente o mesmo nível de dificuldade de ser testado num jest da vida:

const { createReadStream } = require('fs')
const { createInterface } = require('readline')
const { sqsPush } = require('../service/sqsPush')

const processaArquivo = async (file) => {
    // ... código que usa as funções sqsPush, createReadStream, createInterface...
}

# DAO

Um outro exemplo seria alguém criar um objeto DAO para abstrair chamadas do sequelize ou qualquer outra lib ORM. Esse anti-pattern eu já vi mais vezes do que gostaria e vou poupar o leitor de um exemplo em código.

# A chegada

Num outro lado da moeda, trazer conceito de uma linguagem para outra pode nem sempre ser algo negativo como os exemplos acima. O Coffescript foi inspirado em Ruby e Python. E acabou influenciando os rumos do javascript moderno (es6+), com a criaçao das arrow functions. Conceitos do Rust como o enum Option, que remove a necessidade de um ponteiro nulo podem ser reproduzidos em praticamente qualquer linguagem e facilitar a vida do coleguinha.

No filme A Chegada (2016), é apresentada a tal “Hipótese Sapir-Whorf”, que diz que o idioma que falamos determina a maneira como pensamos. Um exemplo muito citado é o número muito grande de termos diferentes que esquimós têm para neve. Porém, a hipótese é uma afirmação bem extrema e no mínimo controversa. Segundo as ideias do Chomsky citadas no link anterior, que tem muito a ver com linguagens de computação todas as linguagens têm uma base gramatical comum. E a explicação do fenômeno da neve dos esquimós vêm mais do uso, ou seja: a hipótese confunde causa com consequência. De qualquer forma, no filme isso é representado de uma maneira mais prática interessante: a cientista só entende as atitudes aparentemente hostis dos aliens quando ela entende o idioma deles. Talvez aprender outras linguagens diferentes das que estamos acostumados nos ajudem a usar essas perspectivas novas para o bem.