MENTES ALGORÍTMICAS

En el número anterior, compartí brevemente mi visión sobre la transformación de un modelo en un sistema de información. Este proceso consiste en una serie de transformaciones que parten de un modelo inicial hasta llegar a un producto ejecutable, capaz de ser interpretado por dispositivos de procesamiento como computadoras, teléfonos celulares, entre otros. A este proceso lo llamaré conversión modelo-sistema para distinguirlo del proceso de modelado. La conversión modelo-sistema es secuencial, ya que la representación conceptual del modelo sirve como base para el desarrollo de algoritmos, los cuales, a su vez, permiten traducir el modelo a un lenguaje de programación. Una vez listo el código, se obtiene el producto final mediante su compilación o interpretación.
Algo más difícil de explicar es cómo alcanzar cada representación, cómo éstas se materializan para el equipo de trabajo y, sobre todo, si dichas especificaciones son útiles para avanzar al siguiente paso del proceso. Por ello, considero crucial comenzar reflexionando sobre el vocabulario empleado en cada etapa de la conversión modelo-sistema:

  1. El proceso comienza con la descripción del modelo conceptual, elaborado en el lenguaje propio de los científicos. En esta fase, los elementos y sus interacciones son definidos en términos que les son familiares y dominan, como, ecuaciones, gráficos, esquemas o descripciones en prosa utilizando términos técnicos.
  2. El modelo algorítmico, aquí el modelo se traduce como pseudocódigo, una forma de crear algoritmos en lenguaje natural, pero dirigido a desarrolladores. El pseudocódigo utiliza instrucciones muy específicas (como una suma de enteros) o complejas (como un algoritmo de ordenamiento), y puede incluir una mezcla de ambas. Este enfoque flexible no sigue una regla estricta de granularidad. Otros ejemplos comunes son instrucciones para guardar elementos en una base de datos, escribir datos en un archivo o realizar una petición de datos a un servidor, entre muchas otras.
  3. El programa está escrito en uno o varios lenguajes de programación conocidos por el programador.
  4. El despliegue del producto final depende del lenguaje de programación utilizado y las tecnologías necesarias para ejecutarlo, pero normalmente suele construirse a través de un programa, ya sea un compilador o herramienta similar, por lo que el lenguaje utilizado está pensado para que lo interprete un dispositivo electrónico con capacidad de procesamiento, no el ser humano.

Si analizamos los lenguajes empleados en cada etapa del proceso de manera inversa, es posible notar un aumento progresivo en su complejidad y riqueza. Por ejemplo, un lenguaje de programación cuenta con un conjunto limitado de instrucciones acotadas y aunque exista el uso libre de variables y etiquetas para varios usos, su estructura está bien definida, ya que deben ser validados por un compilador o interprete para traducirse al “lenguaje máquina”. Aunque el lenguaje algorítmico suele tener muchas libertades, siempre se utilizan términos técnicos conocidos por los programadores, es decir, está acotado de forma conceptual, no de forma estructural o sintáctica. Sin embargo, la construcción del modelo conceptual no sólo contempla palabras, sino elementos no descriptivos que proporcionan por sí mismos mucha información no escrita (como una ecuación).
El principal desafío para convertir un modelo en un programa de computadora que lo represente correctamente, radica en la necesidad de contar con un equipo capaz de manejar los múltiples lenguajes antes mencionados y establecer un proceso de comunicación eficiente. Este proceso debe permitir el desarrollo de mapeos entre los distintos lenguajes, facilitando las abstracciones necesarias en cada etapa. En proyectos multidisciplinarios, esta tarea se vuelve particularmente compleja. Las diferencias en los conceptos utilizados no siempre son conocidos por los miembros del equipo, o existen definiciones que no tienen el mismo significado todos, lo que puede generar malentendidos.
Una vez identificada la problemática, resulta posible analizar los obstáculos específicos que se presentan al trabajar en proyectos y, aunque muchos de ellos los he resuelto, sigo trabajando en otros.