SlideShare una empresa de Scribd logo
1 de 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)

Más contenido relacionado

La actualidad más candente

Advanced behavioral modeling chapter 4 of omd
Advanced behavioral modeling chapter 4 of omdAdvanced behavioral modeling chapter 4 of omd
Advanced behavioral modeling chapter 4 of omdjayashri kolekar
 
Intro Programación Orientada a Objetos
Intro Programación Orientada a ObjetosIntro Programación Orientada a Objetos
Intro Programación Orientada a ObjetosPablo Sepulveda P.
 
Software Development Methodologies
Software Development MethodologiesSoftware Development Methodologies
Software Development MethodologiesNicholas Davis
 
Unidad 3 graficacion
Unidad 3 graficacionUnidad 3 graficacion
Unidad 3 graficacionAndhy H Palma
 
Algorítmos - Conceptos básicos
Algorítmos - Conceptos básicosAlgorítmos - Conceptos básicos
Algorítmos - Conceptos básicoscbertolotti
 
Hexagonal architecture for java applications
Hexagonal architecture for java applicationsHexagonal architecture for java applications
Hexagonal architecture for java applicationsFabricio Epaminondas
 
Introduction to fragments in android
Introduction to fragments in androidIntroduction to fragments in android
Introduction to fragments in androidPrawesh Shrestha
 
presentacion sobre Algoritmo, Pseudocódigo, diagramas de flujos y la metodolo...
presentacion sobre Algoritmo, Pseudocódigo, diagramas de flujos y la metodolo...presentacion sobre Algoritmo, Pseudocódigo, diagramas de flujos y la metodolo...
presentacion sobre Algoritmo, Pseudocódigo, diagramas de flujos y la metodolo...AliandroMejias
 
Interface segregation principle
Interface segregation principleInterface segregation principle
Interface segregation principlemuhammadali0014
 
Software Engineering - Ch2
Software Engineering - Ch2Software Engineering - Ch2
Software Engineering - Ch2Siddharth Ayer
 
Unidad 10 Mad Diagrama De Clases
Unidad 10 Mad Diagrama De ClasesUnidad 10 Mad Diagrama De Clases
Unidad 10 Mad Diagrama De ClasesSergio Sanchez
 
OOD Principles and Patterns
OOD Principles and PatternsOOD Principles and Patterns
OOD Principles and PatternsNguyen Tung
 

La actualidad más candente (20)

Reglas de Oro
Reglas de OroReglas de Oro
Reglas de Oro
 
Advanced behavioral modeling chapter 4 of omd
Advanced behavioral modeling chapter 4 of omdAdvanced behavioral modeling chapter 4 of omd
Advanced behavioral modeling chapter 4 of omd
 
Single Page Applications
Single Page ApplicationsSingle Page Applications
Single Page Applications
 
Programación estructurada
Programación estructuradaProgramación estructurada
Programación estructurada
 
Intro Programación Orientada a Objetos
Intro Programación Orientada a ObjetosIntro Programación Orientada a Objetos
Intro Programación Orientada a Objetos
 
Lenguaje Acme
Lenguaje AcmeLenguaje Acme
Lenguaje Acme
 
Software Development Methodologies
Software Development MethodologiesSoftware Development Methodologies
Software Development Methodologies
 
Fase de Elaboración RUP
Fase de Elaboración RUPFase de Elaboración RUP
Fase de Elaboración RUP
 
Unidad 3 graficacion
Unidad 3 graficacionUnidad 3 graficacion
Unidad 3 graficacion
 
Diseño de patrones
Diseño de patronesDiseño de patrones
Diseño de patrones
 
Algorítmos - Conceptos básicos
Algorítmos - Conceptos básicosAlgorítmos - Conceptos básicos
Algorítmos - Conceptos básicos
 
Hexagonal architecture for java applications
Hexagonal architecture for java applicationsHexagonal architecture for java applications
Hexagonal architecture for java applications
 
Introduction to fragments in android
Introduction to fragments in androidIntroduction to fragments in android
Introduction to fragments in android
 
presentacion sobre Algoritmo, Pseudocódigo, diagramas de flujos y la metodolo...
presentacion sobre Algoritmo, Pseudocódigo, diagramas de flujos y la metodolo...presentacion sobre Algoritmo, Pseudocódigo, diagramas de flujos y la metodolo...
presentacion sobre Algoritmo, Pseudocódigo, diagramas de flujos y la metodolo...
 
Interface segregation principle
Interface segregation principleInterface segregation principle
Interface segregation principle
 
Software Engineering - Ch2
Software Engineering - Ch2Software Engineering - Ch2
Software Engineering - Ch2
 
Unidad 10 Mad Diagrama De Clases
Unidad 10 Mad Diagrama De ClasesUnidad 10 Mad Diagrama De Clases
Unidad 10 Mad Diagrama De Clases
 
OOD Principles and Patterns
OOD Principles and PatternsOOD Principles and Patterns
OOD Principles and Patterns
 
Android Fragment
Android FragmentAndroid Fragment
Android Fragment
 
Broadcast Receiver
Broadcast ReceiverBroadcast Receiver
Broadcast Receiver
 

Similar a Clean Code (EN ESPANOL)

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 ...jorgelebrato
 
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
 
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úJavier Acero
 
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 2014Fernando Gallego
 
Practicas para slider Rene Dominguez
Practicas para slider Rene Dominguez Practicas para slider Rene Dominguez
Practicas para slider Rene Dominguez Mery_Angie_Ugalde
 
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 Vistajuliocasal
 
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.0javiel162009
 
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 webParadigma Digital
 
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 grailsFátima Casaú Pérez
 
HackDay Java 9 Spanish version
HackDay Java 9 Spanish versionHackDay Java 9 Spanish version
HackDay Java 9 Spanish versionHillmerC
 
Reactvolution
ReactvolutionReactvolution
Reactvolution_Lagash
 

Similar a 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
 

Más de Rodrigo Branas

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 BranasRodrigo 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 BranasRodrigo Branas
 
Node.js - #5 - Process - Rodrigo Branas
Node.js - #5 - Process - Rodrigo BranasNode.js - #5 - Process - Rodrigo Branas
Node.js - #5 - Process - Rodrigo BranasRodrigo Branas
 
Node.js - #4 - Timers - Rodrigo Branas
Node.js - #4 - Timers - Rodrigo BranasNode.js - #4 - Timers - Rodrigo Branas
Node.js - #4 - Timers - Rodrigo BranasRodrigo 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 BranasRodrigo 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 BranasRodrigo 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 BranasRodrigo Branas
 
#6 - Git - Desfazendo as coisas
#6 - Git - Desfazendo as coisas#6 - Git - Desfazendo as coisas
#6 - Git - Desfazendo as coisasRodrigo Branas
 
#1 - Git - Introdução
#1 - Git - Introdução#1 - Git - Introdução
#1 - Git - IntroduçãoRodrigo Branas
 
#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 remotoRodrigo Branas
 
#3 - Git - Branching e Merging
#3 - Git - Branching e Merging#3 - Git - Branching e Merging
#3 - Git - Branching e MergingRodrigo Branas
 
A evolução do AngularJS
A evolução do AngularJSA evolução do AngularJS
A evolução do AngularJSRodrigo Branas
 
JavaScript - Expressões Regulares
JavaScript - Expressões RegularesJavaScript - Expressões Regulares
JavaScript - Expressões RegularesRodrigo Branas
 
Automação de Testes com AngularJS
Automação de Testes com AngularJSAutomação de Testes com AngularJS
Automação de Testes com AngularJSRodrigo Branas
 
HTTP Interceptors com AngularJS
HTTP Interceptors com AngularJSHTTP Interceptors com AngularJS
HTTP Interceptors com AngularJSRodrigo Branas
 

Más 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
 

Último

pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITMaricarmen Sánchez Ruiz
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveFagnerLisboa3
 
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdfRefrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdfvladimiroflores1
 
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxEL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxMiguelAtencio10
 
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 eyvanamcerpam
 
Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfAnnimoUno1
 
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...JohnRamos830530
 
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.FlorenciaCattelani
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21mariacbr99
 
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 estossgonzalezp1
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxAlan779941
 

Último (11)

pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdfRefrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
 
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxEL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
 
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
 
Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdf
 
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...
 
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.
 
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 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
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
 

Clean Code (EN ESPANOL)

Notas del editor

  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