Recentemente, na minha empresa, tivemos um pouco de debate sobre abstração versus simplicidade. Uma escola de pensamento que eu caracterizaria como "SECA e abstração não pode fazer mal" e leva a códigos como este:
def make_foo_binary(binaryName, objFiles, fooLibsToLinkAgainst)
make_exe_task(binaryName, objFiles.ext('.o'), fooLibsToLinkAgainst)
end
e isto:
class String
def escape_space
return self.gsub(' ', '\ ')
end
end
Meu ponto de vista é que a criação de uma abstração como essa, usada apenas em um lugar, torna o código menos legível, pois você está substituindo uma chamada de função com a qual o leitor está familiarizado (gsub) por outro que eles nunca viram before (escape_space), que eles precisarão ler se quiserem entender como o código realmente funciona. A substituição é essencialmente descrita em inglês ("escape space") e o inglês é notoriamente vago. Por exemplo, sem olhar para a definição, você não sabe se ela escapa de todo o espaço em branco ou apenas do caractere de espaço.
Há muita escrita que canta os louvores de DRY e abstração. Alguém está ciente das fontes que descrevem os limites da abstração? Que cantam louvores e discutem as pragmáticas de manter o código simples?
Edit: Eu posso encontrar textos que incentivam a simplicidade na vida ou na escrita (em inglês), por exemplo, "Simplifique, Simplifique!" ou "A escrita vigorosa de Strunk and White é concisa". Onde é o equivalente para a programação?