Una de las tareas más comunes en el desarrollo de software es la especificación de la interfaz. Las interfaces ocurren al más alto nivel de abstracción (interfaces de usuario), en la más baja (interfaces de función) y en los niveles intermedios (interfaces de clases, de bibliotecas, etcétera). Independientemente de que estés trabajando con el usuario final para especificar cómo estará interactuando con un sistema, colaborando con desarrolladores para especificar un API o declarando funciones privadas para una clase, el diseño de interfaz es una parte importante de tu trabajo. Si lo haces bien, será un placer usar tus interfaces y aumentará la productividad de los demás. Si lo haces pobremente, tus interfaces serán la fuente de frustraciones y errores.
Las buenas interfaces son:
Una buena manera de diseñar interfaces que son fáciles de usar correctamente es hacer ejercicios antes de que existan. Simula una GUI –en un pizarrón o usando fichas en una mesa– y juega con ellos antes de que cualquier código haya sido creado. Escribe llamadas a la API antes de que las funciones hayan sido declaradas. Revisa los casos de uso comunes y especifica cómo quieres que se comporten las interfaces. ¿En qué quieres que puedan hacer clic? ¿Qué quieres pasarle? Las interfaces fáciles de usar parecen naturales, debido a que te dejan hacer lo que quieres hacer. Es más frecuente dar con esas interfaces si las desarrollas desde el punto de vista de los usuarios (esta perspectiva es una de las fortalezas de la programación test-first).
Hacer las interfaces difíciles de usar incorrectamente requiere dos cosas. Primero, debes anticiparte a los errores que los usuarios podrían hacer y encontrar la manera de prevenirlos. Segundo, debes observar cómo una interfaz es usada erróneamente durante las primeras liberaciones y modifica la interfaz –¡sí, modificar la interfaz!– para prevenir tales errores. La mejor manera de prevenir el uso incorrecto es hacer tal uso imposible. Si los usuarios siguen queriendo hacer un “deshacer” en una acción irrevocable, intenta hacer la acción revocable. Si ellos siguen pasando un valor erróneo a la API, mejor modifica la API para tomar los valores que el usuario quiere pasar.
Sobre todo, recuerda que las interfaces existen para la conveniencia de sus usuarios, no la de sus implementadores.
Traducción: Espartaco Palma