SlideShare una empresa de Scribd logo
1 de 108
Descargar para leer sin conexión
Hacia una síntesis de diseño a partir de
entender “Qué es Modelar con Software”
➢ Socio Fundador de 10Pines
➢ Socio Fundador de FAST
➢ Profesor de FCEyN UBA
➢ Director Adjunto del Depto. de
Computación de FCEyN UBA
...
➢ Sobre todo, programador apasionado
Hernán Wilkinson
Hernán Wilkinson
hernan.wilkinson@10pines.com
@HernanWilkinson
https://alagorra.10pines.com
https://alagorra.10pines.com
Tengo una hipótesis…
Si entendiéramos
qué es modelar con software,
seríamos mucho más felices
😀😀😀
¿Qué es Software?
Software
Software
Software
Conjunto de
Instrucciones que dado
cierto input genera cierto
output
Software
Si Software es un “Conjunto de
Instrucciones” …
¿Qué es “buen software”?
¿Cómo organizamos el “software”?
Software
(Conocimiento expresado en un)
Modelo Computable
de un Dominio de Problema
de la Realidad
Software
Si Software es un “Modelo” …
¿Qué es “buen software”?
¿Cómo organizamos el “Software”?
(rails way vs. modelo way)
Software
“Buen Software” == “Buen Modelo”
Lo debemos organizar según la
organización del Dominio de Problema
Realidad
R
Dominio de Problema
R
Arbitrario
-
Lenguaje
Natural
-
Ambiguo
Contextual
Modelo
R
Arbitrario
-
Lenguaje
Natural
-
Ambiguo
Contextual
Representación
¿Para qué modelamos?
¿En qué lenguaje modelamos?
¿Qué tipo de modelos hacemos?
Modelo Computable
R
Arbitrario
-
Lenguaje
Natural
-
Ambiguo
Contextual
Lenguaje
Formal
-
Ejecutable
-
Código
Fuente
Representación
Software
Lenguaje de Programación → Formal
Ejecutable → El tiempo transcurre
El modelo está expresado en el código
fuente, no en diagramas
Característica fundamental:
Paso del Tiempo en el Modelo
t 0
t n
Es Dinámico - El tiempo transcurre
.
.
.
.
.
.
Software
Aquello que representa el modelo cambia
Plano de Arquitectura = Una casa
Software = Qué es una casa
¿Cómo Desarrollamos Software?
¿Cómo “creamos” un
Modelo?
Observamos
Observamos
Modelo
Mental
Observamos
Modelo
Mental
Proyectamos
Observamos
Proyectamos
Reflexionamos
Observamos
Proyectamos
Reflexionamos
Aprendemos
Observamos
Proyectamos
Reflexionamos
Aprendemos Lenguaje
Natural
(idioma)
Lenguaje
Formal
(leng. de
Prog.)
Observamos
Proyectamos
Reflexionamos
Aprendemos Lenguaje
Natural
(idioma)
Lenguaje
Formal
(leng. de
Prog.)
Proceso de Aprendizaje a través
de Formalización de
Conocimiento
Característica fundamental:
Paso del Tiempo en el Desarrollo
Diseñamos
Para
Entender
t 0 t n
Paso del Tiempo y Aprendizaje
Transmisión de Conocimiento
t 0 t n
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
Software
Es fundamental que nuestros modelos
“nos enseñen”
https://academia.10pines.com/topics/10/videos/37
Algunas conclusiones
importantes
Modelar es una actividad “creativa”, no repetitiva
Estimar es difícil porque no estimamos
Cómo Construir sino Cómo Diseñar
Por ser un proceso de aprendizaje, trabajar con
hechos concretos y el feedback inmediato es
fundamental
Por esto TDD es fundamental
Es un trabajo de mejora constante
Nunca lo primero que hacemos “está bien”
¡El cambio más importante es el que refleja
cómo entendemos el dominio!
Experimentemos con
Observar
Modelar un Semáforo
Modelar un Semáforo
luzRoja o señalDeDetención
H1: Siempre modelar el rol del ente
físico, no el ente físico
¿Semáforo?
¿Qué podemos decir de
Representar?
H2: Por cada ente de la realidad debe haber un
objeto que lo represente
¿Se cumple siempre?
¿Cómo representamos Feb/2018,
un mes de un año,
en Ruby/Python/JavaScript/C++/etc?
Software
¡No se puede!
Problemas:
● Soluciones ad-hoc
● Reinvención de la “rueda pinchada”
● Software difícil de entender
● Código repetido
● Errores inesperados
Java 1.8
Smalltalk con Chalten
Interludio
Los calendarios son un excelente ejemplo
de modelado y uso de metáforas
Un muy buen ejemplo de un
muy mal modelo es
java.util.Calendar
Fin de Interludio
¿Cómo modelo una LlamadaTelefónica?
NullPointerException - doesNotUnderstand:
NullPointerException - doesNotUnderstand:
No compila/doesNotUnderstand:
No compila/doesNotUnderstand:
No compila/doesNotUnderstand:
Problemas:
● El modelo no nos enseña cómo usarlo
● El modelo no nos enseña cómo
evoluciona
● Errores de null por todos lados
● etc etc etc
H3: Un objeto debe ser inmutable si el ente que
representa es inmutable
H4: Los objeto se debe crear completos
H4.1: Tener un único constructor principal
El resto deben estar basados en el completo
¿Se debería poder crear 31/Feb/2018?
¿Se debería poder crear 31/Feb/2018?
03/03/2018
¿Se debería poder crear 31/Feb/2018?
¡Excepción!
¿Se debería poder crear 31/Feb/2018?
¡Excepción!
Problemas:
● Modelos inconsistentes
● Errores inadvertidos
● ¡Modelos que no nos enseñan!
● etc etc etc
H5: Solo crear objetos válidos
H6: Representar entes inválidos o en proceso de
estar completados
con sus objetos correspondientes
¿Qué sucede con esta relación?
¿Qué sucede con esta relación?
¡Complejidad Accidental!
Complejidad = C. Esencial + C. Accidental
¿Qué sucede con esta relación?
¿Qué sucede con esta relación?
Problemas:
● ¡Pérdida de Información!
● Modelos que no nos enseñan
● Nosotros tenemos que “deducir”
● etc etc etc
Ejemplo de medidas
Ejemplo más paradigmático…
https://www.youtube.com/watch?v=8cgmdaKwRvU
Design Principles Behind Patagonia
Barcelona - Esug 2010
H7: Modelar con Medidas, no solo números
H8: No usar null
Buen modelo implica
No vamos a encontrar la solución en
nuestra profesión
aunque …
👏👏
👏
H9: Modelar “conjuntos de objetos”
H10: Modelar la arquitectura del sistema en el
sistema mismo
https://academia.10pines.com/topics/10/videos/42
Conclusiones
● Entender qué significa modelar con Software
simplifica mucho los problemas que tenemos en
la actualidad
● Nos da un marco conceptual sobre el cual
pensar nuestros procesos y diseños
De ahora en adelante, cada vez
que te enfrentes a un problema,
pensalo en el marco de
“qué es modelar con software”
https://alagorra.10pines.com
http://academia.10pines.com
http://academia.10pines.com
Muchas gracias
info@10pines.com
10pines.com
+54 (011) 6091-3125 / 4893-2057
Av. Leandro N. Alem 896 6° - Bs. As. - Argentina
@10pines
Creative Software Development

Más contenido relacionado

Similar a Hacia una síntesis de diseño a partir de entender Modelado de Software

Consejos de un perro viejo programador
Consejos de un perro viejo programadorConsejos de un perro viejo programador
Consejos de un perro viejo programadorBraulio Diez Botella
 
Desarrollo ágil de software
Desarrollo ágil de softwareDesarrollo ágil de software
Desarrollo ágil de softwareJose Ramón Díaz
 
El Desarrollador Total
El Desarrollador TotalEl Desarrollador Total
El Desarrollador TotalSergio Gil
 
El diseñador a medias (con notas). UX Spain 2013
El diseñador a medias (con notas). UX Spain 2013 El diseñador a medias (con notas). UX Spain 2013
El diseñador a medias (con notas). UX Spain 2013 qweos
 
La creatividad, el motor del negocio
La creatividad, el motor del negocioLa creatividad, el motor del negocio
La creatividad, el motor del negocioDaphne Repain
 
5 pasos para crear un buen producto
5 pasos para crear un buen producto5 pasos para crear un buen producto
5 pasos para crear un buen productocarrasmolo
 
Charla Tdd Uji 032010
Charla Tdd Uji 032010Charla Tdd Uji 032010
Charla Tdd Uji 032010Carlos Ble
 
Proyecto de valor vs proyectos de funcionalidades
Proyecto de valor vs proyectos de funcionalidadesProyecto de valor vs proyectos de funcionalidades
Proyecto de valor vs proyectos de funcionalidadesPMI Capítulo México
 
The Empowerment educations for all students
The Empowerment educations for all studentsThe Empowerment educations for all students
The Empowerment educations for all studentsvictor841798
 
Clase 6 E-Marketing 2015
Clase 6 E-Marketing 2015Clase 6 E-Marketing 2015
Clase 6 E-Marketing 2015Sergio Sicheri
 
FSH presencial UTEC Facilitadores
FSH presencial UTEC   FacilitadoresFSH presencial UTEC   Facilitadores
FSH presencial UTEC FacilitadoresArturo Coral
 
¿Cómo trabajamos los diseñadores digitales?
¿Cómo trabajamos los diseñadores digitales?¿Cómo trabajamos los diseñadores digitales?
¿Cómo trabajamos los diseñadores digitales?Jimena Catalina Gayo
 
User Experience Research: los métodos más usados en Mercado Libre
User Experience Research: los métodos más usados en Mercado LibreUser Experience Research: los métodos más usados en Mercado Libre
User Experience Research: los métodos más usados en Mercado LibreSol Velazquez
 
ESPAE Bootcamp Enero 2018
ESPAE Bootcamp Enero 2018ESPAE Bootcamp Enero 2018
ESPAE Bootcamp Enero 2018KuroiZero
 
equipos-de-ingenieria_4888526a-dde9-4227-b8fa-7e155078f305.pdf
equipos-de-ingenieria_4888526a-dde9-4227-b8fa-7e155078f305.pdfequipos-de-ingenieria_4888526a-dde9-4227-b8fa-7e155078f305.pdf
equipos-de-ingenieria_4888526a-dde9-4227-b8fa-7e155078f305.pdffrank calisaya lopez
 
Keikendo - CodeCamp 2010
Keikendo - CodeCamp 2010Keikendo - CodeCamp 2010
Keikendo - CodeCamp 2010Corvalius
 

Similar a Hacia una síntesis de diseño a partir de entender Modelado de Software (20)

Consejos de un perro viejo programador
Consejos de un perro viejo programadorConsejos de un perro viejo programador
Consejos de un perro viejo programador
 
Desarrollo ágil de software
Desarrollo ágil de softwareDesarrollo ágil de software
Desarrollo ágil de software
 
El Desarrollador Total
El Desarrollador TotalEl Desarrollador Total
El Desarrollador Total
 
Lienzo de modelos de negocios.
Lienzo de modelos de negocios.Lienzo de modelos de negocios.
Lienzo de modelos de negocios.
 
El diseñador a medias (con notas). UX Spain 2013
El diseñador a medias (con notas). UX Spain 2013 El diseñador a medias (con notas). UX Spain 2013
El diseñador a medias (con notas). UX Spain 2013
 
La creatividad, el motor del negocio
La creatividad, el motor del negocioLa creatividad, el motor del negocio
La creatividad, el motor del negocio
 
Present 1
Present 1Present 1
Present 1
 
Manual robotica estudiante(1)
Manual robotica estudiante(1)Manual robotica estudiante(1)
Manual robotica estudiante(1)
 
5 pasos para crear un buen producto
5 pasos para crear un buen producto5 pasos para crear un buen producto
5 pasos para crear un buen producto
 
Charla Tdd Uji 032010
Charla Tdd Uji 032010Charla Tdd Uji 032010
Charla Tdd Uji 032010
 
Proyecto de valor vs proyectos de funcionalidades
Proyecto de valor vs proyectos de funcionalidadesProyecto de valor vs proyectos de funcionalidades
Proyecto de valor vs proyectos de funcionalidades
 
The Empowerment educations for all students
The Empowerment educations for all studentsThe Empowerment educations for all students
The Empowerment educations for all students
 
Clase 6 E-Marketing 2015
Clase 6 E-Marketing 2015Clase 6 E-Marketing 2015
Clase 6 E-Marketing 2015
 
FSH presencial UTEC Facilitadores
FSH presencial UTEC   FacilitadoresFSH presencial UTEC   Facilitadores
FSH presencial UTEC Facilitadores
 
Unidad 3 elaboracion de un proyecto (3.1)
Unidad  3   elaboracion de un proyecto (3.1)Unidad  3   elaboracion de un proyecto (3.1)
Unidad 3 elaboracion de un proyecto (3.1)
 
¿Cómo trabajamos los diseñadores digitales?
¿Cómo trabajamos los diseñadores digitales?¿Cómo trabajamos los diseñadores digitales?
¿Cómo trabajamos los diseñadores digitales?
 
User Experience Research: los métodos más usados en Mercado Libre
User Experience Research: los métodos más usados en Mercado LibreUser Experience Research: los métodos más usados en Mercado Libre
User Experience Research: los métodos más usados en Mercado Libre
 
ESPAE Bootcamp Enero 2018
ESPAE Bootcamp Enero 2018ESPAE Bootcamp Enero 2018
ESPAE Bootcamp Enero 2018
 
equipos-de-ingenieria_4888526a-dde9-4227-b8fa-7e155078f305.pdf
equipos-de-ingenieria_4888526a-dde9-4227-b8fa-7e155078f305.pdfequipos-de-ingenieria_4888526a-dde9-4227-b8fa-7e155078f305.pdf
equipos-de-ingenieria_4888526a-dde9-4227-b8fa-7e155078f305.pdf
 
Keikendo - CodeCamp 2010
Keikendo - CodeCamp 2010Keikendo - CodeCamp 2010
Keikendo - CodeCamp 2010
 

Más de Hernan Wilkinson

Live Typing - California Smalltalkers
Live Typing - California SmalltalkersLive Typing - California Smalltalkers
Live Typing - California SmalltalkersHernan Wilkinson
 
Buenos Aires vs. (London vs. Chicago) Agiles 2020
Buenos Aires vs. (London vs. Chicago) Agiles 2020Buenos Aires vs. (London vs. Chicago) Agiles 2020
Buenos Aires vs. (London vs. Chicago) Agiles 2020Hernan Wilkinson
 
LiveTyping - Anotación automática de tipos para lenguajes dinámicos
LiveTyping - Anotación automática de tipos para lenguajes dinámicosLiveTyping - Anotación automática de tipos para lenguajes dinámicos
LiveTyping - Anotación automática de tipos para lenguajes dinámicosHernan Wilkinson
 
LiveTyping: Update and What is next
LiveTyping: Update and What is nextLiveTyping: Update and What is next
LiveTyping: Update and What is nextHernan Wilkinson
 
Cuis smalltalk past present and future
Cuis smalltalk past present and futureCuis smalltalk past present and future
Cuis smalltalk past present and futureHernan Wilkinson
 
Live Typing - Automatic Type Annotation that improves the Programming eXperie...
Live Typing- Automatic Type Annotation that improves the Programming eXperie...Live Typing- Automatic Type Annotation that improves the Programming eXperie...
Live Typing - Automatic Type Annotation that improves the Programming eXperie...Hernan Wilkinson
 
El Desarrollo de Software como debería Ser - PyConAr 2018
El Desarrollo de Software como debería Ser - PyConAr 2018El Desarrollo de Software como debería Ser - PyConAr 2018
El Desarrollo de Software como debería Ser - PyConAr 2018Hernan Wilkinson
 
Lessons Learned Implementing Refactorings
Lessons Learned Implementing RefactoringsLessons Learned Implementing Refactorings
Lessons Learned Implementing RefactoringsHernan Wilkinson
 
El Desarrollo de Software como debería Ser - Nerdear.la 2018
El Desarrollo de Software como debería Ser - Nerdear.la 2018El Desarrollo de Software como debería Ser - Nerdear.la 2018
El Desarrollo de Software como debería Ser - Nerdear.la 2018Hernan Wilkinson
 
El Desarrollo de Software como debería Ser
El Desarrollo de Software como debería SerEl Desarrollo de Software como debería Ser
El Desarrollo de Software como debería SerHernan Wilkinson
 
Go/Ruby/Java: What's next?
Go/Ruby/Java: What's next?Go/Ruby/Java: What's next?
Go/Ruby/Java: What's next?Hernan Wilkinson
 
Exceptions: Why, When, How and Where!
Exceptions: Why, When, How and Where!Exceptions: Why, When, How and Where!
Exceptions: Why, When, How and Where!Hernan Wilkinson
 
Augmenting Smalltalk Syntax
Augmenting Smalltalk SyntaxAugmenting Smalltalk Syntax
Augmenting Smalltalk SyntaxHernan Wilkinson
 
Growing an open participative horizontal and based on trust company
Growing an open participative horizontal and based on trust companyGrowing an open participative horizontal and based on trust company
Growing an open participative horizontal and based on trust companyHernan Wilkinson
 
Como escribir buenos tests al hacer TDD
Como escribir buenos tests al hacer TDDComo escribir buenos tests al hacer TDD
Como escribir buenos tests al hacer TDDHernan Wilkinson
 
Desarrollando sistemas con metodologías y técnicas agiles
Desarrollando sistemas con metodologías y técnicas agilesDesarrollando sistemas con metodologías y técnicas agiles
Desarrollando sistemas con metodologías y técnicas agilesHernan Wilkinson
 

Más de Hernan Wilkinson (20)

Live Typing - California Smalltalkers
Live Typing - California SmalltalkersLive Typing - California Smalltalkers
Live Typing - California Smalltalkers
 
Buenos Aires vs. (London vs. Chicago) Agiles 2020
Buenos Aires vs. (London vs. Chicago) Agiles 2020Buenos Aires vs. (London vs. Chicago) Agiles 2020
Buenos Aires vs. (London vs. Chicago) Agiles 2020
 
LiveTyping - Anotación automática de tipos para lenguajes dinámicos
LiveTyping - Anotación automática de tipos para lenguajes dinámicosLiveTyping - Anotación automática de tipos para lenguajes dinámicos
LiveTyping - Anotación automática de tipos para lenguajes dinámicos
 
LiveTyping: Update and What is next
LiveTyping: Update and What is nextLiveTyping: Update and What is next
LiveTyping: Update and What is next
 
Cuis smalltalk past present and future
Cuis smalltalk past present and futureCuis smalltalk past present and future
Cuis smalltalk past present and future
 
Live Typing - Automatic Type Annotation that improves the Programming eXperie...
Live Typing- Automatic Type Annotation that improves the Programming eXperie...Live Typing- Automatic Type Annotation that improves the Programming eXperie...
Live Typing - Automatic Type Annotation that improves the Programming eXperie...
 
El Desarrollo de Software como debería Ser - PyConAr 2018
El Desarrollo de Software como debería Ser - PyConAr 2018El Desarrollo de Software como debería Ser - PyConAr 2018
El Desarrollo de Software como debería Ser - PyConAr 2018
 
Lessons Learned Implementing Refactorings
Lessons Learned Implementing RefactoringsLessons Learned Implementing Refactorings
Lessons Learned Implementing Refactorings
 
Dynamic Type Information
Dynamic Type InformationDynamic Type Information
Dynamic Type Information
 
El Desarrollo de Software como debería Ser - Nerdear.la 2018
El Desarrollo de Software como debería Ser - Nerdear.la 2018El Desarrollo de Software como debería Ser - Nerdear.la 2018
El Desarrollo de Software como debería Ser - Nerdear.la 2018
 
El Desarrollo de Software como debería Ser
El Desarrollo de Software como debería SerEl Desarrollo de Software como debería Ser
El Desarrollo de Software como debería Ser
 
TDD & Refactoring
TDD & RefactoringTDD & Refactoring
TDD & Refactoring
 
Go/Ruby/Java: What's next?
Go/Ruby/Java: What's next?Go/Ruby/Java: What's next?
Go/Ruby/Java: What's next?
 
Exceptions: Why, When, How and Where!
Exceptions: Why, When, How and Where!Exceptions: Why, When, How and Where!
Exceptions: Why, When, How and Where!
 
CuisUniversity
CuisUniversityCuisUniversity
CuisUniversity
 
Oop is not Dead
Oop is not DeadOop is not Dead
Oop is not Dead
 
Augmenting Smalltalk Syntax
Augmenting Smalltalk SyntaxAugmenting Smalltalk Syntax
Augmenting Smalltalk Syntax
 
Growing an open participative horizontal and based on trust company
Growing an open participative horizontal and based on trust companyGrowing an open participative horizontal and based on trust company
Growing an open participative horizontal and based on trust company
 
Como escribir buenos tests al hacer TDD
Como escribir buenos tests al hacer TDDComo escribir buenos tests al hacer TDD
Como escribir buenos tests al hacer TDD
 
Desarrollando sistemas con metodologías y técnicas agiles
Desarrollando sistemas con metodologías y técnicas agilesDesarrollando sistemas con metodologías y técnicas agiles
Desarrollando sistemas con metodologías y técnicas agiles
 

Hacia una síntesis de diseño a partir de entender Modelado de Software