Olá pessoal na última terça-feira realizamos a primeira mesa redonda na Lambda3 Rio de Janeiro \o/. O assunto foi o capítulo 2 do livro Clean Code. Muitos, senão todos, do nosso time já leram esse livro a um bom tempo, então tínhamos um objetivo de relembrar e discutir o assunto que estudamos, para não ficar chato Colocamos um time-box de uma hora para não nos estendermos demais.

O que segue abaixo foram anotações que fizemos durante a sessão, com alguns tópicos. Nosso objetivo aqui não é explicá-los e sim registrá-los, se você quiser entender melhor cada um dos tópicos é só chegar aqui na Lambda3 que a gente fala sobre eles 🙂

O tempo foi suficiente para discutirmos 5 tópicos do capítulo 2 – Meaningful names

  • Intention revealing names
  • Avoid disinformation
  • Make meaningful distinctions
  • Use Pronounceable names
  • Use Searchable Names

Intention revealing names

  • Intention revealing names é dependente do domínio e do contexto em que a interface em questão esta sendo usada. O programador tem que conhecer o domínio, caso contrário a interface dificilmente será reveladora.
  • Bons nomes dependem bastante das experiências de cada um, sendo assim um nome que é razoável para um desenvolvedor pode parecer o nome ideal para outro, e vice-versa.
  • O preciosismo com nomes deve ser evitado.
  • Alguns casos como no C# foi escolhido mudar uma interface para o público alvo entender melhor. Como exemplos temos o Linq com os métodos Reduce/Fold
  • Há diferenças em IRN(Intention revealing names) em linguagens estaticamente tipadas e em linguagens dinâmicas. Chegamos ao questionamento se a recomendação em linguagens dinâmicas é usar o tipo como parte do nome.

Desinformation

  • Programar em idiomas estrangeiros requer cuidado extra para nomeá-los. Buscar o nome significativo para ter certeza se o nome  corresponde ao que você esta querendo dizer.
  • Bad smells: descrever imperativamente no nome método exatamente como faz. Você deve descrever o que ele faz.
  • Membro novo no time tende a criar nomes descontextualizados.

Make meaningful distinctions

  • Palavras genéricas não servem para distinguir conceitos. DadosAdicionais
  • Plural são distinções significativas? eg: ObterUsuario() x ObterUsuarios()

Use Pronounceable names

  • A linguagem de domínio utilizada pelo Product Owner as vezes não representa a linguagem ubíqua. No caso de um nome ruim, você pode sugerir um nome melhor.
  • Buscar conhecimento de outras pessoas é interessante mas deve tomar cuidado pois uma mesma coisa pode ter nomes diferentes em contextos diferentes.

É isso pessoal, esse é apenas um relato da nossa discussão. Esperamos em breve conseguir tornar a discussão pública, aguarde novidades 🙂

Participaram desta discussão:

  • Bernardo Rosmaninho
  • Higor Cesar Ramos
  • Rodrigo Vidal

Abraço.

Rodrigo Vidal