Palavras de programação de cinco dólares

Há muito tempo sou um fã do blog de Eric Lippert. E uma das minhas séries de posts favoritas (embora de curta duração) foi a do Five Dollar Words for Programmers (Palavras de cinco dólares para programadores). Embora eu tenha sido algumas vezes acusado de ser muito prolixo, acho que aprender a palavra certa para descrever algo que o senhor está fazendo é um pequeno passo no caminho para compreensão e eventual domínio.

Por que essas palavras valem cinco dólares? Elas são palavras incomuns que têm um significado único e especializado no desenvolvimento de software. Elas estão um pouco fora do caminho comum. Palavras que você não ouve com frequência, mas também palavras que proporcionam a emoção da descoberta, aquele momento “aha” em que você percebe que um determinado conceito de programação que você conhecia apenas por meio de experimentação e intuição tem um nome.

nota de cinco dólares, frente

Eric fornece exemplos de algumas ótimas palavras de programação de cinco dólares em seu blog.

1. Idempotente

Há duas definições intimamente relacionadas para idempotente. Um valor é “idempotente sob a função foo” se o resultado de fazer foo ao valor resultar no valor de volta.

Uma função é “idempotente” se o resultado de executá-la duas vezes (alimentando a saída da primeira chamada na segunda chamada) for exatamente o mesmo que o resultado de executá-la uma vez. (Ou, em outras palavras, cada saída da função é idempotente sob ela).

Isso não é apenas acadêmico. Eric observa que a idempotência é usada o tempo todo em funções de cache que criam o objeto que está sendo solicitado. Chamar a função duas ou mil vezes retorna o mesmo resultado que chamá-la uma vez.

2. Ortogonalidade

Imagine, por exemplo, que o senhor estivesse tentando descrever como ir de um ponto a outro em uma sala vazia. Uma maneira perfeitamente válida de fazer isso seria dizer quantos passos o senhor deve dar para ir para o norte ou para o sul e, em seguida, quantos passos para ir para o nordeste ou para o sudoeste. Esse sistema de navegação com taco de hóquei é totalmente viável, mas parece estranho porque o norte e o nordeste não são ortogonais – o senhor não pode mudar sua posição movendo-se para o nordeste sem mudar ao mesmo tempo a distância ao norte. Com um sistema ortogonal, por exemplo, o sistema tradicional norte-sul/leste-oeste, o senhor pode especificar a distância a ser percorrida para o norte sem se preocupar em levar em conta o movimento leste-oeste.

Os sistemas não ortogonais são difíceis de manipular porque é difícil ajustar partes isoladas. Considere meu tanque de peixes, por exemplo. O pH, a dureza, o potencial de oxidação, o teor de oxigênio dissolvido, a salinidade e a condutividade da água são muito não ortogonais; a alteração de um deles tende a afetar os outros, o que torna às vezes difícil obter o equilíbrio certo. Até mesmo coisas como a alteração dos níveis de luz podem alterar os ciclos de crescimento de bactérias e algas, causando alterações químicas na água.

A ortogonalidade é um conceito poderoso que se aplica a todos os níveis de codificação, desde o astronauta da arquitetura até o macaco de código de nível mais baixo. Se a modificação do item nº 1 resultar em um comportamento inesperado no item nº 2, o senhor terá um grande problema, que é uma forma de acoplamento indesejado. Dave Thomas ilustra com um exemplo de uma analogia inteligente com helicópteros:

Parece bastante simples. O senhor pode usar os pedais para apontar o helicóptero para onde deseja que ele vá. O senhor pode usar o coletivo para mover-se para cima e para baixo. Infelizmente, porém, devido à aerodinâmica e aos efeitos giroscópicos das pás, todos esses controles estão relacionados. Portanto, uma pequena alteração, como baixar o coletivo, faz com que o helicóptero mergulhe e vire para um lado. O senhor precisa neutralizar cada alteração que fizer com forças opostas correspondentes nos outros controles. No entanto, ao fazer isso, o senhor introduz mais alterações no controle original. Portanto, o senhor está constantemente dançando em todos os controles para manter o helicóptero estável.

Isso é parecido com o código. Todos nós já trabalhamos em sistemas em que o senhor faz uma pequena alteração aqui e outro problema aparece ali. Então, o senhor vai até lá e corrige o problema, mas outros dois problemas aparecem em outro lugar. O senhor os empurra constantemente para trás, como no jogo Whack-a-Mole, e nunca termina. Se o sistema não for ortogonal, se as peças interagirem umas com as outras mais do que o necessário, o senhor sempre terá esse tipo de correção de erros distribuída.

3. Imutabilidade

A imutabilidade é um pouco mais ampla, mas a definição comumente aceita baseia-se no fato de que String objetos em Java, C# e Python são imutáveis.

Não há nada que o senhor possa fazer com o número um que o mude. O senhor não pode pintá-lo de roxo, torná-lo uniforme ou deixá-lo irritado. É o número um, é eterno, implacável e imutável. A tentativa de fazer algo com ele – digamos, adicionar três a ele – não muda em nada o número um. Em vez disso, produz um número totalmente diferente e também imutável. Se o senhor converter esse número em um double, não alterará o número inteiro um; em vez disso, obterá um double totalmente novo.

As cadeias de caracteres, os números e o valor nulo são todos verdadeiramente imutáveis.

Tente imaginar suas cadeias de caracteres cuidadosamente esculpidas em enormes blocos de granito. Porque são, elas são imutáveis! Pode parecer ilógico que toda vez que o senhor modifica um stringo original é mantido como está e um novo string inteiramente novo. Mas isso é feito para duas razões técnicas muito boas. Entender a imutabilidade é essencial para entender o desempenho das strings nessas linguagens.

Não pretendo que essas três palavras sejam particularmente exclusivas ou novas, apenas um pouco fora do caminho comum. No entanto, elas eram novas para mim e descobri-los foi um pequeno marco em minha própria evolução como programador.

O que é o senhor palavra de programação favorita do senhor? E como ela o ajudou a chegar a esse momento “aha” específico em seu do senhor? (Links para referências/definições são muito bem-vindos nos comentários – talvez todos nós possamos descobrir pelo menos um nova palavra de programação de cinco dólares hoje. Lembre-se, aprenda quatro e o senhor ganhará vinte dólares de conhecimento!)