¿Qué es(tá mal en) el software?
El software se está comiendo el mundo. Si trabajas, vives y amas el software, normalmente no te detienes a pensar en su significado.
TL;DR: Los problemas actuales de diseño de software abordados de una manera minimalista.
En la universidad y la industria, a menudo puedes encontrar la siguiente definición de software:
El software es un conjunto de instrucciones que con ciertos datos de entrada genera datos de salida.
Esta es la definición de qué es un programa de computadora según la Wikipedia:
Es el conjunto de los programas de cómputo, procedimientos, reglas, documentación y datos asociados, que forman parte de las operaciones de un sistema de computación.
Hace muchas décadas, los científicos de la computación entendieron que el software es mucho más que un programa.
Todavía carecen de definiciones claras sobre qué es el software.
De nuevo, según la Wikipedia:
El software de computadora, o simplemente software, es una colección de datos o instrucciones que le dicen a la computadora cómo trabajar. Esto contrasta con el hardware físico, a partir del cual se construye el sistema y realiza el trabajo.
Esta definición funciona por contraste (todo lo que no es hardware) o por omisión (todo lo que no puedes patear pero sí maldecir).
Sin embargo, el único propósito de construir software es:
Imitar algo que sucede en una realidad posible.
Esto era esencial durante los orígenes de los lenguajes modernos de programación como Simula
Simula fue el primer lenguaje de programación orientado a objetos que incluyó clasificación.
En el lenguaje, era claro desde el nombre que el objetivo de la construcción de software era hacer un simulador.
Este es el caso de la mayoría de las aplicaciones de software actuales.
Volviendo a los orígenes, puedes definir el software como la construcción de un:
(M)odelo: (A)bstracto, (P)arcial y (P)rogramable que (E)xplica la (R)ealidad.
¿Por qué es un (M)odelo?
El modelo es el resultado de observar un cierto aspecto de la realidad.
Está construido bajo cierto lente, perspectiva y paradigma.
No es la verdad revelada.
Es la mejor concepción posible en un momento dado con el conocimiento disponible.
Desde la época de Platón, los seres humanos han intentado construir buenos modelos de la realidad.
Foto por Max LaRochelle en Unsplash
¿Por qué es (A)bstracto?
Solo puedes entenderlo y observarlo con instrumentos, como una caja negra, sobre la base de su comportamiento frente a tus estímulos.
Como el gato de Schrödinger.
No puedes saber en qué estado está sin perturbarlo con tus instrumentos de medición.
La técnica de casos de uso es una excelente herramienta para describir un modelo de forma declarativa.
¿Por qué es (P)rogramable?
Tiene que ejecutarse en algún tipo de simulador que reproduzca las condiciones deseadas.
Puede ser un modelo de Turing (computadoras comerciales actuales), una computadora cuántica o cualquier tipo de simulador capaz de evolucionar con el modelo.
¿Por qué es (P)arcial?
Es necesario hacer un recorte parcial de la realidad para el problema que estás modelando.
Esto es común a los modelos científicos.
Simplificas aspectos que no son relevantes para aislar el problema.
Un mapa de la Tierra a escala 1:1 no tendría sentido.
¿Por qué es (E)xplicativo?
El modelo debe ser lo suficientemente declarativo para permitir observar su evolución.
Permite razonar y predecir comportamientos en la realidad que está modelando.
¿Por qué es sobre la (R)ealidad?
Porque tiene que reproducir condiciones que ocurren en un entorno observable.
El objetivo final es predecir el mundo real, como cualquier simulación.
Una vez que defines el software, puedes empezar a inferir buenas prácticas de modelado y diseño.
Punto de partida
Tienes la definición axiomática presentada en este artículo.
A partir de ella, vas a inferir principios, heurísticas y reglas para construir excelentes modelos de software.
The One and Only Software Design Principle
Agradecimientos
Estos conceptos están basados en los pensamientos de David West, Máximo Prieto y Hernán Wilkinson.
Parte del objetivo de esta serie de artículos es generar espacios de debate y discusión sobre diseño de software.
Espero comentarios y sugerencias sobre este artículo.
Versión en inglés: What is (wrong with) software?





