Executando verificação de segurança...
16

DDD e linguagem Ubíquqia: Podemos misturar inglês e português?

Primeiramente, olá, tudo bem com você?

Não é novidade que todo desenvolvedor um dia cairá no dilema: devo criar tudo em inglês ou em português? Pior ainda quando temos um projeto bilíngue onde temos métodos lindos como createPagamento(). Bom, esta é uma polêmica.

Suponha que desenvolveremos um novo projeto utilizando DDD e decidimos que tudo será escrito em inglês visando uma terceirização com indianos mais para frente.

Na modelagem do DDD temos como base os domínios do negócio e é muito importante que o software converse com o negócio e uma das formas para isso acontecer utilizando a linguagem ubíqua.

Quando pensamos em um sistema orientado ao domínio, nosso sistema não terá mais aquela classe User ligada em tudo. Ao invés disso, teremos o Customer, Freelancer, ProjectOwner. Devemos usar o termo do negócio, do domínio. Mas até agora está tudo bem, conseguimos facilmente traduzir um Gerente de Projeto para um ProjectManager tranquilamente. Em outros casos, no entanto, o termo do negócio é muito específico do país e nesse caso entra o dilema de como lidamos com isso.

Imagine que nosso domínio será, por exemplo, uma ferramenta para administradora de fundos imobiliários. Um Fundo imobiliário é um produto muito específico que tem suas regras e existência por si só.

Deveríamos tentar converter isso para o inglês para não deixar nosso código "bilingue"?

Existem produtos semelhantes nos Estados Unidos chamados de REITS, mas para quem é investidor, existe diferença nos termos, ou, para o negócio um FII é diferente de um REIT.

Este foi só um exemplo, acredito que outras pessoas conheçam outros destes exemplos e é aqui que paro para "ouvir" suas valorosas opiniões.

Carregando publicação patrocinada...
9

Olha, eu já sofri por isso. Não sei se um dia vou encontrar o ponto ideal, mas meu ponto de vista hoje vai meio de encontro ao que já disseram em outros comentários.

Português e inglês

Na época da faculdade (e antes também), eu acabava fazendo as coisas meio misturado. Um pouco em português, um pouco em inglês. Não tinha um padrão exato. Acabavam aparecendo coisas como isImportante, getNome etc. Não é legal ler uma mistura de inglês com português, mas como o código era feito para mim e para outros brasileiros, estava bom. E, na verdade, tinha bem pouco Inglês.

Nesse cenário, eu estava usando o inglês apenas nas partes que eram um "padrão" dentre os desenvolvedores da linguagem (is, get, set etc.). Padrões de projeto, por exemplo, também poderiam ser escritos assim: ClienteFactory.

  • Pontos positivos: Fácil de se expressar, já que estamos usando a língua do domínio (que pode ou não ser em português) e a língua materna (português); possibiltia utilizar nomes específicos do domínio (e.g. "FII", "nota fiscal", ou mesmo se for em inglês, como criarInvoice, notificarAccountable), o que facilita a conversa entre quem está programando e quem conhece o domínio
  • Pontos negativos: Se alguém que não fala bem português for participar do projeto, terá dificuldade; se alguém que usa leitor de telas for participar, pode ter problemas (já ouvi que funciona melhor se o código está todo em inglês).

Tudo em inglês

No meu primeiro emprego (estágio), eu entrei para um projeto que atendia uma empresa internacional. Tudo era em inglês: código, mensagem de commit, textos do sistema, reportes de bug, comentários sobre a reprodução ou resolução de algo, documentação etc. Isso funcionou muito bem: o cliente era do exterior, então o idioma do domínio já era o inglês.

O único problema aqui era o "inglês da equipe". Como todos eram brasileiros, eventualmente tinham mensagens de commit super curtas e pouco claras, ou algo escrito errado, sem concordância, usando termos que fariam sentido em Português mas não em Inglês.

Depois disso, eu participei de um outro projeto, onde a língua do domínio era o português. Eu decidi seguir o padrão do único projeto que participei de forma profissional anteriormente: tudo em Inglês. Bom, não ficou legal.

Precisava fazer constantemente traduções sobre o banco de dados (que já existia, em português), e o código. Ou uma tradução entre o código e o que eu precisava falar para outra pessoa. Ou ainda, uma tradução entre uma string em inglês para português, para salvar no banco. Sério, isso foi criar problema atoa.

  • Pontos positivos: Se o domínio for em inglês, tudo continua fazendo sentido; facilita os termos usados na comunicação dentro e fora do código.
  • Pontos negativos: Se o domínio for em português, criou dificuldade atoa; se a equipe for apenas falante de português, terá uma dificuldade a mais na comunicação.

Tudo em português

Passei por isso apenas quando estava aprendendo a programar, lá no Pascal e provavelmente no Delphi também. Uma parte dos problemas vem com a acentuação. Usar ehImportante ao invés de isImportant ou isImportante não fica bom. Talvez isso seja questão de preferência, mas parece um código feito numa conversa de MSN. Apesar disso, se você está usando a língua do domínio, eventualmente precisará escrever notificacao, acao e coisas assim.

Pode ser que a linguagem aceite usar acentuação no código, mas não me lembro se já vi alguém programando dessa forma. Algo próximo que vi essa semana foi o uso de letras gregas (por causa da matemática):

ρ, σ := G[:32], G[32:]
  • Pontos positivos: Se todos falam português e o domínio é em português, a comunicação continua fácil.
  • Pontos negativos: Você perde alguns pontos positivos de usar tanto Português quanto Inglês, como o uso de termos já bem definidos (padrões de projeto, convenções entre os programadores da linguagem etc.); se o domínio for inglês, está pegando um mesmo ponto negativo de "Tudo em inglês" para um domínio em português.

O que eu faria hoje?

Se é um projeto nacional, equipe falante do português, usaria uma mistura, mas com os objetivos bem definidos: inglês para as convenções e termos conhecidos, Português para o resto. Note que mesmo num cenário desses, pode surgir debate: transaction ou transacao? exception ou excecao?

Se for um projeto para atender alguém falante de inglês, usaria apenas o Inglês.

Se for um projeto para atender uma demanda num terceiro idioma? Bom, nunca passei por isso e enxergo situações diferentes. Se a equipe não é do idioma do domínio, então talvez faça sentido usar o inglês no geral e o idioma do domínio para as coisas específicas do domínio. Agora, se é um projeto para uma outra empresa, onde as pessoas falam espanhol, e eventualmente ficarão com o projeto para uso interno, provavelmente faria mais sentido usar inglês + espanhol na proporção do inglês + português citado anteriormente.


Como adicional, o Filipe Deschamps fez um vídeo sobre o assunto em 2017 e cabe como mais um ponto de vista que você pode ouvir: PROGRAMAR EM INGLÊS OU PORTUGUÊS? (variáveis, funções, commits). Na resposta eu meio que foquei mais no código, mas no vídeo é falado sobre mensagens de commit, documentação etc.

2

Sobre letras gregas... Linguagem de computação científica como Julia incentiva o uso. Inclusive algumas palavras chaves podem usar diretamente unicode (como o pi)

6

Você acabou de descobrir como DDD não é tudo isso que falam e traz vários problemas. É extremamente difícil fazer certo e por isso quase todos os projetos acabam virando show de horrores.

A ideia do DDD é ótima, mas na prática precisa de uma equipe absurdamente competente para realizá-lo, o que é muito raro. E se tiver gente tão boa assim, o DDD não é necessário.

Eu não estudei a fundo, não sei as nuances que se usam na prática, mas eu acho que sobre a língua, não inclui o idioma a ser usado. É sobre os termos mesmo. Se o projeto é mundial tem que escolher a língua. Se não dá para fazer isso, vai virar zona. Eu não sou contra usar dois idiomas, mas para ter isso precisa ser muito organizado, tem que ter uma linha clara, não pode cada parte do sistema ser de um jeito.

O que eu tenho visto é que alguns projetos estão adotando microsserviços por causa disso, assim não mistura as partes. É uma das piores decisões que eu já vi. Você torna o sistema extremamente complexo e ineficiente para atender uma demanda não técnica e artificial.

Aliás, também justificam a criação dessa arquitetura para facilitar o bounded context que as pessoas não conseguem fazer quando está monoliticamente organizado, mesmo que modular. Ou seja, por causa do DDD que tem boa indicação em raros casos, o resto é modinha, destroem a arquitetura.

Eu gosto de usar sempre o idioma do domnínio, inglês para o que é tudo técnico (da programação mesmo), e português para sistemas brasileiros que faço, o que tem até vantagens ter os dois, e não ligo para as pessoas que abominam isso. Se o sistema for intenacional perde essa separação clara, mas tudo bem.

Se você não domina muito o inglês e como se usa naquele domínio, você fará errado.

Reforço, quase todo mundo faz DDD errado porque fazem por modinha. Nem é assim que deve decidir sobre isso, é burocrático, precisa de comitê para decidir.

Eu já vi gente falar uma coisa ou outra. Então as pessoas que gostam de DDD não concordam com o que é o certo. O cara que eu conheço que mais entende de DDD no Brasil diz que é assim mesmo, não tem uma forma clara e certa. Só que ele acha isso normal, eu acho que mostra que a metodologia é ruim. Se nem quem é bom nisso tem uma resposta defininitva e tem dificuldade para decidir no seu trabalho, imagine quem é inexperiente.

Veja https://pt.stackoverflow.com/q/366511/101 o que eu pensava há alguns anos.

Ajudei? Era o meu desejo.


Farei algo que muitos pedem para aprender a programar corretamente, gratuitamente (não vendo nada, é retribuição na minha aposentadoria) (links aqui).

1
2

Eu acho que é o negocio que manda.
Não importa o que o Dev acha bom, ou gosta.
Se tudo fica mais claro em português, se faça em português!

O misturar não vai dar problema algum, pois o negocio estará bem representado
e e isso vai gerar lucros no fim!

Essa coisa de tudo em inglês é de não especialistas no negocio.

1