Aquí hay una linda respuesta: basarla en una teoría subyacente sólida. Tener una buena semántica denotacional no solo te permite probar cosas, sino que también obliga a que tu diseño sea simple y hace que sea mucho más fácil pensar de manera informal .
A menudo, llega a un punto en el que ya no está diseñando una API, la API se está diseñando a sí misma. Comienzas con algunas abstracciones matemáticas realmente simples, y simplemente se unen. A menudo obtienes cosas como invariantes (leyes algebraicas) gratis solo de las estructuras que has creado; Estos son útiles para escribir programas correctos, así como cosas como optimizaciones.
Este tipo de diseño es la razón por la cual es útil aprender sobre cosas como la teoría de categorías y el álgebra universal. (Voy a conectar algo que escribí recientemente: http: //stackoverflow.com/questio….) Las abstracciones algebraicas como esta le brindan una base muy agradable para API y DSL simples y consistentes.
La idea central es que el uso de abstracciones matemáticas simples y generales conduce a API que son más simples, más fáciles de pensar y más consistentes. Después de todo, es mucho más fácil construir algo sobre un modelo ya simple y consistente que crear un buen diseño ad-hoc.
- ¿Qué sitio es el mejor para celebrar un concurso de diseño?
- ¿Cuáles son las tendencias de diseño web que deben retirarse en 2014?
- ¿Cuáles son algunos pasos y productos de diseño de Smart Home a tener en cuenta al construir una Smart Home conectada?
- ¿Qué significa para usted la experiencia del usuario y cómo aborda el proceso de diseño?
- ¿Quién diseñó la experiencia de usuario Jawbone UP?
Un gran ejemplo de esto en acción es la biblioteca de lentes de datos para Haskell, que utiliza directamente estas ideas, incluidas las coalgebras (que se tratan en mi enlace anterior). Otro gran ejemplo es la programación funcional reactiva (FRP) con eventos y comportamientos defendidos por Conal Elliot.
No digo que esta sea la única forma de diseñar buenas API, pero espero que esto aclare una de las razones por las cuales estudiar ideas muy abstractas tiene sentido para CS.
Consulte Diseño semántico para obtener una introducción rápida al tema y Diseño denotacional con morfismos de clase de tipo para obtener más detalles.