El teorema fundamental de la ingeniería de software es una observación humorística, atribuida indistintamente a Roger Needham [ 1 ] o a David Wheeler [ 2 ] , en el sentido de que:
Cualquier problema en ciencias de la computación puede resolverse con otro nivel de indirección. [ 2 ]
Esto no es un teorema en el sentido de un teorema matemático que se pueda demostrar; más bien, es un principio general para gestionar la complejidad mediante la abstracción .
El teorema se suele ampliar con la cláusula humorística «...excepto por el problema de demasiados niveles de indirección», refiriéndose al hecho de que demasiadas abstracciones pueden crear problemas de complejidad intrínseca. Por ejemplo, el uso de la estratificación de protocolos en redes informáticas , que hoy en día es omnipresente, ha sido criticado de maneras típicas de las desventajas más generales de la abstracción. [ 3 ] Aquí, la adición de niveles de indirección adicionales puede hacer que las capas superiores dupliquen la funcionalidad de las capas inferiores , lo que lleva a la ineficiencia; y la funcionalidad en una capa puede necesitar datos presentes solo en otra capa, lo que viola fundamentalmente el objetivo de la separación en diferentes capas.
Orígenes
Wulf (1981) [ 1 ] atribuye la observación de que todos los problemas en ciencias de la computación pueden resolverse con "una capa más de indirección" a Roger Needham . Este ingenioso comentario fue repetido por otros autores, como Black (1985). [ 4 ] : 183 Butler Lampson , en su discurso de aceptación del Premio Turing de 1992, repite la observación, pero se la atribuye al colega de Needham en Cambridge, David Wheeler . [ 2 ] Ninguna de estas fuentes se refiere aún a la observación con un nombre en particular.
Abrahams (2005), [ 5 ] aunque rastrea la observación en sí solo hasta Lampson, le atribuye a Andrew Koenig la invención del nombre "Teorema Fundamental de la Ingeniería de Software".
Referencias
- ^ a b William A. Wulf; Roy Levin; Samuel P. Harbison (1981). HYDRA/C.mmp: Un sistema informático experimental . McGraw-Hill. pág. 279. ISBN 0-07-072120-3
Revocar privilegios en un sistema de capacidades es más difícil que en un sistema de "listas de acceso".
Sin embargo ,Roger Needham
observó en una ocasión que "esto, como todos los demás problemas en Ciencias de la Computación, puede resolverse con un nivel adicional de indirección".
- ^ a b c Butler Lampson (17 de febrero de 1993). "Principios para el diseño de sistemas informáticos" . doi : 10.1145/1283920.2159562 .
Cualquier problema en ciencias de la computación puede resolverse con otro nivel de indirección (Wheeler).
- ^ I. Wakeman; J. Crowcroft; Z. Wang; D. Sirovica (enero de 1992). "¿Es perjudicial la superposición de capas?". IEEE Network : 20–24 . doi : 10.1109/65.120719 . S2CID 6631446 .
- ^ Andrew P. Black (1985). "Apoyo a aplicaciones distribuidas: experiencia con Eden" (PDF) . ACM SIGOPS Operating System Review . 19 (5): 181– 193. doi : 10.1145/323627.323646 . Recuperado el 2 de abril de 2026. esa
panacea universal, un nivel adicional de indirección
- ^ Dave Abrahams ; Aleksey Gurtovoy (2005). Metaprogramación con plantillas en C++ . Addison-Wesley. pág. 13.
Podemos resolver cualquier problema introduciendo un nivel adicional de indirección. —
Butler Lampson
.
La idea de Lampson es tan universal en programación que
Andrew Koenig
suele llamarla "el Teorema Fundamental de la Ingeniería de Software" (TFSE).
- Folclore de la ingeniería de software