Linguagem de programação e ubíqua (DDD) em um domínio diferente do inglês

59

Eu sei que existem algumas questões aqui que estão intimamente relacionadas com este assunto, mas nenhuma delas toma Linguagem Ubíqua como o ponto de partida ponto então eu acho que justifica esta questão.

Para quem não sabe: Ubiquitous Language é o conceito de definir uma linguagem (falada e escrita) que é igualmente usada por desenvolvedores e especialistas em domínio para evitar inconsistências e falhas de comunicação devido a problemas de tradução e mal-entendidos. Você verá a mesma terminologia exibida no código, conversas entre qualquer membro da equipe, especificações funcionais e outras coisas.

Então, o que eu queria saber é como lidar com o Ubiquitous Language em domínios não ingleses.

Pessoalmente, eu defendo strongmente escrever código de programação em inglês completamente, incluindo comentários, mas é claro, excluindo constantes e recursos.

No entanto, em um domínio diferente do inglês, sou forçado a tomar uma decisão para:

  1. Escreva o código refletindo o idioma onipresente na linguagem natural do domínio.
  2. Traduza o idioma ubíquo para o inglês e pare de se comunicar no idioma natural do domínio.
  3. Defina uma tabela que define como o idioma ubíquo se traduz em inglês.

Aqui estão alguns dos meus pensamentos baseados nessas opções:

1) Eu tenho uma strong aversão ao código de idioma misto, que é o código que usa nomes de tipo / membro / variável, etc., que não são o inglês. A maioria das linguagens de programação 'respiram' o inglês em grande parte e a maior parte da literatura técnica, nomes de padrões de design etc. também estão em inglês. Portanto, na maioria dos casos, não há como escrever código inteiramente em um idioma diferente do inglês, assim você acaba tendo idiomas mistos de qualquer maneira.

2) Isso forçará os especialistas do domínio a começar a pensar e falar no equivalente em inglês do UL, algo que provavelmente não virá naturalmente para eles e, portanto, dificultará significativamente a comunicação.

3) Nesse caso, os desenvolvedores se comunicam com os especialistas do domínio em seu idioma nativo enquanto os desenvolvedores se comunicam entre si em inglês e, o mais importante, escrevem código usando a tradução em inglês do UL.

Tenho certeza que não quero ir para a primeira opção e acho que a opção 3 é muito melhor que a opção 2. O que você acha? Estou faltando outras opções?

UPDATE

Hoje, cerca de um ano depois, tendo lidado com essa questão diariamente, tenho que dizer que a opção 3 funcionou muito bem para mim.

Não foi tão tedioso quanto eu inicialmente temia e traduzia em tempo real enquanto conversava com o cliente também não era um problema.

Também achei as seguintes vantagens como verdadeiras, com base na minha experiência.

  • Traduzir o UL faz com que você preste mais atenção na definição do UL e até mesmo do próprio domínio, especialmente quando você não sabe traduzir um termo e precisa começar a procurar nos dicionários, etc. Isso até me levou a reconsiderar decisões de modelagem de domínio algumas vezes.
  • Isso ajuda você a tornar seu conhecimento da língua inglesa mais profundo.
  • Obviamente, seu código é muito mais agradável de se ver em vez de ser uma obscenidade incompreensível.
por Sandor Drieënhuizen 29.01.2011 / 11:45
fonte

4 respostas

10

Eu enfrentei esse problema com frequência e, na minha opinião, a resposta é: "não há uma única resposta válida para todos os cenários".

Mas tenha em mente que a Linguagem Ubíqua não é uma meta em si. É uma ferramenta para reforçar a comunicação entre a equipe e os Especialistas de Domínio e reforçar a coerência conceitual do modelo implementado em código, testes e conversação.

Se você puder falar UL sem ambigüidade, estará no caminho certo. Se você e seus colegas estão continuamente traduzindo de código para conversação ou de conceito para conceito, então provavelmente você está fora do caminho certo.

Na prática, nem todos os domínios são iguais nem especialistas no domínio. Algum domínio tem muita terminologia em inglês de qualquer maneira (domínios de tecnologia, por exemplo) e parece razoável optar por uma opção de inglês completo. No entanto, algumas culturas podem influenciar essa escolha (o francês vem à mente) e a difusão da terminologia inglesa varia de país para país. Em alguns outros domínios (Legal, para nomear um) não há como traduzir alguns termos. Ou a tradução tornaria absolutamente mais difícil para o Especialista em Domínio acompanhar a conversa.

Em geral, estamos mais interessados no que o Especialista em Domínio tem a dizer. Então, nós queremos facilitar as coisas para eles. Caso contrário, eles poderiam apenas pegar uma classe UML e ler nossos diagramas (isso foi uma piada). Assim, a única recomendação real aqui é: "preste atenção ao comportamento do Especialista de Domínio", se eles estiverem envolvidos na conversa e a conversa continuar sem problemas, você provavelmente está no caminho certo, mantenha essa linguagem . Isso pode causar um pouco mais de trabalho na equipe, mas tudo bem. Como desenvolvedores, somos um pouco treinados para aprender palavras com significado específico em um contexto.

Estranhamente, essa questão sempre é acompanhada pela suposição de que todo o código precisa falar uma língua. Isso pode ser desafiado também. Eu não sou um inglês nativo, e o conhecimento de uma língua estrangeira não é plano: meu cérebro vai rápido quando fala sobre nome , sobrenome , carro e assim por diante, falta alguns detalhes quando se fala em código postal , fica mais lento quando se fala em empréstimo e definitivamente pede uma explicação tranquilizadora quando se fala em hipoteca .

Então, novamente, escolha a melhor combinação que fará com que a conversa principal flua e forneça a maior quantidade de informações e feedback do Especialista de Domínio.

    
por 17.11.2011 / 13:12
fonte
4

Eu costumo considerar certas palavras técnicas como neutras em relação ao idioma, mesmo que haja uma tradução em outro idioma.

Por exemplo, quando falo de codificação em alemão, ainda uso o vocabulário técnico inglês como se fossem palavras em alemão, mesmo que haja um equivalente em alemão.

No seu caso eu faria o oposto. Importe determinadas palavras técnicas da sua língua nativa para o inglês, assim como as palavras estrangeiras foram importadas durante séculos. Faça com que eles se comportem gramaticalmente como palavras inglesas. Parece estranho no começo, mas você vai se acostumar com isso.

    
por 30.01.2011 / 00:24
fonte
3

Concordo com o comentário da maioria das linguagens de programação 'respire' inglês , que sempre se torna um problema com os esforços de desenvolvimento em vários idiomas

Normalmente, eu teria o UL no idioma da sua equipe de programação

O que fizemos no passado é criar novas palavras que melhor expressem os tópicos do domínio. Com um projeto Francês / Inglês, as palavras inventadas eram em sua maioria inglesas, mas com sabor francês (não muito, já que muitas palavras em inglês são em francês, de qualquer forma), mas isso poderia se aplicar a qualquer mix de idiomas

por exemplo,

"quantity bois"

Em inglês é "quantidade de madeira" ou "quantidade de madeira", em francês é "quantité de bois", por isso é perto o suficiente para ambos os falantes. Isso deve reduzir a quantidade de novas palavras que cada palestrante tem que aprender

Qual é o tamanho do seu domínio UL? Isso se torna o problema. Se tiver menos de 100 frases-chave, então você pode usar uma linguagem de estilo híbrida, se eu for maior, eu colocaria a linguagem predominante dos desenvolvedores como eles geralmente têm que lidar com isso mais intensamente

Publique um dicionário wiki / thesaurus para que todos façam referência também, conforme necessário, para que não haja desculpas para a compreensão

    
por 29.01.2011 / 22:48
fonte
2

Trabalhei recentemente em um projeto de DDD na Suíça, onde o domínio era imposto (especificamente o IVA e outro tipo de imposto ... que não é facilmente traduzível para o inglês ...).

Eles escolheram a primeira opção: UL em alemão, usada no código em alemão também.

Antes de trabalhar neste projeto, tive exatamente a mesma aversão que você por um código de idioma misto. Eu (ainda) gosto de ter tudo em inglês, embora eu não seja um falante nativo de inglês. Eu também não sou um falante nativo de alemão. Então, quando comecei a explorar a base de código, fiquei horrorizado.

Depois de um ano trabalhando nesse projeto, devo admitir que acho que foi a decisão certa nesse caso (também poderíamos ter usado o francês ou o italiano, os outros idiomas oficiais suíços, mas a maioria dos atores do projeto eram falantes nativos de alemão).

Muitos dos termos específicos do domínio não foram realmente traduzíveis para o inglês de maneira significativa. Eu tive que aprender os termos alemães de qualquer maneira para me comunicar com o resto da equipe. Teria sido mais confuso ter que também aprender traduções inglesas, que teriam sido inventadas do nada, de qualquer maneira.

Então, acho que depende do domínio. Alguns domínios serão realmente difíceis de traduzir para o inglês e não fará muito sentido.

Provavelmente também depende da língua nativa. O alemão é uma língua onde você pode compor palavras aproximadamente da mesma maneira e especialmente da mesma ordem que em inglês. Por exemplo, uma declaração de imposto seria uma Steuerdeklaration . Não chocantemente diferente.

Eu não sei como eu faria um nome de classe equivalente em francês, por exemplo, se o termo natural fosse "déclaration d'impôts", com a ordem oposta e uma preposição extra no meio ... E isso é apenas um exemplo simples. Eu estaria realmente interessado se alguém tem experiência com esse tipo de nomeação em línguas latinas (francês, espanhol, italiano, português ...)!

Outro desafio foram as formas plurais, que em alemão às vezes são dificilmente distinguíveis do singular (enquanto em inglês quase sempre tem um s no final).

Os caracteres acentuados foram OK, uma vez que em alemão todos eles têm um equivalente não acentuado ( ü - > ue e assim por diante). É outro ponto em que os franceses seriam mais problemáticos ...

    
por 25.05.2018 / 22:32
fonte