Programar no es acerca de instrucciones, sentencias, clases o estructuras. Programar es usar un medio, los lenguajes de programación, para poder reproducir un proceso que existe en el mundo real, al menos gran parte del software que usa en las empresas busca este propósito. Al trabajar con ideas y conceptos que son un subconjunto del mundo real es importante el tratamiento que se les da a las ideas que empleas para construir.
¿Qué es ubicuidad?.
Ubicuidad es un sinónimo de omnipresencia, más allá de un significado religioso. Cuando se habla de lenguaje ubicuo quiere decirse que los conceptos y comportamientos están presentes en varios lugares dentro del ciclo de vida del proyecto. Sobre todo el lenguaje ubicuo debe estar presente en las mentes de los involucrados en el proyecto. Todos, no importa el nivel técnico, deben poder hablar con los mismos términos que se refieren a las mismas cosas desde la terminología del usuario, no del TI.
El lenguaje ubicuo construye puentes y destruye muros.
Frecuentemente, los proyectos en la empresa inician desde dos puntos. Primero, un dueño del problema requiere de una solución tecnológica, con su enfoque de alto nivel construye el requerimiento o una mera descripción de la problemática. Después, el equipo de desarrollo construye una especificación basada en lo que se entendió de la descripción, desde el bajo nivel. Es común que el equipo de desarrollo piense en lenguajes, frameworks, plataformas, bases de datos o infraestructura como primer paso. ¿Qué tan posible es que existan lagunas en el conocimiento del problema?, ¿qué tan posible es que el dueño del problema y el equipo de desarrollo vean las cosas distintas?, ¿qué tan posible es que la problemática sea más compleja de lo que se cree por ambas partes?. La respuesta a estas preguntas es: muy posible.
Rara vez hay una preocupación de los implicados por clarificar conceptos durante el desarrollo de un proyecto, esto implica que se deja a interpretación de cada persona lo que se supone que debe o puede hacer el sistema. Sin haber tirado una sola línea de código es posible encontrar fallos en el diseño, siempre es preferible dedicar tiempo a asegurarse que los conceptos fundamentales del problema a resolver se llaman igual y significan lo mismo en todas partes del subdominio del problema. Si todos hablan en los mismos términos, las reuniones de revisión, cambios, seguimiento o entrega van a ser definitivamente más fáciles.
El lenguaje ubicuo mejora la calidad del código.
Las ideas y los comportamientos del sistema son susceptibles a perderse en la codificación. No solamente hay que asegurarse de que usas los mismos términos con las personas, las maquinas también deben de seguir esta práctica. Los conceptos de alto nivel plasmados en el requerimiento, en términos del usuario, deben de ser modelados de igual modo en la arquitectura de la solución. Teniendo fidelidad con las entidades y comportamientos empleados es fácil hacer cambios, también es fácil de corregir. La legibilidad de un código en términos ubicuos permite que el programador gaste menos esfuerzo mental en resolver problemas derivados del mantenimiento. Si tu código se puede leer como prosa o un pseudo lenguaje de dominio cualquiera podrá dar mantenimiento, no solo el equipo original.
El lenguaje ubicuo previene malas prácticas.
El principal smell que se elimina cuando decides emplear términos ubicuos es la obsesión con los primitivos, al tener estructuras de datos con mayor significado las puedes utilizar para construir las reglas de negocio o los algoritmos. También permite reducir las dependencias porque es más sencillo diferenciar que es una política y que es un detalle. Las pruebas resultan más sencillas porque es más claro definir cuáles son los caminos críticos para probar. Incluso se pueden encontrar fallos en la arquitectura o faltantes en el conocimiento de la solución.
Autor imagen: Leon Riskin
Referencias:
- NVL in SQL Server - 2023-11-01
- ¿Que es Cake Build? - 2023-02-22
- #How to fix error: MSB4019: The imported project «Microsoft.Data.Tools.Schema.SqlTasks.targets» was not found - 2023-02-20