SlideShare une entreprise Scribd logo
1  sur  88
Télécharger pour lire hors ligne
Ágiles 2020
Buenos Aires vs. (London vs. Chicago)
Jazmin Alvarez Vico
➢ Programadora, docente y estudiante de Ciencias de la
Computación en FCEyN de la UBA.
➢ Feminista. Parte de @MujeresDelDC.
➢ Ayudante en las materias de Ingeniería de Software I y
Didáctica de la Computación.
➢ Docente de tecnología en el Bachillerato Popular para
adultes Chilavert.
➢ La pueden seguir en tw: @Jazz_vico y ig: @jaz.vico
➢ 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
Introducción
¿Qué es ...?
¿Qué es
Buenos Aires?
https://alagorra.10pines.com
Episodios
Episodios de Buenos Aires vs. …
Aún faltan varios donde veremos
persistencia y otras cosas
https://alagorra.10pines.com
El nombre “Buenos Aires” es solo por una cuestión
de marketing
No podemos arrojarnos el hecho de que “todo
Buenos Aires” programe de la forma que
mostraremos
Words of Caution
El objetivo no es generar una nueva “grieta” sino
hacer una análisis crítico de las distintas técnicas
para sacar conclusiones y mejorar nuestra forma
de desarrollar
Words of Caution
Descripción del Problema
➢ Registrar un nuevo usuario
➢ Loguearse
➢ Crear “posts” (publicaciones)
○ Palabras “inapropiadas” como elephant, ice cream y orange
➢ Obtener los posts de un usuario (timeline)
➢ Seguir a otro usuario
➢ Obtener los posts propios y de los que sigo (wall)
➢ Obtener todos los usuarios
➢ Obtener los usuarios seguidos por uno en particular
Descripción del Problema
Ejemplo: Registrar nuevo usuario
➢ Descripción de la API
➢ Tests de Aceptación
➢ User Interface (No provista pero usada en los videos)
El ejercicio viene con
Solución London
Esquema de solución
Hacer fallar el primer test
Hacer fallar el primer test
Hacer pasar el primer test
➢ Proceso Outside-In
➢ Diseño orientado al problema computable, no al
negocio
➢ Organización del proyecto en base al problema
computable
➢ Uso de DTOs para comunicación entre “capas”
➢ Uso de ids en vez de objetos
➢ Se expone la password a objetos externos
Conclusiones - Diseño
➢ Tests de APIs de caja blanca
○ Opinión de Hernán: Solo los podes hacer así si ya
sabes cómo vas a hacer la implementación
➢ Hay casos sin testear
○ Usuario con username vacío
○ Se puede usar followers y followees que no
existen
○ Podés seguirte a vos mismo
○ etc.
Conclusiones - Tests
➢ 11 minutos en escribir el primer test
○ Clases: UserAPI, UserService, RegistrationData,
User, UserBuilder
○ 4 Mocks con varias configuraciones
➢ 4 minutos para hacerlo pasar
➢ 5 clases para registrar un usuario
Algunos Números...
Solución Chicago
Esquema de solución (CreateUser)
Primer Test
➢ Proceso Inside-out
➢ Clases que representan Casos de usos
➢ Una clase por API
➢ UseCaseContext, APIContext → Objetos globales
➢ DTOs para comunicación entre “capas”
○ CreateUserRequest igual a User
➢ Uso de variables de instancia públicas
➢ Clases sin/poco comportamiento (estructuras de
datos)
Conclusiones - Diseño
➢ Se expone la password a objetos externos, que además
es público
➢ Se puede postear con palabra inapropiadas
➢ Hay casos sin testear
○ Usuario con username vacío
○ Si follower o followee no existe, lo relaciona con
null
○ Podés seguirte a vos mismo
○ etc.
Conclusiones - Diseño/Tests
➢ La primera vez que corre tests, son 2 tests juntos y
pasan de entrada (Episodio 6 - 14:15)
➢ 5 clases para crear usuario
○ CreateUser, CreateUserRequest,
UseCasaeContext, Repository, User
Algunos Números...
Solución Buenos Aires
➢ Empezar haciendo TDD del modelo del negocio
➢ Seguir estrategia “Middle-Out”
➢ Dejar Interfaces para el final siguiendo la idea de
tecnología perfecta
Cómo es el proceso
Middle-out
obj1
obj2
obj3
obj4
obj5
obj6 obj7
obj8
obj9 objX
Empezar testeando con TDD los
objetos del medio del árbol de
ejecución
Middle-out
obj1
obj2
obj3
obj4
obj5
obj6 obj7
obj9 objX
Empezar testeando con TDD los
objetos del medio del árbol de
ejecución
Test1
Modelo
Tests
obj8
Middle-out
obj1
obj2
obj3
obj4
obj5
obj6 obj7
obj8
obj9 objX
Empezar testeando con TDD los
objetos del medio del árbol de
ejecución
Test1 Test2
Modelo
Tests
Middle-out
obj1
obj2
obj3
obj4
obj5
obj6 obj7
obj8
obj9 objX
Empezar testeando con TDD los
objetos del medio del árbol de
ejecución
Test1 Test2
Modelo
Tests
Test3
Middle-out
obj1
obj2
obj3
obj4
obj5
obj6 obj7
obj8
obj9 objX
Test
1
Test
2
Modelo
Tests
Test
3
RestI
nt
RestI
nt
Test
Interfaces
➢ Se escriben “test funcionales”
(también llamados “sociales”)
➢ No se simulan objetos del sistema
➢ Solo se simula (priorizando stubs) objetos fuera
del sistema, no controlables por los tests. Ej:
○ LocalDateTime.now()
○ UUID.random().toString()
○ Base de datos/Servicios externos/etc.
Cómo es el proceso
➢ Empezar por el Modelo del Negocio
➢ Usar una metáfora para tener una “vista
concreta” del negocio
➢ Heurísticas de Diseño:
○ Usar Objetos Completos
○ User Objetos Válidos
○ Favorecer el uso de Objetos Inmutables
○ No usar null/nil
○ Modelar la solución de manera sistémica
○ Reificar la arquitectura del sistema en el mismo sistema (subsistemas)
Diseño
Arquitectura
¡A Programar!
➢ Primer test:
○ Tiempo en escribir el test: 2 min.
○ Tiempo en hacer pasar el test: 30 seg.
○ Cantidad de clases de modelo: 1
➢ Segundo test:
○ Tiempo en escribir el test: 50 seg.
○ Tiempo en hacer pasar el test: 15 seg.
○ Cantidad de clases de modelo: 1
➢ etc ...
Hechos
Estadísticas de Modelo e
Interfaz
Estadísticas del Modelo
Estadísticas de la Interfaz
Estadísticas sobre el Total
Comportamiento respecto de
Errores
Comportamiento respecto de Errores
Impacto Frente al Cambio y la
Extensibilidad
➢ Cambio: Que el usuario tenga conozca un homePage
○ El homePage es una url que no se valida
➢ Extensión: Poder dar “like” a una publicación
○ Puede ser cualquier usuario, no solo followees
Cambios y Extensiones entre London y Buenos Aires
Agregar url a User
London
url
urlurl
url
urlurl
url
Buenos Aires
url
url
Estadísticas
Clases modificadas en cada paso
Clases modificadas en cada paso
COMENTARIO: En London los tests de Aceptación no pasaban aunque sí pasasen
los tests de programador, indicativo de que hay casos sin testear en los tests de
programador
Diferencias en el código fuente en cada paso
Like a Publication
Estadísticas
Clases modificadas en cada paso
Diferencias en el código fuente en cada paso
Diferencias en el código fuente en cada paso
Conclusiones
➢ Pudimos resolver el mismo problema con:
○ menos clases
○ menos líneas de código
○ más tests
○ más cobertura
○ más casos de error cubiertos
Conclusiones
➢ Pudimos cambiar y ampliar la solución con:
○ cambios más chicos
○ menos clases modificadas
○ menos diferencias a nivel código
Conclusiones
Conclusiones
Los números indican que la solución “Buenos Aires”
es más simple y reacciona mejor al cambio
¿Por qué?
➢ Concentrarnos primero en modelar el
negocio y después en la tecnología
➢ Por seguir un proceso middle-out usando TDD
➢ Seguir buenas heurísticas de diseño
Por qué y Recomendaciones
➢ Minimizar el uso de mocks(*) ya que:
○ generan test de caja blanca
○ son tests frágiles
○ terminan generando inseguridad frente al cambio (más en
leng. dinámicamente tipados)
➢ No empezar el desarrollo por las interfaces:
○ porque se prioriza la tecnología en vez del negocio
○ lleva más tiempo escribir los test y hacerlos pasar
(*) Mocks != Test Doubles
Recomendaciones
Material
➢ repo: https://github.com/sandromancuso/cleancoders_openchat
➢ London:
○ branch: openchat-outside-in
➢ Chicago:
○ branch: openchat-unclebob
Soluciones London vs. Chicago
➢ repo: https://github.com/hernanwilkinson/openchat-buenosaires
➢ agregar url:
○ branch: empezando-desde-user
○ commit: Tests de Aceptación de url en User
○ rev. number: 129a87b7d80a33da93f6e3a6c124514793515faa
➢ likes:
○ branch: master
○ commit: >> Likes: Especificación y tests de Aceptación
○ rev. number: db911fae0dfd4867a74ade31cec903b5149f2be4
Solución Buenos Aires
➢ repo: https://github.com/hernanwilkinson/openchat-london
➢ agregar url:
○ branch: manteniendo-interface
○ commit: Test de UserAPIShould fallando
○ rev. number: 041ffa718c0c05718b05d90f1447e1940d1b61c1
➢ likes:
○ branch: default-url
○ commit: >> Likes: Especificación y tests de Aceptación
○ rev. number: da98f3c44ba08b6e8265e0f909bcbb4e255422d0
Solución London de Agregar url y likes
Preguntas
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

Contenu connexe

Similaire à Ágiles 2020 Buenos Aires vs London Chicago

Probando aplicaciones basadas en LLMs.pdf
Probando aplicaciones basadas en LLMs.pdfProbando aplicaciones basadas en LLMs.pdf
Probando aplicaciones basadas en LLMs.pdfFederico Toledo
 
Ingeniería de software
Ingeniería de softwareIngeniería de software
Ingeniería de softwaremat3matik
 
Ingeniería%20de%20 software[1], maryy
Ingeniería%20de%20 software[1], maryyIngeniería%20de%20 software[1], maryy
Ingeniería%20de%20 software[1], maryynelly
 
Ingeniería de software16
Ingeniería de software16Ingeniería de software16
Ingeniería de software16Ramon
 
Ingenier%c3%ada de software
Ingenier%c3%ada de softwareIngenier%c3%ada de software
Ingenier%c3%ada de softwareMarilupe
 
Ingen de software
Ingen de softwareIngen de software
Ingen de softwareerikapoh
 
Ingeniería de software
Ingeniería de softwareIngeniería de software
Ingeniería de softwaresamantha
 
Ingeniería de software
Ingeniería de softwareIngeniería de software
Ingeniería de software142918
 
Conceptos básicos y aplicaciones prácticas de programación para SEO
Conceptos básicos y aplicaciones prácticas de programación para SEOConceptos básicos y aplicaciones prácticas de programación para SEO
Conceptos básicos y aplicaciones prácticas de programación para SEOnacho mascort
 
Agile university day - Un día en un equipo ágil de desarrollo móvil
Agile university day - Un día en un equipo ágil de desarrollo móvilAgile university day - Un día en un equipo ágil de desarrollo móvil
Agile university day - Un día en un equipo ágil de desarrollo móvilagilenavarra
 
Artalde Tdd intro
Artalde Tdd introArtalde Tdd intro
Artalde Tdd introfperezplain
 
clase-Unidad1 y Unidad2-Pseudo-Print-Scanf-IF (1).pptx
clase-Unidad1 y Unidad2-Pseudo-Print-Scanf-IF (1).pptxclase-Unidad1 y Unidad2-Pseudo-Print-Scanf-IF (1).pptx
clase-Unidad1 y Unidad2-Pseudo-Print-Scanf-IF (1).pptxJulianSimonetta
 
Ponele el TURBO al Dev Team de tu Startup
Ponele el TURBO al Dev Team de tu StartupPonele el TURBO al Dev Team de tu Startup
Ponele el TURBO al Dev Team de tu StartupMartin Siniawski
 
Cobertura de Código con Tests Funcionales
Cobertura de Código con Tests Funcionales Cobertura de Código con Tests Funcionales
Cobertura de Código con Tests Funcionales atSistemas
 

Similaire à Ágiles 2020 Buenos Aires vs London Chicago (20)

Probando aplicaciones basadas en LLMs.pdf
Probando aplicaciones basadas en LLMs.pdfProbando aplicaciones basadas en LLMs.pdf
Probando aplicaciones basadas en LLMs.pdf
 
S9-DAW-2022S1.pptx
S9-DAW-2022S1.pptxS9-DAW-2022S1.pptx
S9-DAW-2022S1.pptx
 
Cuida tu código: Clean Code
Cuida tu código: Clean CodeCuida tu código: Clean Code
Cuida tu código: Clean Code
 
Ingeniería de software
Ingeniería de softwareIngeniería de software
Ingeniería de software
 
Ingeniería%20de%20 software[1], maryy
Ingeniería%20de%20 software[1], maryyIngeniería%20de%20 software[1], maryy
Ingeniería%20de%20 software[1], maryy
 
Ingeniería de software16
Ingeniería de software16Ingeniería de software16
Ingeniería de software16
 
Ingenier%c3%ada de software
Ingenier%c3%ada de softwareIngenier%c3%ada de software
Ingenier%c3%ada de software
 
Ingen de software
Ingen de softwareIngen de software
Ingen de software
 
Ingeniería de software
Ingeniería de softwareIngeniería de software
Ingeniería de software
 
Clase 11
Clase 11Clase 11
Clase 11
 
Ingeniería de software
Ingeniería de softwareIngeniería de software
Ingeniería de software
 
Conceptos básicos y aplicaciones prácticas de programación para SEO
Conceptos básicos y aplicaciones prácticas de programación para SEOConceptos básicos y aplicaciones prácticas de programación para SEO
Conceptos básicos y aplicaciones prácticas de programación para SEO
 
Agile university day - Un día en un equipo ágil de desarrollo móvil
Agile university day - Un día en un equipo ágil de desarrollo móvilAgile university day - Un día en un equipo ágil de desarrollo móvil
Agile university day - Un día en un equipo ágil de desarrollo móvil
 
Artalde Tdd intro
Artalde Tdd introArtalde Tdd intro
Artalde Tdd intro
 
lenguaje c.ppt
lenguaje c.pptlenguaje c.ppt
lenguaje c.ppt
 
Optimizacion de software
Optimizacion de softwareOptimizacion de software
Optimizacion de software
 
clase-Unidad1 y Unidad2-Pseudo-Print-Scanf-IF (1).pptx
clase-Unidad1 y Unidad2-Pseudo-Print-Scanf-IF (1).pptxclase-Unidad1 y Unidad2-Pseudo-Print-Scanf-IF (1).pptx
clase-Unidad1 y Unidad2-Pseudo-Print-Scanf-IF (1).pptx
 
Ponele el TURBO al Dev Team de tu Startup
Ponele el TURBO al Dev Team de tu StartupPonele el TURBO al Dev Team de tu Startup
Ponele el TURBO al Dev Team de tu Startup
 
Presentación: xUnit y Junit
Presentación: xUnit y JunitPresentación: xUnit y Junit
Presentación: xUnit y Junit
 
Cobertura de Código con Tests Funcionales
Cobertura de Código con Tests Funcionales Cobertura de Código con Tests Funcionales
Cobertura de Código con Tests Funcionales
 

Plus de Hernan Wilkinson

Hacia una síntesis de diseño a partir de entender qué es modelar con software
Hacia una síntesis de diseño a partir de entender qué es modelar con softwareHacia una síntesis de diseño a partir de entender qué es modelar con software
Hacia una síntesis de diseño a partir de entender qué es modelar con softwareHernan Wilkinson
 
Live Typing - California Smalltalkers
Live Typing - California SmalltalkersLive Typing - California Smalltalkers
Live Typing - California SmalltalkersHernan 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
 
Técnicas y herramientas para que la computadora haga más y el programador m...
Técnicas y herramientas para que la computadora haga más y el programador m...Técnicas y herramientas para que la computadora haga más y el programador m...
Técnicas y herramientas para que la computadora haga más y el programador m...Hernan Wilkinson
 

Plus de Hernan Wilkinson (20)

Hacia una síntesis de diseño a partir de entender qué es modelar con software
Hacia una síntesis de diseño a partir de entender qué es modelar con softwareHacia una síntesis de diseño a partir de entender qué es modelar con software
Hacia una síntesis de diseño a partir de entender qué es modelar con software
 
Live Typing - California Smalltalkers
Live Typing - California SmalltalkersLive Typing - California Smalltalkers
Live Typing - California Smalltalkers
 
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
 
Técnicas y herramientas para que la computadora haga más y el programador m...
Técnicas y herramientas para que la computadora haga más y el programador m...Técnicas y herramientas para que la computadora haga más y el programador m...
Técnicas y herramientas para que la computadora haga más y el programador m...
 

Dernier

Introducción a Plone CMS - World Plone Day 2024
Introducción a Plone CMS - World Plone Day 2024Introducción a Plone CMS - World Plone Day 2024
Introducción a Plone CMS - World Plone Day 2024Leonardo J. Caballero G.
 
MacOS SISTEMA OPERATIVO CARACTERISTICAS.pptx
MacOS SISTEMA OPERATIVO CARACTERISTICAS.pptxMacOS SISTEMA OPERATIVO CARACTERISTICAS.pptx
MacOS SISTEMA OPERATIVO CARACTERISTICAS.pptxcalzadillasluis134
 
Theme design in Plone 6 - World Plone Day 2024
Theme design in Plone 6 - World Plone Day 2024Theme design in Plone 6 - World Plone Day 2024
Theme design in Plone 6 - World Plone Day 2024Leonardo J. Caballero G.
 
SISTEMA INTEGRADO DE ADMINISTRACION FINANCIERA - SIAF MODULO ADMINISTRATIVO
SISTEMA INTEGRADO DE ADMINISTRACION FINANCIERA - SIAF MODULO ADMINISTRATIVOSISTEMA INTEGRADO DE ADMINISTRACION FINANCIERA - SIAF MODULO ADMINISTRATIVO
SISTEMA INTEGRADO DE ADMINISTRACION FINANCIERA - SIAF MODULO ADMINISTRATIVOELIAMARYTOVARFLOREZD
 
Semana 5-Conceptualización del lenguaje de programación C++
Semana 5-Conceptualización del lenguaje de programación C++Semana 5-Conceptualización del lenguaje de programación C++
Semana 5-Conceptualización del lenguaje de programación C++luzgaray6
 
Presentación de html, css y javascript.
Presentación  de html, css y javascript.Presentación  de html, css y javascript.
Presentación de html, css y javascript.CeteliInmaculada
 

Dernier (6)

Introducción a Plone CMS - World Plone Day 2024
Introducción a Plone CMS - World Plone Day 2024Introducción a Plone CMS - World Plone Day 2024
Introducción a Plone CMS - World Plone Day 2024
 
MacOS SISTEMA OPERATIVO CARACTERISTICAS.pptx
MacOS SISTEMA OPERATIVO CARACTERISTICAS.pptxMacOS SISTEMA OPERATIVO CARACTERISTICAS.pptx
MacOS SISTEMA OPERATIVO CARACTERISTICAS.pptx
 
Theme design in Plone 6 - World Plone Day 2024
Theme design in Plone 6 - World Plone Day 2024Theme design in Plone 6 - World Plone Day 2024
Theme design in Plone 6 - World Plone Day 2024
 
SISTEMA INTEGRADO DE ADMINISTRACION FINANCIERA - SIAF MODULO ADMINISTRATIVO
SISTEMA INTEGRADO DE ADMINISTRACION FINANCIERA - SIAF MODULO ADMINISTRATIVOSISTEMA INTEGRADO DE ADMINISTRACION FINANCIERA - SIAF MODULO ADMINISTRATIVO
SISTEMA INTEGRADO DE ADMINISTRACION FINANCIERA - SIAF MODULO ADMINISTRATIVO
 
Semana 5-Conceptualización del lenguaje de programación C++
Semana 5-Conceptualización del lenguaje de programación C++Semana 5-Conceptualización del lenguaje de programación C++
Semana 5-Conceptualización del lenguaje de programación C++
 
Presentación de html, css y javascript.
Presentación  de html, css y javascript.Presentación  de html, css y javascript.
Presentación de html, css y javascript.
 

Ágiles 2020 Buenos Aires vs London Chicago