computer science - ¿Qué significa "nivel de indirección" en el aforismo de David Wheeler?
computer-science indirection (2)
He leído esta cita en un libro:
No hay ningún problema en la informática que no pueda resolverse utilizando otro nivel de direccionamiento indirecto.
¿Alguien puede explicar eso? ¿Qué significa "nivel de direccionamiento indirecto"?
Por lo que entendí, la indirección es un nombre elegante para usar un puntero de un valor en lugar del valor en sí. Por favor aclaren esto para mi
"Indirección" es usar algo que usa otra cosa, en su sentido más amplio.
Entonces, su ejemplo, al usar un indicador de un valor en lugar del valor, se ajusta a esta definición en un nivel. El puntero es algo y el valor es algo más.
Típicamente esto es algo más amplio en su alcance:
- Uso de un sitio web para mostrar gráficamente los datos generados por un servicio basado en XML. Aquí, el sitio web es algo y, detrás de él, se esconden los datos, que es otra cosa.
- Utilizando un sistema operativo para acceder a la pantalla de visualización. Aquí hay dos capas, al menos de indirección. El sistema operativo utiliza el controlador de pantalla. Una cosa usando otra cosa. Luego, el controlador de pantalla habla directamente con el hardware de la pantalla, lo que provoca que produzca pequeños puntos de luz aquí y allá. El controlador es el siguiente uso de algo más que es el hardware.
- No es raro que una API se ocupe de algo en un nivel alto y que la API se ocupe de lo mismo en un nivel inferior. De nuevo, se agrega un nivel de direccionamiento indirecto a la API de bajo nivel y la llamamos API nueva y mejorada.
Este último ejemplo, tal vez, explica el "por qué" de todo esto.
A medida que trabajamos con algo, lo dominamos y aprendemos cómo abstraerlo a un nivel más alto de abstracción, por lo que se necesita un nuevo nivel de direccionamiento indirecto y podemos resolver problemas más grandes más rápido descargando parte del trabajo a la nueva API.
Una de las grandes ventajas potenciales de la indirección es el acoplamiento reducido. Es otra forma de decir que las cosas deben ser compartimentadas apropiadamente. Esto a menudo ayuda significativamente con las pruebas, la capacidad de mantenimiento y la flexibilidad a largo plazo.
Como ejemplo, si su aplicación necesita leer algunos datos persistentes, en lugar de tener el conocimiento específico de dónde (y cómo) leerlos dispersos por toda la aplicación, los aísla (ponga esa lectura de datos en un método) y luego deje que todas las otras partes de su aplicación llamen a ese método para obtener los datos en lugar de que cada parte de la aplicación tenga que lidiar con esos detalles por sí misma.