Todas las abstracciones suficientemente útiles tienen fugas:
1. Resumir un objeto de red para que parezca un objeto del sistema de archivos: Esto facilita las cosas, ya que todos saben cómo leer y escribir archivos. Desafortunadamente, todos los problemas de redes “se escapan”: la latencia es grande e impredecible; a veces el objeto desaparece y tienes que volver a abrirlo; etc. [Tenga en cuenta que lo contrario es mucho mejor: un objeto de archivo abstraído como un recurso de red remoto. En ese caso, la persona que llama ya tiene que lidiar con la latencia y los tiempos de espera].
2. SQL: SQL extrae el acceso rápido a datos; en particular, crea automáticamente índices de datos para que no tenga que hacerlo. Desafortunadamente, puede emitir dos consultas aparentemente idénticas y obtener resultados de rendimiento muy diferentes. ¿Por qué? Porque debajo de las cubiertas (debajo de la abstracción) una consulta usaba un índice mientras que otra no.
- ¿Cuál de los sitios web de compras es mejor en términos de patrones de diseño de interfaz de usuario?
- Ingeniería de software: ¿Qué sucede cuando un Bitcoin se transfiere o subdivide?
- Sistemas operativos: ¿cuál es la diferencia entre un sistema operativo original y uno pirateado? ¿Por qué debería uno ir por el original, beneficios como tal?
- ¿Cuáles son las mecánicas de convertir un programa Java en un demonio?
- ¿Qué se siente pasar de una gran empresa (como Google, Facebook, Microsoft, etc.) como ingeniero de software a Finanzas (Goldman Sachs, DE Shaw, Morgan Stanley, etc.)?
3. Recolección de basura: la recolección de basura abstrae un asignador de memoria finita para que parezca un sistema de memoria infinita. Con la recolección de basura no tiene que preocuparse por la memoria. O tu Desafortunadamente, bajo ciertas condiciones, como cuando tiene una asignación del 50% o más, la recolección de basura impone sanciones de rendimiento (recolección de basura). La abstracción se filtra: si tiene una aplicación de alta memoria y alto rendimiento, debe preocuparse por la asignación de memoria nuevamente.
El artículo original de Joel Spolsky tiene muchos más ejemplos: La ley de las abstracciones permeables
Por cierto: no estoy insinuando que no debas usar abstracciones. Pero es útil echar un vistazo detrás de la abstracción para que pueda evitar o manejar las fugas cuando sucedan.