viernes, 1 de junio de 2007

La característica principal de un buen modelo

Es muy difícil determinar si un modelo es bueno o malo. Es más, en sistemas hay variables o puntos de vistas técnicos que puede influir en esta decisión.
Ahora me voy a limitar a definir si un modelo es bueno o malo cualquiera sea el modelo o el ámbito en el que está hecho. Para mi, un modelo es bueno si:
Para toda observación realizada en el dominio de problema modelado, el modelo reproduce esta observación correctamente (la simula correctamente).
Por observación me refiero a todo aquello que sucede en el dominio que se pueda medir, percibir, etc. En definitiva, que podemos observar (y no me refiero a solamente con los ojos).
Fijensé que esta definición implica que el modelo puede reproducir o simular TODO lo que sucede en el dominio de problema, y además lo hace correctamente.
Por ejemplo, tomando como ejemplo la fórmula de velocidad final de física (es un modelo), esta dice:
velocidadFinal := velocidadInical + aceleración * tiempo.
¿Es este un buen modelo?
Aquellos que hayan tenido física en la secundaria o al menos el CBC saben que no, puesto no tiene en cuenta el rozamiento, un ente que en la realidad existe y hace que este modelo no funcione para ciertas observaciones. Sin embargo es un buen modelo si recortamos aún más la realidad y asumimos que no existe el rozamiento.
Para este nuevo recorte, este modelo podrá reproducir cualquier observación que hagamos sobre la velocidad final que tiene un cuerpo luego de aplicarle una aceleración por cierto tiempo a partir de una velocidad inicial, y por eso la física lo usa y a nosotros nos lo enseñaron.

En conclusión, un buen modelo debe poder reproducir todo lo que sucede en el dominio de problema que modela, de no ser así el modelo no es bueno.
Las preguntas que surgen ahora son, ¿cómo logro un buen modelo?, ¿hay características que tiene todos los buenos modelos?...

Estas ideas las formé hablando con varios amigos y también de los siguientes libros:
[1] The Design of Everyday Things de Donald A. Norman
[2] La fisica Aventura Del Pensamiento de A. Einstein y L. Infeld

6 comentarios:

Carlos dijo...

Hernán, muy interesante y apasionante tu blog. Ya estoy a la espera del "siguiente capítulo"!!.
El análisis de modelo y como identificar un modelo correcto me pareció buenísimo.
Felicitaciones por la iniciativa.

Claudio Acciaresi dijo...

Hola Hernán, siempre que leo o hablo sobre este tema, de los "buenos" modelos, creo que también esta bueno hablar de cómo se debe hacer un bueno modelo dentro de un proyecto, quiero decir, con personas, tiempos, vacaciones, etc...

Creo que un tema interesante para tratar es cómo hacer para poder construir un buen modelo sin dejar de lado que existen estas cosas, que quizás no son inherentes al modelo, cómo performance, tiempos, jefes, DBA, infraestructura, etc, etc...

Anónimo dijo...

Hernán, IMHO, me parece que el concepto de algo "bueno" o "malo" depende del contexto en que se lo observa. Por ejemplo el modelo que planteas como bueno desde mi punto de vista es eficaz, sin embargo no tiene en cuenta la eficiencia como una cualidad de "buen modelo". Como ejemplo se me ocurre que en un juego de pool de un teléfono la eficacia del modelo respecto a modelar la realidad no es para nada importante y sí lo es la eficiencia.
A mi entender la forma de detectar la calidad de un modelo es en gran parte empírica.Y es una apreciación subjetiva, en la que influye el contexto.
Felicitaciones por el blog,
-Hernan

Hernan Wilkinson dijo...

Que tal Claudio!,
gracias por tus comentarios. Entiendo tu interes por estos temas que comentas, pero me va a llevar mucho tiempo llegar a eso... Lo que propones tiene que ver mas con la creacion de un producto, con ingenieria de software, que con la programacion y es entendible porque es lo que todos terminamos haciendo... pero por ahora no me voy a meter con estos temas... solo te voy comentar lo que para mi es clave: La gente. Nuestro trabajo tiene mucho que ver con la gente, con interactuar entre personas y por lo tanto con comunicarnos. "El resto es todo administracion" como diria Tom DeMarco, en Peopleware, un libro por el que podes empezar a encontrar las respuestas a tus preguntas.
Un abrazo
PD: Hay alguna manera de responder a un comentario? o solo se agrega otro comentario?

Hernan Wilkinson dijo...

Que tal "anonimo". Es un buen punto el que estas comentando, sin embargo fijate que en el post estoy hablando de la caracteristica de "bueno" para cualquier modelo, no solo un modelo computacional. La caracteristica de eficiencia no tiene sentido en modelos como el del ejemplo del Movimiento Rectilineo Uniforme que puse. Hay ciertas caracteristicas que dependen de las herramientas que se usan para construir el modelo. En los modelos declarativos (por ejemplo, los que usan la matematica como herramienta) no tiene sentido hablar de eficiencia puesto que solo dice "qué" simula/representa el modelo. En modelos computables, como los que nosotros hacemos, hay caracteristicas que son importantes y que tiene que ver con los recursos que el modelo insume para ser computable (procesador o performance, memoria o espacio, etc), pero son caracteristicas de este tipo de modelos, no de todos los modelos. Es mas, para mi son caracteristicas accidentales y no esenciales (abusando de la categorizacion que Brooks hace en No Silver Bullet). Lo que quiero decir es que por mas que el juego de pool sea eficiente pero no reaccione correctamente cuando la blanca choca la negra, de nada sirve, no esta teniendo en cuenta un caso importante de la realidad.
Pero estoy de acuerdo con vos que esta otra caraterisca es importante y la voy a tratar mas adelante, pero me gusta pensarla como una caracteristica accidental de los modelos computables.
La definicion de "Buen Modelo" trate de que sea valida para cualquier tipo de disciplina que haga modelos.

Anónimo dijo...

Vengo leyendo muchos posts tuyos y son excelentes, pero no estoy de acuerdo con tu posición en este aspecto. La definición de "todo lo que sucede en el dominio del problema" es bastante amplia, e irreproducible por cualquier modelo.
Una frase que me gustó mucho (tiene más que ver con el diseño que con los modelos, pero creo que aplica igual) es del libro "Understanding Computers and Cognition" y dice:
"The most successful designs are not those that try to fully model the domain in which they operate, but those that are "in alignment" with the fundamental structure of that domain, and that allow for modification and evolution to generate new structural coupling".
En fin, no creo que respondas porque sólo a mí se me ocurre escribir en un post de hace más de casi 12 años, pero está bueno para pensar.
Saludos!