jueves, 31 de mayo de 2007

El axioma principal...

Es muy difícil entender "qué" es el software, es más, hay muchas definiciones que dependen de distintos puntos de viste (comercial: un medio para ganar dinero; técnico: customización del hardware; etc.)
Luego de varios años de buscar una definición que me satisfaga desde el punto de vista de "desarrollo de software", he llegado a adoptar la siguiente definición:
"Software es un modelo computable de un domino de problema de la realidad"
Por supuesto que yo no cree esta definición sino que es una idea que se creo por la década del '60 y que tuvo sus primeras pruebas con los lenguajes Simula y luego Smalltalk.
Para entender bien la definición hay que definir bien que se entiende por cada palabra que está en negrita:
1) Realidad: Por realidad se entiende "Todo", hasta la nada!. O sea, todo lo que podamos pensar, ver, tocar, que haya sucedido, que pueda suceder, que esté sucediendo, etc.
2) Dominio de Problema: Recorte que se realiza de la Realidad y que se desea modelar/resolver con el software.
3) Modelo: Por modelo se entiende algo que "simula" o "representa" lo que se está modelando. Por ejemplo, la fórmula física de aceleración es un modelo sobre el movimiento de las cosas; la fórmula de interés simple es un modelo sobre cuanto dinero se ganará al realizar una inversión.
4) Computable: Por computable entendemos todo aquello que pueda ser "ejecutado" en una Máquina de Turing.

En conclusión, el software es un modelo de algo que sucede en la realidad, y ese modelo debe poder ser "computado" en una máquina que generalmente denominamos computadora.

Es a partir de esta definición que surgen muchas dudas, como por ejemplo:
1) ¿Qué herramientas tenemos para construir este modelo? Por ejemplo, la física utiliza la matemática para definir sus modelos
2) ¿Cómo podemos determinar que un modelo (en definitiva, software) es bueno o malo?
3) ¿Cómo se pueden crear buenos modelos?

En otros post comentaré y responderé cada una de estas preguntas y muchas más.