Expressividade
Jonas Abreu em 18/05/2011Enquanto eu resolvia o primeiro desafio de expressividade, eu notei uma coisa relacionada ao código das minhas classes.
O código mais próximo da interface que resolvia o desafio, eu tentei manter o mais próximo da linguagem do problema. Já conforme o código se afastava do problema a ser resolvido, ele ficava cada vez mais focado em como fazer cada passo. Um código cada vez mais lógico do que semântico.
Por um tempo eu achei que estava relaxando e tentei trabalhar mais o código para ver se melhorava, mas mesmo com algumas mudanças, essas características se mantinham.
Quando fui tentar entender o que acontecia, notei que eu não achava ruim que o código daquele pedaço fosse bem mais focado em lógica do que no problema. Na verdade, me parecia que o mais natural era que o código ficasse daquele jeito (inclusive tem um 1L << index que eu nunca aceitaria que ficasse em outro lugar).
No último Coding Dojo que organizei na AdaptWorks, tivemos uma discussão interessante sobre expressividade. O ponto principal foi a diferença de conhecimento entre as pessoas presentes. Será que deveríamos usar recursos mais avançados (e mais expressivos para quem está familiarizado) ou deveríamos manter o código dentro da base em que todos estavam acostumados?
O que me parece é que expressividade depende das pessoas à quem o código se destina (como uma carta, destinada -no caso- às pessoas presentes no Dojo) e também de em que parte do seu sistema o código se encontra (como no caso do desafio).
De forma alguma estou dizendo que o código mais próximo da infraestrutura não deve ser expressivo (ele deve). Mas sim que o significado de Código expressivo muda dependendo de onde está o código.
O que acham disso?