[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:
- 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) ?
- 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)
ouAutenticar(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)
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!
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...
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.
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