A veces, las cosas pueden simplificarse y hacerse más poderosas al mismo tiempo. Esto es a menudo “para qué sirve la matemática”.
Cuando observé cómo Ivan Sutherland había organizado los objetos en Sketchpad (1962), el primer sistema gráfico interactivo real (y mucho más), una de las cosas que hizo fue hacer que cada objeto tuviera un “lugar” llamado “pantalla” y todo lo que tenía que hacer para que cualquier tipo de objeto se mostrara era llamar a la subrutina en “mostrar” (que ahora se convirtió en una etiqueta genérica para la “idea de mostrar”).
Esto eliminó la necesidad del invocador de saber cómo mostrar o de saber el nombre particular de su rutina de visualización. Cada objeto tenía su propio espacio de nombres, e Ivan se dio cuenta (con la ayuda de algunas ideas de Doug Ross y otros) de que “separar las preocupaciones” como esta realmente simplificaba el diseño y la programación.
- ¿Es log n lo mismo que O (nlogn)?
- ¿Cómo puede la informática teórica informar el estudio del origen de la vida?
- ¿Cuál es la diferencia entre una cubierta abierta y una subcubierta finita en relación con la compacidad?
- ¿Cuáles son algunos métodos heurísticos en la factorización de números primos?
- ¿Por qué los informáticos / programadores usan la notación big-O en lugar de la función de tiempo de ejecución real?
La idea del “mínimo conocimiento” es una forma muy poderosa de pensar en crear módulos que puedan cooperar.
Esto es lo que hacen las “álgebras” en matemáticas. Comenzaron como generalizaciones de cosas y operaciones como + y * e identidades, etc. que podrían usarse en una amplia variedad de cosas. Esto a menudo funciona bien porque a menudo hay muchos más tipos de cosas que operaciones poderosas. Y a menudo hay muchas más formas de hacer las cosas que hacer cosas buenas (por ejemplo, “ordenar” es una idea poderosa, y puede haber muchas docenas de formas diferentes de ordenar, pero el resultado final es el mismo. Las diferencias son ” pragmático “en lugar de” semántico “).
Mi golpe interno fue que “wow, podemos crear un lenguaje de interfaz realmente poderoso pero simple como sea posible entre objetos, y podemos ocultar la pragmática dentro de los objetos, etc.”
Hoy en día, esta propiedad de módulos / objetos generalmente se llama “polimorfismo” (un término no muy exacto, pero creo que Peter Wegner lo etiquetó y se ha pegado).