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

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

PLANEACION DE CLASES TEMA TIPOS DE FAMILIA.docx
PLANEACION DE CLASES TEMA TIPOS DE FAMILIA.docxPLANEACION DE CLASES TEMA TIPOS DE FAMILIA.docx
PLANEACION DE CLASES TEMA TIPOS DE FAMILIA.docxhasbleidit
 
#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx
#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx
#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptxHugoGutierrez99
 
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfLa Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfjeondanny1997
 
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del PerúRed Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del PerúCEFERINO DELGADO FLORES
 
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptxModelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptxtjcesar1
 
Guía de Registro slideshare paso a paso 1
Guía de Registro slideshare paso a paso 1Guía de Registro slideshare paso a paso 1
Guía de Registro slideshare paso a paso 1ivanapaterninar
 
CommitConf 2024 - Spring Boot <3 Testcontainers
CommitConf 2024 - Spring Boot <3 TestcontainersCommitConf 2024 - Spring Boot <3 Testcontainers
CommitConf 2024 - Spring Boot <3 TestcontainersIván López Martín
 
Trabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdfTrabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdfedepmariaperez
 
Slideshare y Scribd - Noli Cubillan Gerencia
Slideshare y Scribd - Noli Cubillan GerenciaSlideshare y Scribd - Noli Cubillan Gerencia
Slideshare y Scribd - Noli Cubillan Gerenciacubillannoly
 
David_Gallegos - tarea de la sesión 11.pptx
David_Gallegos - tarea de la sesión 11.pptxDavid_Gallegos - tarea de la sesión 11.pptx
David_Gallegos - tarea de la sesión 11.pptxDAVIDROBERTOGALLEGOS
 
Análisis de los artefactos (nintendo NES)
Análisis de los artefactos (nintendo NES)Análisis de los artefactos (nintendo NES)
Análisis de los artefactos (nintendo NES)JuanStevenTrujilloCh
 
Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024
Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024
Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024u20211198540
 
Actividades de computación para alumnos de preescolar
Actividades de computación para alumnos de preescolarActividades de computación para alumnos de preescolar
Actividades de computación para alumnos de preescolar24roberto21
 
La tecnología y su impacto en la sociedad
La tecnología y su impacto en la sociedadLa tecnología y su impacto en la sociedad
La tecnología y su impacto en la sociedadEduardoSantiagoSegov
 
LINEA DE TIEMPO LITERATURA DIFERENCIADO LITERATURA.pptx
LINEA DE TIEMPO LITERATURA DIFERENCIADO LITERATURA.pptxLINEA DE TIEMPO LITERATURA DIFERENCIADO LITERATURA.pptx
LINEA DE TIEMPO LITERATURA DIFERENCIADO LITERATURA.pptxkimontey
 
Trabajando con Formasy Smart art en power Point
Trabajando con Formasy Smart art en power PointTrabajando con Formasy Smart art en power Point
Trabajando con Formasy Smart art en power PointValerioIvanDePazLoja
 
certificado de oracle academy cetrificado.pdf
certificado de oracle academy cetrificado.pdfcertificado de oracle academy cetrificado.pdf
certificado de oracle academy cetrificado.pdfFernandoOblitasVivan
 
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptLUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptchaverriemily794
 
Documentacion Electrónica en Actos Juridicos
Documentacion Electrónica en Actos JuridicosDocumentacion Electrónica en Actos Juridicos
Documentacion Electrónica en Actos JuridicosAlbanyMartinez7
 

Último (20)

PLANEACION DE CLASES TEMA TIPOS DE FAMILIA.docx
PLANEACION DE CLASES TEMA TIPOS DE FAMILIA.docxPLANEACION DE CLASES TEMA TIPOS DE FAMILIA.docx
PLANEACION DE CLASES TEMA TIPOS DE FAMILIA.docx
 
#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx
#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx
#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx
 
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfLa Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
 
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del PerúRed Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
 
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptxModelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
 
Guía de Registro slideshare paso a paso 1
Guía de Registro slideshare paso a paso 1Guía de Registro slideshare paso a paso 1
Guía de Registro slideshare paso a paso 1
 
CommitConf 2024 - Spring Boot <3 Testcontainers
CommitConf 2024 - Spring Boot <3 TestcontainersCommitConf 2024 - Spring Boot <3 Testcontainers
CommitConf 2024 - Spring Boot <3 Testcontainers
 
Trabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdfTrabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdf
 
Slideshare y Scribd - Noli Cubillan Gerencia
Slideshare y Scribd - Noli Cubillan GerenciaSlideshare y Scribd - Noli Cubillan Gerencia
Slideshare y Scribd - Noli Cubillan Gerencia
 
David_Gallegos - tarea de la sesión 11.pptx
David_Gallegos - tarea de la sesión 11.pptxDavid_Gallegos - tarea de la sesión 11.pptx
David_Gallegos - tarea de la sesión 11.pptx
 
Análisis de los artefactos (nintendo NES)
Análisis de los artefactos (nintendo NES)Análisis de los artefactos (nintendo NES)
Análisis de los artefactos (nintendo NES)
 
Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024
Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024
Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024
 
Actividades de computación para alumnos de preescolar
Actividades de computación para alumnos de preescolarActividades de computación para alumnos de preescolar
Actividades de computación para alumnos de preescolar
 
La tecnología y su impacto en la sociedad
La tecnología y su impacto en la sociedadLa tecnología y su impacto en la sociedad
La tecnología y su impacto en la sociedad
 
LINEA DE TIEMPO LITERATURA DIFERENCIADO LITERATURA.pptx
LINEA DE TIEMPO LITERATURA DIFERENCIADO LITERATURA.pptxLINEA DE TIEMPO LITERATURA DIFERENCIADO LITERATURA.pptx
LINEA DE TIEMPO LITERATURA DIFERENCIADO LITERATURA.pptx
 
Trabajando con Formasy Smart art en power Point
Trabajando con Formasy Smart art en power PointTrabajando con Formasy Smart art en power Point
Trabajando con Formasy Smart art en power Point
 
certificado de oracle academy cetrificado.pdf
certificado de oracle academy cetrificado.pdfcertificado de oracle academy cetrificado.pdf
certificado de oracle academy cetrificado.pdf
 
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptLUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
 
Documentacion Electrónica en Actos Juridicos
Documentacion Electrónica en Actos JuridicosDocumentacion Electrónica en Actos Juridicos
Documentacion Electrónica en Actos Juridicos
 
El camino a convertirse en Microsoft MVP
El camino a convertirse en Microsoft MVPEl camino a convertirse en Microsoft MVP
El camino a convertirse en Microsoft MVP
 

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