Basura entra, basura sale. Este axioma es una de las primeras lecciones que se aprende al entrar al mundo de las ciencias de la informática. El mensaje de fondo es muy claro: si los datos o instrucciones que introducimos a la computadora no son los correctos, la respuesta que recibiremos tampoco será la adecuada. Es un principio bastante simple, pero en la complejidad de los algoritmos necesarios para crear un programa, a veces se escapan algunas instrucciones «basura» que termina por arruinar todo el trabajo. Ese es el problema que sucede con el código espagueti.
La razón por la que se le bautizó como código espagueti (‘spaghetti code’) fue su falta de reglas de programación, la complejidad de su control de flujo y esa analogía con ese montón de hilos intrincados y anudados que forma el espagueti. Si bien se suele asociar con problemas de viejos lenguajes de programación, es algo que sucede también en algunos casos más recientes.
Eso es lo que ha ocurrido con la Programación Orientada a Objetos (POO). Se trata de un modelo de programación informática que organiza el diseño de software en torno a datos u objetos, en lugar de funciones y lógica. Un objeto se puede definir como un campo de datos que tiene atributos y comportamiento únicos. La programación orientada a objetos se centra en los objetos que los desarrolladores quieren manipular en lugar de la lógica necesaria para manipularlos. Este enfoque de programación es adecuado para programas grandes, complejos y que se actualizan o mantienen activamente.
La organización de un programa orientado a objetos también hace que el método sea beneficioso para el desarrollo colaborativo, donde los proyectos se dividen en grupos.Los beneficios adicionales de la programación orientada a objetos incluyen la reutilización, la escalabilidad y la eficiencia del código. Incluso cuando se utilizan microservicios, los desarrolladores deben seguir aplicando los principios de la programación orientada a objetos.
No todo lo que brilla
Sin embargo, esta herramienta, que se presentaba como la solución a todos los problemas a la hora de programar ha sido objeto de duras críticas. Mucha gente la ha cuestionado, incluidos ingenieros de software muy destacados. Incluso el inventor de la programación orientada a objetos es un conocido crítico.
Los POO son responsables de los numerosos incidentes relacionados con la denominada “aceleración involuntaria”, que ha plagado a los coches Toyota durante más de una década y provocado cerca de 100 muertes. Algunos expertos sospechan desde hace mucho tiempo que podría haber estado en juego un software defectuoso.
Los expertos en software han demostrado más de 10 millones de formas en que el software de Toyota puede provocar una aceleración involuntaria. Finalmente, Toyota se vio obligada a retirar más de 9 millones de automóviles y pagó más de 3.000 millones en multas y tarifas de liquidación.
El caso del Toyota Camry no es único. Dos aviones Boeing 737 Max se estrellaron, causando 346 muertos y más de 60 mil millones de dólares en daños. Todo debido a un error de software, con 100% de certeza causado por el código espagueti.
El código espagueti afecta a demasiadas bases de código en todo el mundo. Computadoras a bordo de aviones, equipo médico, código que se ejecuta en centrales nucleares.
Dónde está el problema
El código espagueti impide que el cerebro humano comprenda la base del código. No permite ver la consecuencia de algún cambio. En consecuencia, las pruebas exhaustivas para detectar fallas se vuelven imposibles. Nadie puede siquiera estar seguro de que dicho sistema funcione correctamente. Y si funciona ni siquiera sabrá exactamente por qué funciona.
Por supuesto, nadie crea un código espagueti a propósito. Pero un código ordenado se convierte en espagueti con el tiempo. Esto se debe al principio de entropía, que dice que todo en el universo eventualmente se vuelve desorganizado, caótico. Conforme vamos agregando más instrucciones y haciendo más cambios, sobrevienen los enredos.
La única forma de evitarlo es establecer suficientes restricciones que imposibiliten cambios que generen enredos. Pero ello limita las funcionalidades del programa a futuro. Las OOP carecen de restricciones adecuadas para evitar que el código se convierta en un espagueti. Es su principal inconveniente.
La necesidad de cambiar
El código espagueti hace que el software no se pueda mantener. Sin embargo, es solo una parte del problema. También impide que el software sea totalmente predecible. Para que un sistema sea confiable, el usuario debe recibir una misma respuesta a una misma acción siempre, pase lo que pase.
Mover la palanca para que el tren de aterrizaje baje, debería hacer que el tren de aterrizaje baje, el 100% de las veces, no el 95%, no el 99,5%. Es altamente indeseable que el avión muestre comportamientos aleatorios. Incluso si estos problemas ocurren solo una vez en un billón de veces. Lo mismo vale para los coches, los sistemas de defensa, los equipos médicos.
La respuesta es hacer que los programas sean realmente deterministas. Eso significa que, ante una misma instrucción den siempre la misma respuesta, independientemente de otras circunstancias. La plaga del código espagueti atenta contra el determinismo del software, pero también contra la vida humana.
Lea también: