SlideShare une entreprise Scribd logo
1  sur  119
Rodrigo Branas – @rodrigobranas - http://www.agilecode.com.br/es

Clean Code con

Técnicas de Refactorización y TDD
Acerca de la iniciativa...
Estatísticas del entrenamiento de Clean Code
hasta la fecha:

Primer grupo en: 05/2012
Clases ya realizadas: 21
Desarrolladores entrenados: 340
AgileCode
“Transformar la manera en que los equipos de
desarrollo de software trabajan, aumentando su
nivel de madurez técnica y gerencial”
http://www.agilecode.com.br/es
Rodrigo Branas
rodrigo.branas@agilecode.com.br
http://www.agilecode.com.br
•
•
•
•

Desarrollo de Software en Gennera
Entrenamientos en Agile Code
Artículos en Java Magazine
Conferencias sobre desarrollo de software
en eventos, universidades y empresas
Formación Académica

Ciencias de la Computación - UFSC
Gestión de Proyectos - FGV
Certificaciones

SCJA, SCJP, SCJD, SCWCD, SCBCD, PMP, MCP e CSM
Experiencia

Desde hace más de 12 años desarrollando
software en la plataforma Java en las empresas:
EDS, HP, NET, Citibank, GM, Dígitro, Softplan,
OnCast, Senai, VALE, RBS, Unimed, Globalcode,
V.Office, Suntech, WPlex e Gennera.
El contenido deste entrenamiento
puede afectar su zona de confort
¿Sobre que vamos hablar?
Insatisfación con el fracaso!
¿Existe diferencia?
Insatisfación con el trabajo
¿Te sientes profesional?
¿Te sientes profesional?
¿Te sientes profesional?
¿Podría ser más productivo?
¿Cuanto tiempo perdemos
intentando entender el código
para arreglar un defecto?
¿Te sientes haciendo un
trabajo brazal y fatigoso?
¿Ya quisiste dejarlo todo?
¿Que motiva a un desarrollador?
“Quien trabaja solamente por el
diñero, ganhe lo que for, siempre
será mal pago.”
“Cual es tu obra?”
(Mario Cortella)
¿Cuanto custa toda esta
confusión para la empresa?
Alta rotatividad
Demora excesiva para poner
nuevos productos en marcha
¿Cuantos proyectos ya fueran
desechados?
Muchos defectos
¿Cuanto custa la perdida de
confianza de sus clientes?
Passamos la major parte del
tiempo leyendo el código!
¿Dos desarrolladores son más
productivos que uno?
(Pair Programming)
¿Que es Clean Code?
Echo con cuidado
Inteligente
Reusable
Revela sus intenciones
Sencillo
Fácil de entender
“Cualquier tonto consigue escribir un
código que el ordenador entienda.
Buenos programadores escriben código
que otros humanos comprendan.”
(Martin Fowler)
Funcionar es lo mínimo
Calidad Externa x Interna
¿Como medir la calidad del
código?
¿Líneas de código?
¿Número de métodos?
¿Número de classes?

¿Tamanho de los método?
¿Complejidad?

???
WTF?
WTF?

WTF?
WTF?

WTF?

WTF?

WTF?
Dificuldad para entenderse
Decirlo es fácil!
Empezando a entrenar
Nomes estraños
Limitación histórica
1.
2.
3.
4.
5.
6.
7.
8.
9.

READ INPUT TAPE A1, B1, C1;
501 FORMAT A1;
IF (A1) 777, 777, 777
IF (B1) 888, 888, 888
IF (C1) 999, 999, 999
STOP 1
799 S = FLOATF(A1 + B1 + C1) / 2.0
WRITE TO TAPE S
END PROCESS

Las linguajes no ayudavam
Los entornos de desarrollo no
ayudavam
Los ordenadores no ayudavam
Herencia Maldita
Aprendiendo con los mestres
1.
2.
3.
4.
5.
6.
7.
8.

// Descripción de la maquina
String mDesc;
// Suma de las parcelas
int s1;
// Color de los ojos
String cOjos;
// Cotización del Dólar
int aux;
Revelando su intención
1.
2.
3.
4.
5.
6.
7.
8.

// Descripción de la maquina
String mDesc;
// Suma de las parcelas
int s1;
// Color de los ojos
String cOjos;
// Cotazición del Dólar
int aux;
1.
2.
3.
4.
5.
6.
7.
8.

// Descripción de la maquina
String;
// Suma de las parcelas
int;
// Color de los ojos
String;
// Cotización del Dólar
int;
1.
2.
3.
4.
5.
6.
7.
8.

// Descripción de la maquina
String descriptionDeLaMaquina;
// Suma de las parcelas
int sumaDeLasParcelas;
// Color de los ojos
String colorDeLosOjos;
// Cotización del Dólar
int cotizacionDelDolar;
1.
2.
3.
4.
5.
6.
7.
8.

String descriptionDeLaMaquina;
int sumaDeLasParcelas;
String colorDeLosOjos;
int cotizacionDelDolar;
1.
2.
3.
4.

String descriptionDeLaMaquina;
int sumaDeLasParcelas;
String colorDeLosOjos;
int cotizacionDelDolar;
No seas tan genérico
1.
2.
3.
4.
5.
6.

// Ejecutar el cálculo de la nómina
void ejecutar();
// Calcular el impuesto
void calcular();
// Renderizar la imagen
void renderizar();

7.

// Totalizar los costos de las llamadas

8. void totalizar();
1.
2.
3.
4.
5.
6.

// Ejecutar el cálculo de la nómina
void ejecutarCalculoDeLaNomina();
// Calcular el impuesto
void calcularImpuesto();
// Renderizar la imagen
void renderizarImagen();

7.

// Totalizar los costos de las llamadas

8. void totalizarCostosDeLasLlamadas()
1.
2. void ejecutarCalculoDeLaNomina();
3.
4. void calcularImpuesto();
5.
6. void renderizarImagen();
7.

8. void totalizarCostosDeLasLlamadas()
1. void ejecutarCalculoDeLaNomina();
2. void calcularImpuesto();
3. void renderizarImagen();
4. void totalizarCostosDeLasLlamadas()
Simplificando estructuras de
decisión
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.

class Taximetro {
...
double calcularCostoDelViaje() {
if (hora > 22:00 || hora < 06:00) {
return distancia * 3.90;
} else {
return distancia * 2.10;
}
}
...
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.

class Taximetro {
...
double calcularCostoDelViaje() {
if () {
return distancia * 3.90;
} else {
return distancia * 2.10;
}
}
...
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.

class Taximetro {
...
double calcularCostoDelViaje() {
if (esBandeiraDos()) {
return distancia * 3.90;
} else {
return distancia * 2.10;
}
}
...
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.

...
double calcularCostoDelViaje() {
if (esBandeiraDos()) {
return distancia * 3.90;
} else {
return distancia * 2.10;
}
Boolean esBandeiraDos() {
return hora > 22:00 || hora < 06:00;
}
...
¿Cuales son las ventajas de
la modificación?
¿Cómo sería una prueba automatizada
antes de la refactorización?
1.
2.
3.
4.
5.
6.
7.

public class TaximetroPrueba {
public void debeSerBanderaDos() {
}
}
1.
2.
3.
4.
5.
6.
7.
8.

public class TaximetroPrueba {
public void debeSerBanderaDos() {
Taximetro taximetro = new Taximetro();

}
}
1.
2.
3.
4.
5.
6.
7.
8.
9.

public class TaximetroPrueba {
public void debeSerBanderaDos() {
Taximetro taximetro = new Taximetro();

taximetro.iniciar(23horas());

}

}
1. public class TaximetroPrueba {
2.
3.
public void debeSerBanderaDos() {
4.
Taximetro taximetro = new Taximetro();
5.
taximetro.iniciar(23horas());
6.
taximetro.distanciaRecorridaEnKM(3.45);
7.
}
8.
9. }
10.
1. public class TaximetroPrueba {
2.
3.
public void debeSerBanderaDos() {
4.
Taximetro taximetro = new Taximetro();
5.
taximetro.iniciar(23horas());
6.
taximetro.distanciaRecorridaEnKM(3.45);
7.
double costo = taximetro.calcularCostoDelViaje();
8.
}
9.
10. }
11.
1. public class TaximetroPrueba {
2.
3.
public void debeSerBanderaDos() {
4.
Taximetro taximetro = new Taximetro();
5.
taximetro.iniciar(23horas());
6.
taximetro.distanciaRecorridaEnKM(3.45);
7.
double costo = taximetro.calcularCostoDelViaje();
8.
assertEquals(23.45, costo);
9.
}
10.
11. }
12.
¿Y depués?
1.
2.
3.
4.
5.
6.
7.

public class TaximetroPrueba {
public void debeSerBanderaDos() {
}
}
1.
2.
3.
4.
5.
6.
7.
8.

public class TaximetroPrueba {
public void debeSerBanderaDos() {
Taximetro taximetro = new Taximetro();

}
}
1.
2.
3.
4.
5.
6.
7.
8.
9.

public class TaximetroPrueba {
public void debeSerBanderaDos() {
Taximetro taximetro = new Taximetro();

taximetro.iniciar(23horas());

}

}
1. public class TaximetroPrueba {
2.
3.
public void debeSerBanderaDos() {
4.
Taximetro taximetro = new Taximetro();
5.
taximetro.iniciar(23horas());
6.
assertTrue(taximetro.esBandeiraDos());
7. }
8.
9. }
10.
Magic numbers
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.

...
double calcularCostoDelViaje() {
if (esBandeiraDos()) {
return distancia * 3.90;
} else {
return distancia * 2.10;
}
Boolean esBandeiraDos() {
return hora > 22:00 || hora < 06:00;
}
...
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.

...
double calcularCostoDelViaje() {
if (esBandeiraDos()) {
return distancia * ;
} else {
return distancia * ;
}
Boolean esBandeiraDos() {
return hora > 22:00 || hora < 06:00;
}
...
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.

...
double calcularCostoDelViaje() {
if (esBandeiraDos()) {
return distancia * COSTO_BANDERA_2;
} else {
return distancia * COSTO_BANDERA_1;
}
Boolean esBandeiraDos() {
return hora > 22:00 || hora < 06:00;
}
...
Saindo do labirinto
1. double calcularCostoDelViaje() {
2.
if (esBandeiraDos()) {
3.
return distancia * COSTO_BANDERA_2;
4.
} else {
5.
return distancia * COSTO_BANDERA_1;
6.
}
1. double calcularCostoDelViaje() {
2.
if (esBandeiraDos()) {
3.
return distancia * COSTO_BANDERA_2;
4.
} else {
5.
if (esDomingo()) {
6.
return distancia * COSTO_DOMINGO;
7.
} else {
8.
return distancia * COSTO_BANDERA_1;
9.
}
10. }
Distancia del borde
1. double calcularCostoDelViaje() {
2.
if (esBandeiraDos()) {
3.
return distancia * COSTO_BANDERA_2;
4.
} else {
5.
if (esDomingo()) {
6.
return distancia * COSTO_DOMINGO;
7.
} else {
8.
return distancia * COSTO_BANDERA_1;
9.
}
10. }
11. }
1. double calcularCostoDelViaje() {
2.
if (esBandeiraDos()) {
3.
return distancia * COSTO_BANDERA_2;
4.
}
5.
if (esDomingo()) {
6.
return distancia * COSTO_DOMINGO;
7.
} else {
8.
return distancia * COSTO_BANDERA_1;
9.
}
10.
11. }
1. double calcularCostoDelViaje() {
2.
if (esBandeiraDos()) {
3.
return distancia * COSTO_BANDERA_2;
4.
}
5.
if (esDomingo()) {
6.
return distancia * COSTO_DOMINGO;
7.
} else {
8.
return distancia * COSTO_BANDERA_1;
9.
}
10.
11. }
1. double calcularCostoDelViaje() {
2.
if (esBandeiraDos()) {
3.
return distancia * COSTO_BANDERA_2;
4.
}
5.
if (esDomingo()) {
6.
return distancia * COSTO_DOMINGO;
7.
} else {
8.
return distancia * COSTO_BANDERA_1;
9.
}
10. }
11.
1. double calcularCostoDelViaje() {
2.
if (esBandeiraDos()) {
3.
return distancia * COSTO_BANDERA_2;
4.
}
5.
if (esDomingo()) {
6.
return distancia * COSTO_DOMINGO;
7.
}
8.
return distancia * COSTO_BANDERA_1;
9.
10. }
11.
1. double calcularCostoDelViaje() {
2.
if (esBandeiraDos()) {
3.
return distancia * COSTO_BANDERA_2;
4.
}
5.
if (esDomingo()) {
6.
return distancia * COSTO_DOMINGO;
7.
}
8.
return distancia * COSTO_BANDERA_1;
9. }
10.
11.
1. double calcularCostoDelViaje() {
2.
if (esBandeiraDos()) {
3.
return distancia * COSTO_BANDERA_2;
4.
}
5.
if (esDomingo()) {
6.
return distancia * COSTO_DOMINGO;
7.
}
8.
return distancia * COSTO_BANDERA_1;
9. }
10.
11.
1. double calcularCostoDelViaje() {
2.
if (esBandeiraDos()) {
3.
return;
4.
}
5.
if (esDomingo()) {
6.
return;
7.
}
8.
return;
9. }
10.
11.
1. double calcularCostoDelViaje() {
2.
if (esBandeiraDos()) {
3.
return calcularBanderaDos(distancia);
4.
}
5.
if (esDomingo()) {
6.
return calcularDomingo(distancia);
7.
}
8.
return calcularBanderaUno(distancia);
9. }
10.
11.
1. double calcularCostoDelViaje() {
2.
3.
4.

5. }

if (esBandeiraDos()) return calcularBanderaDos(distancia);
if (esDomingo()) return calcularDomingo(distancia);
return calcularBanderaUno(distancia);
1. double calcularCostoDelViaje() {
2.
3.
4.
5.

6. }

if (esBandeiraDos()) return calcularBanderaDos(distancia);
if (esDomingo()) return calcularDomingo(distancia);
return calcularBanderaUno(distancia);
1. double calcularCostoDelViaje() {
2.
3.
4.
5.

6. }

if (esBandeiraDos()) return calcularBanderaDos(distancia);
if (esBandeiraTres()) return calcularBanderaTres(distancia);
if (esDomingo()) return calcularDomingo(distancia);
return calcularBanderaUno(distancia);
¿Miedo de estropear algo?
Test-Driven Development
Ahorre tiempo y diñero, pruebe
más temprano!
Herramientas – Hudson + Sonar
Clean Code (EN ESPANOL)

Contenu connexe

Tendances

Tendances (20)

Introduction to es6
Introduction to es6Introduction to es6
Introduction to es6
 
SOLID Principles
SOLID PrinciplesSOLID Principles
SOLID Principles
 
Android with kotlin course
Android with kotlin courseAndroid with kotlin course
Android with kotlin course
 
SOLID Principles and The Clean Architecture
SOLID Principles and The Clean ArchitectureSOLID Principles and The Clean Architecture
SOLID Principles and The Clean Architecture
 
Android MVVM
Android MVVMAndroid MVVM
Android MVVM
 
Clean code: understanding Boundaries and Unit Tests
Clean code: understanding Boundaries and Unit TestsClean code: understanding Boundaries and Unit Tests
Clean code: understanding Boundaries and Unit Tests
 
Clean code: SOLID (iOS)
Clean code: SOLID (iOS)Clean code: SOLID (iOS)
Clean code: SOLID (iOS)
 
SOLID Design Principles
SOLID Design PrinciplesSOLID Design Principles
SOLID Design Principles
 
Facade pattern
Facade patternFacade pattern
Facade pattern
 
Facade pattern presentation(.pptx)
Facade pattern presentation(.pptx)Facade pattern presentation(.pptx)
Facade pattern presentation(.pptx)
 
ES2015 / ES6: Basics of modern Javascript
ES2015 / ES6: Basics of modern JavascriptES2015 / ES6: Basics of modern Javascript
ES2015 / ES6: Basics of modern Javascript
 
Dependency Injection in iOS
Dependency Injection in iOSDependency Injection in iOS
Dependency Injection in iOS
 
Solid design principles
Solid design principlesSolid design principles
Solid design principles
 
SOLID PRINCIPLES
SOLID PRINCIPLESSOLID PRINCIPLES
SOLID PRINCIPLES
 
Android concurrency
Android concurrencyAndroid concurrency
Android concurrency
 
Design Pattern Cheatsheet
Design Pattern CheatsheetDesign Pattern Cheatsheet
Design Pattern Cheatsheet
 
Clean code
Clean code Clean code
Clean code
 
Solid principles
Solid principlesSolid principles
Solid principles
 
Test driven development - JUnit basics and best practices
Test driven development - JUnit basics and best practicesTest driven development - JUnit basics and best practices
Test driven development - JUnit basics and best practices
 
Open Closed Principle kata
Open Closed Principle kataOpen Closed Principle kata
Open Closed Principle kata
 

Similaire à Clean Code (EN ESPANOL)

Porqué Cervantes programaba mejor que tú
Porqué Cervantes programaba mejor que túPorqué Cervantes programaba mejor que tú
Porqué Cervantes programaba mejor que tú
Agile Spain
 
Realidad Aumentada más allá de Glass - Droidcon 2014
Realidad Aumentada más allá de Glass - Droidcon 2014Realidad Aumentada más allá de Glass - Droidcon 2014
Realidad Aumentada más allá de Glass - Droidcon 2014
Fernando Gallego
 
Practicas para slider Rene Dominguez
Practicas para slider Rene Dominguez Practicas para slider Rene Dominguez
Practicas para slider Rene Dominguez
Mery_Angie_Ugalde
 
Varios tema de c++ por (alvaro tejada)
Varios tema de c++ por (alvaro tejada)Varios tema de c++ por (alvaro tejada)
Varios tema de c++ por (alvaro tejada)
javiel162009
 
El arte de programar c++ - versión 3.0
El arte de programar   c++ - versión 3.0El arte de programar   c++ - versión 3.0
El arte de programar c++ - versión 3.0
javiel162009
 
Cambia la forma de desarrollar tus aplicaciones web con groovy y grails
Cambia la forma de desarrollar tus aplicaciones web con groovy y grailsCambia la forma de desarrollar tus aplicaciones web con groovy y grails
Cambia la forma de desarrollar tus aplicaciones web con groovy y grails
Fátima Casaú Pérez
 

Similaire à Clean Code (EN ESPANOL) (20)

MODELO PASO DE MENSAJES
MODELO PASO DE MENSAJESMODELO PASO DE MENSAJES
MODELO PASO DE MENSAJES
 
6.funciones y recursividad en c++
6.funciones y recursividad en c++6.funciones y recursividad en c++
6.funciones y recursividad en c++
 
Air plane
Air planeAir plane
Air plane
 
Meetup Madrid 6 Marzo 2024 - MuleSoft en el mundo real: ejemplos de casos de ...
Meetup Madrid 6 Marzo 2024 - MuleSoft en el mundo real: ejemplos de casos de ...Meetup Madrid 6 Marzo 2024 - MuleSoft en el mundo real: ejemplos de casos de ...
Meetup Madrid 6 Marzo 2024 - MuleSoft en el mundo real: ejemplos de casos de ...
 
Porqué Cervantes programaba mejor que tú
Porqué Cervantes programaba mejor que túPorqué Cervantes programaba mejor que tú
Porqué Cervantes programaba mejor que tú
 
Por qué Cervantes programaba mejor que tú
Por qué Cervantes programaba mejor que túPor qué Cervantes programaba mejor que tú
Por qué Cervantes programaba mejor que tú
 
Exposicion
ExposicionExposicion
Exposicion
 
Realidad Aumentada más allá de Glass - Droidcon 2014
Realidad Aumentada más allá de Glass - Droidcon 2014Realidad Aumentada más allá de Glass - Droidcon 2014
Realidad Aumentada más allá de Glass - Droidcon 2014
 
Javascript no es vietnam
Javascript no es vietnamJavascript no es vietnam
Javascript no es vietnam
 
Practicas para slider Rene Dominguez
Practicas para slider Rene Dominguez Practicas para slider Rene Dominguez
Practicas para slider Rene Dominguez
 
Reglas de Oro para el Desarrollo con Windows Vista
Reglas de Oro para el Desarrollo con Windows VistaReglas de Oro para el Desarrollo con Windows Vista
Reglas de Oro para el Desarrollo con Windows Vista
 
La magia de Flutter
La magia de FlutterLa magia de Flutter
La magia de Flutter
 
Varios tema de c++ por (alvaro tejada)
Varios tema de c++ por (alvaro tejada)Varios tema de c++ por (alvaro tejada)
Varios tema de c++ por (alvaro tejada)
 
El arte de programar c++ - versión 3.0
El arte de programar   c++ - versión 3.0El arte de programar   c++ - versión 3.0
El arte de programar c++ - versión 3.0
 
Prueba
PruebaPrueba
Prueba
 
Groovy&Grails: Cambia la forma de desarrollar tus aplicaciones web
Groovy&Grails: Cambia la forma de desarrollar tus aplicaciones webGroovy&Grails: Cambia la forma de desarrollar tus aplicaciones web
Groovy&Grails: Cambia la forma de desarrollar tus aplicaciones web
 
Cambia la forma de desarrollar tus aplicaciones web con groovy y grails
Cambia la forma de desarrollar tus aplicaciones web con groovy y grailsCambia la forma de desarrollar tus aplicaciones web con groovy y grails
Cambia la forma de desarrollar tus aplicaciones web con groovy y grails
 
HackDay Java 9 Spanish version
HackDay Java 9 Spanish versionHackDay Java 9 Spanish version
HackDay Java 9 Spanish version
 
Reactvolution
ReactvolutionReactvolution
Reactvolution
 
Csharp
CsharpCsharp
Csharp
 

Plus de Rodrigo Branas

Plus de Rodrigo Branas (20)

Clean Architecture
Clean ArchitectureClean Architecture
Clean Architecture
 
Node.js - #7 - Core Modules - http - Parte 1 - Rodrigo Branas
Node.js - #7 - Core Modules - http - Parte 1 - Rodrigo BranasNode.js - #7 - Core Modules - http - Parte 1 - Rodrigo Branas
Node.js - #7 - Core Modules - http - Parte 1 - Rodrigo Branas
 
Node.js - #6 - Core Modules - net - Rodrigo Branas
Node.js - #6 - Core Modules - net - Rodrigo BranasNode.js - #6 - Core Modules - net - Rodrigo Branas
Node.js - #6 - Core Modules - net - Rodrigo Branas
 
Node.js - #5 - Process - Rodrigo Branas
Node.js - #5 - Process - Rodrigo BranasNode.js - #5 - Process - Rodrigo Branas
Node.js - #5 - Process - Rodrigo Branas
 
Node.js - #4 - Timers - Rodrigo Branas
Node.js - #4 - Timers - Rodrigo BranasNode.js - #4 - Timers - Rodrigo Branas
Node.js - #4 - Timers - Rodrigo Branas
 
Node.js - #3 - Global Objects - Rodrigo Branas
Node.js - #3 - Global Objects - Rodrigo BranasNode.js - #3 - Global Objects - Rodrigo Branas
Node.js - #3 - Global Objects - Rodrigo Branas
 
Node.js - #2 - Sistema de Módulos - Rodrigo Branas
Node.js - #2 - Sistema de Módulos - Rodrigo BranasNode.js - #2 - Sistema de Módulos - Rodrigo Branas
Node.js - #2 - Sistema de Módulos - Rodrigo Branas
 
Node.js - #1 - Introdução - Rodrigo Branas
Node.js - #1 - Introdução - Rodrigo BranasNode.js - #1 - Introdução - Rodrigo Branas
Node.js - #1 - Introdução - Rodrigo Branas
 
#6 - Git - Desfazendo as coisas
#6 - Git - Desfazendo as coisas#6 - Git - Desfazendo as coisas
#6 - Git - Desfazendo as coisas
 
#1 - Git - Introdução
#1 - Git - Introdução#1 - Git - Introdução
#1 - Git - Introdução
 
#5 - Git - Contribuindo com um repositório remoto
#5 - Git - Contribuindo com um repositório remoto#5 - Git - Contribuindo com um repositório remoto
#5 - Git - Contribuindo com um repositório remoto
 
#4 - Git - Stash
#4 - Git - Stash#4 - Git - Stash
#4 - Git - Stash
 
#3 - Git - Branching e Merging
#3 - Git - Branching e Merging#3 - Git - Branching e Merging
#3 - Git - Branching e Merging
 
#2 - Git - DAG
#2 - Git - DAG#2 - Git - DAG
#2 - Git - DAG
 
A evolução do AngularJS
A evolução do AngularJSA evolução do AngularJS
A evolução do AngularJS
 
JavaScript - Date
JavaScript - DateJavaScript - Date
JavaScript - Date
 
JavaScript - Expressões Regulares
JavaScript - Expressões RegularesJavaScript - Expressões Regulares
JavaScript - Expressões Regulares
 
Automação de Testes com AngularJS
Automação de Testes com AngularJSAutomação de Testes com AngularJS
Automação de Testes com AngularJS
 
Scope AngularJS
Scope AngularJSScope AngularJS
Scope AngularJS
 
HTTP Interceptors com AngularJS
HTTP Interceptors com AngularJSHTTP Interceptors com AngularJS
HTTP Interceptors com AngularJS
 

Dernier

redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativa
nicho110
 

Dernier (10)

Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estos
 
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
 
investigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIinvestigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXI
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvana
 
Guia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos BasicosGuia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos Basicos
 
redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativa
 
Buenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxBuenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptx
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.
 

Clean Code (EN ESPANOL)

Notes de l'éditeur

  1. Hola! Muybuenastardes.Bienvenidos al entrenamento de Clean Code. Es um gran placer estaraquí en vuestra casa, en Peru. En los próximos dos díasvamosestar a juntoshablando de calidad de código, técnicas de refactorización, orientación a objectos, pruebasautomatizadas entre otrascosas