En el famoso ensayo de Richard Gabriel The Rise of Worse is Better , contrasta las versiones caricaturizadas de las filosofías de diseño del MIT / Stanford (Lisp) y Nueva Jersey (C / Unix) a lo largo de los ejes de simplicidad, corrección, coherencia e integridad. Da el ejemplo del "problema de pérdida de PC" ( discutido en otro lugar por Josh Haberman ) para argumentar que Unix prioriza la simplicidad de implementación sobre la simplicidad de la interfaz.
Otro ejemplo que he encontrado son los diferentes enfoques de los números. Lisp puede representar números arbitrariamente grandes (hasta el tamaño de la memoria), mientras que C limita los números a un número fijo de bits (generalmente 32-64). Creo que esto ilustra el eje de corrección.
¿Cuáles son algunos ejemplos de consistencia e integridad? Aquí están todas las descripciones de Gabriel (que él admite son caricaturas):
El enfoque MIT / Stanford
- Simplicidad: el diseño debe ser simple, tanto en la implementación como en la interfaz. Es más importante que la interfaz sea simple que la implementación.
- Corrección: el diseño debe ser correcto en todos los aspectos observables. La incorrección simplemente no está permitida.
- Consistencia: el diseño no debe ser inconsistente. Se permite que un diseño sea un poco menos simple y menos completo para evitar inconsistencias. La consistencia es tan importante como la corrección.
- Integridad: el diseño debe cubrir tantas situaciones importantes como sea práctico. Todos los casos razonablemente esperados deben estar cubiertos. La simplicidad no permite reducir demasiado la integridad.
El enfoque de Nueva Jersey
- Simplicidad: el diseño debe ser simple, tanto en la implementación como en la interfaz. Es más importante que la implementación sea simple que la interfaz. La simplicidad es la consideración más importante en un diseño.
- Corrección: el diseño debe ser correcto en todos los aspectos observables. Es un poco mejor ser simple que correcto.
- Consistencia: el diseño no debe ser demasiado inconsistente. La consistencia se puede sacrificar por simplicidad en algunos casos, pero es mejor descartar aquellas partes del diseño que se ocupan de circunstancias menos comunes que introducir complejidad de implementación o inconsistencia.
- Integridad: el diseño debe cubrir tantas situaciones importantes como sea práctico. Todos los casos razonablemente esperados deben estar cubiertos. La integridad se puede sacrificar en favor de cualquier otra cualidad. De hecho, la integridad debe sacrificarse siempre que se ponga en peligro la simplicidad de implementación. La consistencia se puede sacrificar para lograr la integridad si se conserva la simplicidad; especialmente inútil es la consistencia de la interfaz.
Tenga en cuenta que no estoy preguntando si Gabriel tiene razón (que es una pregunta no apropiada para StackExchange), sino ejemplos de a qué se podría haber referido.