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

Apache Karaf - Building OSGi applications on Apache Karaf - T Frank & A Grzesik
Apache Karaf - Building OSGi applications on Apache Karaf - T Frank & A GrzesikApache Karaf - Building OSGi applications on Apache Karaf - T Frank & A Grzesik
Apache Karaf - Building OSGi applications on Apache Karaf - T Frank & A Grzesik
mfrancis
 

La actualidad más candente (20)

Docker swarm introduction
Docker swarm introductionDocker swarm introduction
Docker swarm introduction
 
Test your microservices with REST-Assured
Test your microservices with REST-AssuredTest your microservices with REST-Assured
Test your microservices with REST-Assured
 
MPL: modular pipeline library - Dynamic Talks Milwaukee 4/11/2019
MPL: modular pipeline library - Dynamic Talks Milwaukee 4/11/2019MPL: modular pipeline library - Dynamic Talks Milwaukee 4/11/2019
MPL: modular pipeline library - Dynamic Talks Milwaukee 4/11/2019
 
Apache Karaf - Building OSGi applications on Apache Karaf - T Frank & A Grzesik
Apache Karaf - Building OSGi applications on Apache Karaf - T Frank & A GrzesikApache Karaf - Building OSGi applications on Apache Karaf - T Frank & A Grzesik
Apache Karaf - Building OSGi applications on Apache Karaf - T Frank & A Grzesik
 
Robot framework en Browser Library
Robot framework en Browser LibraryRobot framework en Browser Library
Robot framework en Browser Library
 
Wso2 api manager 특징 slide share
Wso2 api manager 특징   slide shareWso2 api manager 특징   slide share
Wso2 api manager 특징 slide share
 
Automatically Renew Certificated In Your Kubernetes Cluster
Automatically Renew Certificated In Your Kubernetes ClusterAutomatically Renew Certificated In Your Kubernetes Cluster
Automatically Renew Certificated In Your Kubernetes Cluster
 
DevOps with Kubernetes
DevOps with KubernetesDevOps with Kubernetes
DevOps with Kubernetes
 
Vault 101
Vault 101Vault 101
Vault 101
 
Kubernetes dealing with storage and persistence
Kubernetes  dealing with storage and persistenceKubernetes  dealing with storage and persistence
Kubernetes dealing with storage and persistence
 
How Kubernetes scheduler works
How Kubernetes scheduler worksHow Kubernetes scheduler works
How Kubernetes scheduler works
 
Kuberntes Ingress with Kong
Kuberntes Ingress with KongKuberntes Ingress with Kong
Kuberntes Ingress with Kong
 
Microservices, Kubernetes and Istio - A Great Fit!
Microservices, Kubernetes and Istio - A Great Fit!Microservices, Kubernetes and Istio - A Great Fit!
Microservices, Kubernetes and Istio - A Great Fit!
 
Kubernetes Introduction
Kubernetes IntroductionKubernetes Introduction
Kubernetes Introduction
 
Introdução ao Kubernetes
Introdução ao KubernetesIntrodução ao Kubernetes
Introdução ao Kubernetes
 
AWS 6월 웨비나 | AWS에서 MS SQL 서버 운영하기 (김민성 솔루션즈아키텍트)
AWS 6월 웨비나 | AWS에서 MS SQL 서버 운영하기 (김민성 솔루션즈아키텍트)AWS 6월 웨비나 | AWS에서 MS SQL 서버 운영하기 (김민성 솔루션즈아키텍트)
AWS 6월 웨비나 | AWS에서 MS SQL 서버 운영하기 (김민성 솔루션즈아키텍트)
 
Introduction to docker swarm
Introduction to docker swarmIntroduction to docker swarm
Introduction to docker swarm
 
AKS - Azure Kubernetes Services - kubernetes meetup may 2018
AKS - Azure Kubernetes Services  - kubernetes meetup may 2018AKS - Azure Kubernetes Services  - kubernetes meetup may 2018
AKS - Azure Kubernetes Services - kubernetes meetup may 2018
 
Swagger - make your API accessible
Swagger - make your API accessibleSwagger - make your API accessible
Swagger - make your API accessible
 
Kubernetes Helm: Why It Matters
Kubernetes Helm: Why It MattersKubernetes Helm: Why It Matters
Kubernetes Helm: Why It Matters
 

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

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 ...
 
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ú
 
Porqué Cervantes programaba mejor que tú
Porqué Cervantes programaba mejor que túPorqué Cervantes programaba mejor que tú
Porqué 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
 
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
 
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)
 
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
 
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
 
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

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

proyecto invernadero desde el departamento de tecnología para Erasmus
proyecto invernadero desde el departamento de tecnología para Erasmusproyecto invernadero desde el departamento de tecnología para Erasmus
proyecto invernadero desde el departamento de tecnología para Erasmus
raquelariza02
 
PRÁCTICAS DEL MÓDULO I Y II DE EDUCACIÓN Y SOCIEDAD.docx
PRÁCTICAS DEL MÓDULO I Y II DE EDUCACIÓN Y SOCIEDAD.docxPRÁCTICAS DEL MÓDULO I Y II DE EDUCACIÓN Y SOCIEDAD.docx
PRÁCTICAS DEL MÓDULO I Y II DE EDUCACIÓN Y SOCIEDAD.docx
encinasm992
 

Último (20)

Gestión de concurrencia y bloqueos en SQL Server
Gestión de concurrencia y bloqueos en SQL ServerGestión de concurrencia y bloqueos en SQL Server
Gestión de concurrencia y bloqueos en SQL Server
 
Diagrama de flujo soporte técnico 5to semestre
Diagrama de flujo soporte técnico 5to semestreDiagrama de flujo soporte técnico 5to semestre
Diagrama de flujo soporte técnico 5to semestre
 
Trabajo Coding For kids 1 y 2 grado 9-4.pdf
Trabajo Coding For kids 1 y 2 grado 9-4.pdfTrabajo Coding For kids 1 y 2 grado 9-4.pdf
Trabajo Coding For kids 1 y 2 grado 9-4.pdf
 
leidy fuentes - power point -expocccion -unidad 4 (1).pptx
leidy fuentes - power point -expocccion -unidad 4 (1).pptxleidy fuentes - power point -expocccion -unidad 4 (1).pptx
leidy fuentes - power point -expocccion -unidad 4 (1).pptx
 
JORNADA INTELIGENCIA ARTIFICIAL Y REALIDAD VIRTUAL
JORNADA INTELIGENCIA ARTIFICIAL Y REALIDAD VIRTUALJORNADA INTELIGENCIA ARTIFICIAL Y REALIDAD VIRTUAL
JORNADA INTELIGENCIA ARTIFICIAL Y REALIDAD VIRTUAL
 
Presentacion y Extension de tema para Blogger.pptx
Presentacion y Extension de tema para Blogger.pptxPresentacion y Extension de tema para Blogger.pptx
Presentacion y Extension de tema para Blogger.pptx
 
proyecto invernadero desde el departamento de tecnología para Erasmus
proyecto invernadero desde el departamento de tecnología para Erasmusproyecto invernadero desde el departamento de tecnología para Erasmus
proyecto invernadero desde el departamento de tecnología para Erasmus
 
Introducción a la robótica con arduino..pptx
Introducción a la robótica con arduino..pptxIntroducción a la robótica con arduino..pptx
Introducción a la robótica con arduino..pptx
 
Pons, A. - El desorden digital - guia para historiadores y humanistas [2013].pdf
Pons, A. - El desorden digital - guia para historiadores y humanistas [2013].pdfPons, A. - El desorden digital - guia para historiadores y humanistas [2013].pdf
Pons, A. - El desorden digital - guia para historiadores y humanistas [2013].pdf
 
taller de tablas en word para estudiantes de secundaria
taller de tablas en word para estudiantes de secundariataller de tablas en word para estudiantes de secundaria
taller de tablas en word para estudiantes de secundaria
 
3°ð_¦_â_¾ï¸_S34 PLAN DARUKEL DIDÃ_CTICA 23-24.docx
3°ð_¦_â_¾ï¸_S34 PLAN DARUKEL DIDÃ_CTICA 23-24.docx3°ð_¦_â_¾ï¸_S34 PLAN DARUKEL DIDÃ_CTICA 23-24.docx
3°ð_¦_â_¾ï¸_S34 PLAN DARUKEL DIDÃ_CTICA 23-24.docx
 
Diagrama de flujo - ingenieria de sistemas 5to semestre
Diagrama de flujo - ingenieria de sistemas 5to semestreDiagrama de flujo - ingenieria de sistemas 5to semestre
Diagrama de flujo - ingenieria de sistemas 5to semestre
 
manual-de-oleohidraulica-industrial-vickers.pdf
manual-de-oleohidraulica-industrial-vickers.pdfmanual-de-oleohidraulica-industrial-vickers.pdf
manual-de-oleohidraulica-industrial-vickers.pdf
 
lenguaje algebraico.pptx álgebra, trigonometria
lenguaje algebraico.pptx álgebra, trigonometrialenguaje algebraico.pptx álgebra, trigonometria
lenguaje algebraico.pptx álgebra, trigonometria
 
Herramientas informáticas. Sara Torres R.
Herramientas informáticas. Sara Torres R.Herramientas informáticas. Sara Torres R.
Herramientas informáticas. Sara Torres R.
 
PRÁCTICAS DEL MÓDULO I Y II DE EDUCACIÓN Y SOCIEDAD.docx
PRÁCTICAS DEL MÓDULO I Y II DE EDUCACIÓN Y SOCIEDAD.docxPRÁCTICAS DEL MÓDULO I Y II DE EDUCACIÓN Y SOCIEDAD.docx
PRÁCTICAS DEL MÓDULO I Y II DE EDUCACIÓN Y SOCIEDAD.docx
 
Licencias para el Uso y el Desarrollo de Software
Licencias para el Uso y el Desarrollo de SoftwareLicencias para el Uso y el Desarrollo de Software
Licencias para el Uso y el Desarrollo de Software
 
¡Mira mi nuevo diseño hecho en Canva!.pdf
¡Mira mi nuevo diseño hecho en Canva!.pdf¡Mira mi nuevo diseño hecho en Canva!.pdf
¡Mira mi nuevo diseño hecho en Canva!.pdf
 
HerramientasInformaticas ¿Que es? - ¿Para que sirve? - Recomendaciones - Comp...
HerramientasInformaticas ¿Que es? - ¿Para que sirve? - Recomendaciones - Comp...HerramientasInformaticas ¿Que es? - ¿Para que sirve? - Recomendaciones - Comp...
HerramientasInformaticas ¿Que es? - ¿Para que sirve? - Recomendaciones - Comp...
 
ACTIVIDAD DE TECNOLOGÍA AÑO LECTIVO 2024
ACTIVIDAD DE TECNOLOGÍA AÑO LECTIVO 2024ACTIVIDAD DE TECNOLOGÍA AÑO LECTIVO 2024
ACTIVIDAD DE TECNOLOGÍA AÑO LECTIVO 2024
 

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