- Na cultura moderna de desenvolvimento de software, os nomes de projetos e bibliotecas estão sendo preenchidos com palavras arbitrárias sem relação com a função
- No passado, nomes como grep, awk, sed, FORTRAN, COBOL descreviam diretamente a função ou o propósito, mas hoje há uma proliferação de nomes sem significado
- Essa tendência se acelerou com a expansão do GitHub e da cultura de startups, rompendo completamente a ligação entre nome e função
- O custo de compreensão e a carga cognitiva aumentam, e os desenvolvedores acabam repetindo buscas desnecessárias para entender o papel de cada ferramenta
- O texto defende a restauração de convenções de nomenclatura claras e orientadas à função e enfatiza que, em ferramentas técnicas, clareza e profissionalismo devem vir antes da marca
Mudança nas práticas de nomenclatura de software
- Richard Stallman mencionou, em uma palestra na EmacsConf de 2022, a importância de “nomes fáceis de lembrar”, enfatizando que o nome de um pacote deve revelar o que ele faz
- O ecossistema do Emacs tradicionalmente manteve convenções de nomenclatura baseadas em função, como dired(editor de diretórios) e eshell(shell do Emacs)
- Porém, desenvolvedores modernos tendem a dar às ferramentas nomes como substantivos aleatórios, seres mitológicos ou personagens fictícios
- Em outras áreas técnicas, isso seria considerado falta de profissionalismo
O problema dos nomes sem significado
- Como exemplo, nomes de ferramentas como “Viper”, “Cobra”, “Melody”, “Casbin” e “Asynq” não permitem inferir absolutamente nada sobre sua função
- O autor menciona a experiência de ter precisado pesquisar para entender a explicação de infraestrutura dada por um amigo
- Em outras áreas da engenharia, os nomes descrevem estrutura ou função
- Ex.: Golden Gate Bridge, Hoover Dam, I-beam, butterfly valve deixam clara sua forma ou papel
- Na química, há regras como a nomenclatura IUPAC, que determinam que um nome se refira com precisão a um único objeto
- Ex.: 2,2,4-trimethylpentane significa uma única molécula; ninguém a chamaria arbitrariamente de “Steve”
As regras de nomenclatura do passado e a ruptura atual
- Nos anos 1980, abreviações baseadas em função como grep, awk, sed, cat, diff eram predominantes
- Nomes de linguagens de programação como FORTRAN, COBOL, BASIC, SQL, Lisp também refletiam seu propósito
- A partir dos anos 2010, começou a disseminação de nomes sem significado
- Alguns, como MongoDB, ainda tinham alguma relação funcional ou etimológica, mas depois houve uma explosão de nomes sem sentido com o GitHub e a cultura de startups
- O texto aponta como causa a tendência de imitar casos de sucesso centrados em marca, como o Google
Custo cognitivo e queda na eficiência do desenvolvimento
- Nomes como libsodium dificultam deduzir a função, obrigando o desenvolvedor a repetir trocas de contexto
- Perde-se tempo desnecessário tentando interpretar “por que sodium?”
- Quanto mais dependências um projeto tem, mais esse imposto cognitivo(cognitive tax) se acumula
- Isso leva à queda de produtividade dos desenvolvedores
- O autor aponta que, ao processar frases como “Viper, Cobra, Melody...”, recursos mentais são desperdiçados na interpretação de tokens sem significado
Contra-argumentos comuns e suas refutações
- “Nomes fáceis de lembrar são melhores para marketing” → ferramentas para desenvolvedores não são produtos de consumo, e a clareza funcional é mais importante
- “Nomes descritivos são entediantes” → o tédio é um preço aceitável pela clareza; instrumentos cirúrgicos também são entediantes, mas precisos
- “É só por diversão” → todos os usuários pagam o preço dessa ‘diversão’, o que acaba desperdiçando tempo em toda a indústria
- “Os bons nomes já foram todos usados” → namespaces, prefixos e palavras compostas podem resolver isso, e no mínimo o nome deve manter relação com a função
O caminho daqui para frente
- O problema é explicado menos como malícia e mais como resultado de uma mudança cultural
- À medida que a programação passou de um ambiente centrado em empresas para um centrado em comunidades, as normas sociais enfraqueceram
- A solução proposta é uma restauração cultural das convenções de nomenclatura
- Em vez de regulação, é preciso melhorar por meio da recuperação do profissionalismo, da educação e da pressão social
- Os nomes de bibliotecas devem refletir sua função, e, se necessário, palavras compostas e expressões longas devem ser aceitas
- Ex.: “http-request-validator” é muito mais claro do que “zephyr”
- Mascote e nome devem ser separados
- Ex.: o PostgreSQL usa o mascote elefante Slonik, mas o nome em si mantém um significado funcional
- Se não for um produto de consumo em que branding seja essencial, deve-se priorizar clareza e profissionalismo
- Antes de dar o nome do “personagem de anime favorito”, vale se perguntar: “um engenheiro civil daria esse nome a um sistema de pontes?”
- Em conclusão, é preciso parar com a proliferação de nomes sem sentido e voltar a uma linguagem técnica clara
- Clareza não é tédio, mas respeito pelo tempo e pelos recursos cognitivos do usuário
7 comentários
Até
awkmal dá para considerar um nome baseado em função....Se não tivesse colocado exemplos, a capacidade de convencer teria aumentado uns 10%..
Concordo até certo ponto, mas parece que eles não querem passar pelo estresse de dar nomes.
Todos os nomes úteis já estão sendo usados por alguém.
Alguém sabe o que
emacssignifica? Até pode ter um significado, mas nomes em forma de acrônimo não dão para entender só de bater o olho, sendo um nome... E, para dar nomes só pela função, hoje em dia já existem projetos demais.Culpar o GitHub por isso parece só uma perseguição no estilo do RMS mesmo kkk
Comentários do Hacker News
A versão GNU do Yacc se chama Bison. Pine era sigla para “Pine Is Not Elm”, e UNIX veio de UNICS, um trocadilho com MULTICS. Não sei o que significa dd, nano é um clone do pico, e Postfix junta “post” com “bug fix”. C++ é a versão incrementada de C, C veio depois de B, e B veio depois de BCPL. Na verdade, os desenvolvedores não perderam a “filosofia de dar nomes”; eles nunca tiveram uma. Por outro lado, acho que projetos modernos como Clang, LLDB, jq, fzf e loc são exemplos de bons nomes. mise-en-place é uma metáfora perfeita para a função do mise
key=value, pouco típica do UNIXComandos UNIX como grep, awk, sed, cat e diff tinham nomes funcionais ou sistemáticos, mas na prática só diff dá para adivinhar intuitivamente. Chamar awk de bom nome é exagero
-libertyRebati a ideia de que “esse tipo de nome na área técnica é suicídio de carreira”. Se você olhar a lista de codinomes do Departamento de Defesa dos EUA, vai ver que há muitos nomes deliberadamente opacos. Hoover Dam inicialmente era chamada de Boulder Canyon Project, e o nome não explicava a função. Requests seria mesmo um nome melhor que Reitzlib? No fim, depende do contexto
Um nome como awk na verdade não é bom. É só as iniciais dos autores e não transmite absolutamente nada sobre a função. Hoje em dia existe autocompletar com Tab, então nem faz mais tanto sentido encurtar tudo
Eu concordo com este texto de resposta. Identificadores externos mudam de significado com o tempo, então nomes perfeitamente descritivos envelhecem mal. Além disso, há nomes demais do tipo “X Manager” e “X Service”, o que dificulta distinguir um do outro
Trabalhei como engenheiro de calibração de motores numa OEM automotiva, e todas as variáveis e funções eram escritas em abreviações. No primeiro mês, minha cabeça quase explodiu de cansaço. No fim, um colega disse: “é como aprender um novo idioma”, e era exatamente isso. Ou seja, ter muitos nomes técnicos não reduz necessariamente a carga cognitiva
Tenho dificuldade em concordar com a ideia de que “nomes funcionais são melhores que marketing”. Nomes baseados em função acabam virando um oceano infinito de siglas. Você termina confundindo ABDC com ADBC
Acho curioso ver um texto desses no HN. Usar nomes como awk como exemplo para dizer que “perdemos a essência de dar nomes” é contraditório. No fim, isso parece mais uma aversão pessoal a nomes fofos. Aliás, este comentário foi escrito no Firefox — e pelo nome não dá para saber que é um navegador web
Sobre a ideia de que “nomes descritivos são entediantes”, ferramentas de sala de cirurgia também costumam receber nomes de pessoas. Adson, Allis, Babcock e Kocher não explicam a função em nada. No fim, o significado vem com a familiaridade. awk é ruim, mas diff é um exemplo razoável
Sobre a ideia de que “nossa área parece um zoológico de substantivos aleatórios”, eu gosto de nomes divertidos. Meu projeto Wimsey é uma biblioteca de testes de dados, mas o nome por si só não deixa isso claro. Mesmo assim, gosto de nomes como Python, Cron e Zellij, que carregam afeto e humor. Tecnologia no fim é feita por pessoas, e precisa ter prazer no processo. “brown-dog-2” é menos humano que “cookie”