leaky abstraction

expressão

programaçãodesenvolvimento web

Uma abstração que deveria esconder a complexidade, mas deixa transparecer detalhes do que está por baixo.

O TCP promete entrega confiável, mas um cabo rompido ainda aparece como um travamento; um ORM esconde o SQL até que uma consulta lenta o obrigue a pensar em SQL de novo. A 'lei' de Joel Spolsky é que toda abstração não trivial vaza em algum grau, então nunca se pode deixar totalmente de entender a camada de baixo.

A lei das abstrações furadas, de Joel Spolsky, diz que toda abstração não trivial, em algum grau, vaza. A abstração esconde a complexidade de baixo até o momento em que não consegue mais, e então os detalhes que ela ocultava se tornam urgentemente relevantes para alguém que foi deliberadamente poupado de aprendê-los.

Os exemplos estão em toda parte depois que se olha. Um compartilhamento de arquivos em rede se comporta como um disco local até a rede ficar lenta, e então a abstração vaza latência e falhas parciais que arquivos locais nunca tiveram. Um ORM esconde o SQL até um plano de consulta ser catastrófico. O TCP apresenta um fluxo confiável sobre uma rede não confiável, e em geral tem sucesso, até a perda de pacotes virar colapso de throughput que só faz sentido uma camada abaixo.

A consequência é desconfortável para o modo como a indústria ensina. Abstrações poupam tempo e não poupam aprendizado: quem mantém o sistema ainda precisa entender o que está embaixo, porque é de lá que vêm as falhas. É por isso que engenheiros experientes são valiosos de um jeito difícil de descrever num currículo. Eles sabem qual abstração está vazando, conhecimento que só se obtém tendo sido surpreendido antes.

Também conhecido como: law of leaky abstractions

Fontes

  • Spolsky, 'The Law of Leaky Abstractions' (2002)

Todos os verbetes do glossário