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

[Dúvida] Convenções de codificação Português / Inglês em Instituição Pública Governamental

Olá pessoal, meu primeiro post aqui! o/
Sou dev C#.NET (já fui de Java tb).

Problema: Programar em português ou inglês ? Ou ambos?

Esse assunto é velho, eu sei, eu sei. Mas o que a comunidade TabNews pensa a respeito?

Eu fiz uma pesquisa prévia, e vi um post de 11 meses atras apenas recomendando 100% uso de inglês (o que eu discordo em partes pelo motivo que explicarei abaixo): 8 motivos para programar em ingles.

O post do colega acima afirma que devemos usar inglês pra tudo no código. Mas há exceções, talvez mais do que se imagine. Se você mora no Brasil e trabalha com um domínio de problema especializado/focado demais para o Brasil, você não vai querer programar 100% em inglês.

Discutindo o problema

Eu creio que não dá pra seguir 100% português, nem 100% inglês nesses casos. Na internet há a galera que fala que 50% do código é PT-BR, e 50% é inglês rsrs. Farei algumas considerações abaixo e gostaria de saber a opinião da comunidade:

Alguns pontos que eu acho positivo nomes de classes em Português:

  • Só de bater o olho você saberá que é uma classe feita em casa, e que não pertence a algum framework;
  • Transmite com mais fidelidade a Linguagem Ubiqua do negócio (a menos que seu cliente use realmente em inglês);
  • Seus colegas são brasileiros, e a língua nativa é o Português, facilita o entendimento (sim, o inglês é necessário/obrigatório, mas ainda é a segunda língua, fora que talvez nem todos da equipe tenham o mesmo nível de inglês);

Desvantagens (casos em que misturamos portugues e inglês INEVITAVELMENTE):

  • Termos e padrões técnicos na TI são em inglês. Eu particularmente gosto de MANTER o original. Ex: AlgumaCoisaRepository (padrão Repository), AlgumaClasseDto (Data Transfer Object), AlgumaClasseStream (implementa um Stream), AlgumaClasseService, AlgumaClasseConverter, AlgumaClasseException... etc.
  • Muitos frameworks adotam convenções de nomes. Ex: AlgumaCoisaController (MVC). É mais fácil seguir a convenção do que tentar customizar o framework.

Qual sua opinião ?

Dito isso, e considerando por exemplo, que eu trabalho numa Instituição do Poder Judiciário Brasileiro, pergunto:

  1. Vocês acham confuso ter essa mistura de inglês e português em nomes de classes principalmente (métodos eu costumo escrever em português) ?
  2. No caso de desenvolvimento de biblioteca de classes internas (uma das minhas responsabilidades), o que seria mais fácil absorver/entender para um programador: tudo em inglês, ou misturado pt + eng ?

Exemplos reais para ilustrar o problema

Estou tentando manter alguma consistência na nossa lib interna. Listarei alguns exemplos na versão PT e outra PT+EN:

Exceptions

  • DomainException vs DominioException / BusinessRuleException vs RegraNegocioException
  • ForbiddenAccessException vs AcessoNegadoException

Classes base herdáveis

  • BaseEntity vs EntidadeBase
  • BaseEvent vs EventoBase

Interfaces / abstrações

  • IIdentityService vs IIdentidadeAcessoService (interface para operações com usuários da aplicação) - para galera do .NET, basicamente estou abstraindo o AspNet Identity em métodos, como: ObterPerfisUsuarioAsync(idUsuario) ou Autenticar(login, senha)
  • ILdapAuthenticator vs IAutenticadorLdap

Classes / Implementações padrão para reutilização

  • PaginatedList vs ListaPaginada
  • ValidationBehavior vs ValidacaoBehavior (pipeline behavior do MediatR)
  • AuthorizationBehavior vs AutorizacaoBehavior (pipeline behavior do MediatR)
  • PagingSpecification vs PaginacaoSpecification (padrão Specification)
Carregando publicação patrocinada...
1

Olá,

Tendo em vista os exemplos que você deu, eu acredito que todos eles deveriam estar em inglês. Não vejo absolutamente nenhuma razão para usar os nomes em português. Por exemplo:

BaseEntity vs EntidadeBase.
Não há vantagem alguma em optar pela versão em português.

PagingSpecification vs PaginacaoSpecification.
Neste caso, é ainda pior, porque está misturando dois idiomas em um único nome. Qual é o benefício disso?

Você mencionou no post que uma das vantagens é que o português "Transmite com mais fidelidade a Linguagem Ubíqua do negócio". Concordo plenamente. Por exemplo, se hipoteticamente você tiver uma entidade que represente "processo" no sentido usado no tribunal, este é um exemplo onde faz total sentido usar o nome em português, porque é uma terminologia específica e altamente relevante para o contexto de negócio.

Dos argumentos que você apresentou, o único que vejo como válido é este. Os demais, vejo como desculpas para não abraçar completamente o inglês, que é a língua universal da programação.

Abraços!

1

Olá, obrigado pela sua contribuição!
Entendi, então a única exceção no seu ponto de vista seria a linguagem ubiqua.

Como vc nomeia os métodos? Digamos que vc precisa arquivar um processo. Como vc nomeará? ?

E os atributos de classe? Segue a linguagem ubiqua né? Digamos, valor da causa processual.

Mais uma vez obrigado !

1

Acho que vai da empresa que tu está. E do time.
Eu antes usava Português em todos, até nos cursos, mas sempre achava estranho ver coisas em português com termos em inglês, até eu entrar em uma empresa que o dev é na Índia logo tudo em Inglês, então a 10 anos tudo éinglês até nós meus scripts e projetos pessoais... Nada contra mas acho estranho ver português com inglês em códigos...

1

Obrigado pela sua resposta.
Mas quando o dominio do problema está em inglês não fica estranho criar classes 100% em inglês.
Agora, você criaria uma classe, por exemplo, trabalhando num sistema de Tribunal de Justiça brasileiro:

  • LawyerRepository ou AdvogadoRepository ou AdvogadoRepositorio ?

Eu costumo usar AdvogadoRepository. Acho complicado traduzir tudo pro inglês quando o domínio é 100% em português. Creio que não existe bala de prata pra nada, nem mesmo pra dizer que devemos programar 100% em inglês em todos os projetos. Isso dependerá exatamente de cada projeto.

Talvez para classes de infra ou classes mais genericas, não vejo problema algum 100% ingles, como aquelas últimas que citei no post principal (PaginatedList, PagingSpecification...).

1

Boa noite Leandro.
Geralmente código técnico ou de infraestrutura (componentes GUI de propósito geral, classes e métodos de manipulação de tipos ou que realizam IO...enfim código que não é de regra de negócios, uso inglês sempre.
Código de domínio do negócio uso português, mas observando os idiomas e convenções da linguagem (Async, Exception...). Logo nesses pontos acabam o ocorrendo algumas "idiossincrasias" onde português e inglês se encontram, como por exemplo ObterNotasAsync e UsuarioExistenteException. O objetivo de manter a padronização da linguagem acima do uso do português facilita a identificação e uso por outros programadores.
Mas acredito que no final acaba valendo o que for definido dentro do time. Não é cada um fazer o seu, mas o time conversar sobre essas convenções e chegar a um acordo. Acredito que um código onde um escreve UsuarioRepository e outro RepositorioDeProdutos seja mais complexo de navegar do que um onde seja convencionado o uso do sufixo Repository mesmo que o termo a que o repositório se refira esteja em português.

No final é sempre sobre otimizar o trabalho da equipe.

1

Boa noite Adoniram, obrigado pela sua contribuição.
Então, no final do dia teremos inevitavelmente parte do código em inglês (classes de infra ou genéricas como vc falou) e parte em português misturado com inglês (para as classes do domínio do negócio).
Eu acho q isso faz mt sentido. Valeu !

1

Português é muito verboso. Trabalhei numa situação parecida e o que eu sempre sugeri é que no código só usar o português trechos referenciar elementos do domínio. Mas acho deselegante um site do governo nacional usar inglês em, por exemplo, nome de rotas e outros elementos que o usuário pode ver.
Algo +- assim:

back(estilo javinha da massa)
UsuarioDto.setNome()
UsuarioRepository.findByNome()
UsuarioService
/api/usuarios

front
/administracao/usuarios

50% 50% é 100% sucesso

1

Excelente alvis! Obrigado!
Isso é exatamente o que eu costumo fazer. Com exceção do seu exemplo em Java, get e findBy (entendo que isso são tradeoffs decorrentes do framework utilizado e reúso de código). Mas eu costumo, quando posso, usar ObterPorNome (em vez de findByNome) e AlterarNome (em vez de setNome).
Valeu!!