porqué cervantes programaba mejor que tú

97
Por qué Cervantes programaba mejor que tú Javier Acero @jacegu http://javieracero.com

Upload: agile-spain

Post on 01-Jun-2015

665 views

Category:

Technology


2 download

DESCRIPTION

Javier Acero

TRANSCRIPT

Page 1: Porqué Cervantes programaba mejor que tú

Por qué Cervantesprogramaba mejor que tú

Javier Acero @jacegu http://javieracero.com

Page 2: Porqué Cervantes programaba mejor que tú
Page 3: Porqué Cervantes programaba mejor que tú

1999

Page 4: Porqué Cervantes programaba mejor que tú
Page 5: Porqué Cervantes programaba mejor que tú
Page 6: Porqué Cervantes programaba mejor que tú

Code Quality!!

Page 7: Porqué Cervantes programaba mejor que tú

Code Quality!!

Business Value!!

Page 8: Porqué Cervantes programaba mejor que tú

2000

Page 9: Porqué Cervantes programaba mejor que tú

2001

Page 10: Porqué Cervantes programaba mejor que tú
Page 11: Porqué Cervantes programaba mejor que tú
Page 12: Porqué Cervantes programaba mejor que tú

2011

Page 13: Porqué Cervantes programaba mejor que tú

The Land That Scrum ForgotRobert C. Martin

NDC 2011

Page 14: Porqué Cervantes programaba mejor que tú
Page 15: Porqué Cervantes programaba mejor que tú

Por qué Cervantesprogramaba mejor que tú

Cervantesprogramaba

Page 16: Porqué Cervantes programaba mejor que tú

Por qué Cervantesprogramaba mejor que tú

Cervantesprogramaba

Page 17: Porqué Cervantes programaba mejor que tú
Page 18: Porqué Cervantes programaba mejor que tú

@author

Page 19: Porqué Cervantes programaba mejor que tú

escritura

Page 20: Porqué Cervantes programaba mejor que tú

“Comunicar a alguien por escrito algo”

Page 21: Porqué Cervantes programaba mejor que tú

lenguaje

Page 22: Porqué Cervantes programaba mejor que tú

“Conjunto de reglas y signos que permiten la comunicación con un

ordenador”

Page 23: Porqué Cervantes programaba mejor que tú
Page 24: Porqué Cervantes programaba mejor que tú

0110001001100101011100110110000100100000011011010110100100100000011000100111001001101001011011000110110001100001011011100111010001100101001000000110001101110101011011000110111100100000011011010110010101110100110000111010000101101100011010010110001101101111

Page 25: Porqué Cervantes programaba mejor que tú

besa mi brillante culo metálico

0110001001100101011100110110000100100000011011010110100100100000011000100111001001101001011011000110110001100001011011100111010001100101001000000110001101110101011011000110111100100000011011010110010101110100110000111010000101101100011010010110001101101111

Page 26: Porqué Cervantes programaba mejor que tú

evolución de los lenguajes

Page 27: Porqué Cervantes programaba mejor que tú

evolución de los lenguajes

Page 28: Porqué Cervantes programaba mejor que tú

evolución de los lenguajes

potencia

Page 29: Porqué Cervantes programaba mejor que tú

evolución de los lenguajes

potencia legibilidad

Page 30: Porqué Cervantes programaba mejor que tú

segment .text global two_complementtwo_complement: enter 0,0 pusha mov eax, [ebp+12] neg eax mov [ebp+8], eax popa leave ret

Page 31: Porqué Cervantes programaba mejor que tú

private void updateComputer(Node n, Map<String,Computer> byNameMap, Set<Computer> used) {

Computer c;c = byNameMap.get(n.getNodeName());

    if (c!=null) {c.setNode(n);

    } else {if(n.getNumExecutors()>0) {

computers.put(n,c=n.createComputer());if (!n.holdOffLaunchUntilSave && AUTOMATIC_SLAVE_LAUNCH) {

RetentionStrategy retentionStrategy = c.getRetentionStrategy();

if (retentionStrategy != null) {retentionStrategy.start(c);

        } else {c.connect(true);

        }}

}}used.add(c);

}

Page 32: Porqué Cervantes programaba mejor que tú
Page 33: Porqué Cervantes programaba mejor que tú

100% humanos

Page 34: Porqué Cervantes programaba mejor que tú

¿realmente programamos para las

máquinas?

Page 35: Porqué Cervantes programaba mejor que tú
Page 36: Porqué Cervantes programaba mejor que tú
Page 37: Porqué Cervantes programaba mejor que tú

W.T.F.

Page 38: Porqué Cervantes programaba mejor que tú
Page 39: Porqué Cervantes programaba mejor que tú

“aquel que agrada a la persona que lo lee”

Page 40: Porqué Cervantes programaba mejor que tú

wehrwirtschaftsführer

Page 41: Porqué Cervantes programaba mejor que tú

rindfleischetikettierungsüberwachungsaufgabenübertragungsgesetz

Page 42: Porqué Cervantes programaba mejor que tú

subjetiva

Page 43: Porqué Cervantes programaba mejor que tú

principios

Page 44: Porqué Cervantes programaba mejor que tú

Single Responsibility Principle

Open Closed Principle

Liskov Substitution Principle

Dependency Inversion Principle

Interface Segregation Principle

Law of Demeter

Duplication

Cohesion

Information hiding

KISS

YAGNI

DRY

GRASPSimple Design

Least Surprise

Design Patterns

Uniform Access

Auto-documentation

Dependencies Simmetry

Expresiveness

Naming

Page 45: Porqué Cervantes programaba mejor que tú

“aquel que cumple todos los principios”

Page 46: Porqué Cervantes programaba mejor que tú
Page 47: Porqué Cervantes programaba mejor que tú
Page 48: Porqué Cervantes programaba mejor que tú

W.T.F.

Page 49: Porqué Cervantes programaba mejor que tú

private void updateComputer(Node n, Map<String,Computer> byNameMap, Set<Computer> used) {

Computer c;c = byNameMap.get(n.getNodeName());

    if (c!=null) {c.setNode(n);

    } else {if(n.getNumExecutors()>0) {

computers.put(n,c=n.createComputer());if (!n.holdOffLaunchUntilSave && AUTOMATIC_SLAVE_LAUNCH) {

RetentionStrategy retentionStrategy = c.getRetentionStrategy();

if (retentionStrategy != null) {retentionStrategy.start(c);

        } else {c.connect(true);

        }}

}}used.add(c);

}

Page 50: Porqué Cervantes programaba mejor que tú

good code

Page 51: Porqué Cervantes programaba mejor que tú

You know you are working on good code when each routine you read turns out to be pretty much what you expected.

You can call it beautiful when the code also makes it look like the language was made for the problem.

Page 52: Porqué Cervantes programaba mejor que tú

Good code is simple and direct. Good code reads like well-written prose.

Good code never obscures the designer’s intent but rather is full of crisp abstractions and straightforward lines of control.

Page 53: Porqué Cervantes programaba mejor que tú

legibilidad

Page 54: Porqué Cervantes programaba mejor que tú

*creencia personal

la mejor forma de escribir buen código es centrarse en la

legibilidad*

Page 55: Porqué Cervantes programaba mejor que tú

defectos

Page 56: Porqué Cervantes programaba mejor que tú

defectos

Page 57: Porqué Cervantes programaba mejor que tú

1. Acoplamiento

defectos

Page 58: Porqué Cervantes programaba mejor que tú

1. Acoplamiento

2. Duplicación

defectos

Page 59: Porqué Cervantes programaba mejor que tú

1. Acoplamiento

2. Duplicación

3. Ausencia de encapsulación

defectos

Page 60: Porqué Cervantes programaba mejor que tú

1. Acoplamiento

2. Duplicación

3. Ausencia de encapsulación

4. Complejidad innecesaria

defectos

Page 61: Porqué Cervantes programaba mejor que tú

for (final ConfiguracionCanal c : mensaje.getSolicitud().getServicio().getConfiguracionesCanal()) {if (mensaje.getCanal().equals(c. getCanal())) {configuracion = c;

}}

Page 62: Porqué Cervantes programaba mejor que tú

mensaje.configuracionDeCanal()

Page 63: Porqué Cervantes programaba mejor que tú

MensajeSolicitud

Servicio Canal

ConfiguracionCanal

correspondiente a

de

a través de

Page 64: Porqué Cervantes programaba mejor que tú

subliminal slide

getters & settersareevil

Page 65: Porqué Cervantes programaba mejor que tú

las 4 cualidades del diseño simple

Page 66: Porqué Cervantes programaba mejor que tú

1. Pasa todos los tests

2. Minimiza la duplicación

3. Maximiza la claridad

4. Tiene los mínimos elementos

las 4 cualidades del diseño simple

Page 67: Porqué Cervantes programaba mejor que tú

oh wait...¿y los tests?

Page 68: Porqué Cervantes programaba mejor que tú
Page 69: Porqué Cervantes programaba mejor que tú

def d(b)eval"def #{b} end"end;d't(m,&a)puts"\e[0;3#{a.call ? "2":"1"}m#{m}\e[0m"';d'a(e)e';d'ae(e,d)e==d';d'ai(e,a)a.include? e'

Page 70: Porqué Cervantes programaba mejor que tú

def d(b)eval"def #{b} end"

end

d 't(m,&a)puts"\e[0;3#{a.call ? "2":"1"}m#{m}\e[0m"'

d 'a(e)e'

d 'ae(e,d)e==d'

d 'ai(e,a)a.include? e'

Page 71: Porqué Cervantes programaba mejor que tú

t '(red): testing that assert equals fails' do ae(1,2)

end

t '(green): testing that assert equals works' doae(2,2)

end

Page 72: Porqué Cervantes programaba mejor que tú

twittestthe ruby test framework

that fits in a tweet!!

Page 73: Porqué Cervantes programaba mejor que tú

las 4 cualidades del diseño simple

Page 74: Porqué Cervantes programaba mejor que tú

1. Pasa todos los tests

las 4 cualidades del diseño simple

Page 75: Porqué Cervantes programaba mejor que tú

1. Pasa todos los tests

2. Minimiza la duplicación

las 4 cualidades del diseño simple

Page 76: Porqué Cervantes programaba mejor que tú

1. Pasa todos los tests

2. Minimiza la duplicación

3. Maximiza la claridad

las 4 cualidades del diseño simple

Page 77: Porqué Cervantes programaba mejor que tú

1. Pasa todos los tests

2. Minimiza la duplicación

3. Maximiza la claridad

4. Tiene los mínimos elementos

las 4 cualidades del diseño simple

Page 78: Porqué Cervantes programaba mejor que tú

todo repercute en la legibilidad

Page 79: Porqué Cervantes programaba mejor que tú

def d(b)eval"def #{b} end"

end

d 'a(e)e'

d 'ae(e,d)e==d'

d 'ai(e,a)a.include? e'

d 't(m,&a)puts"\e[0;3#{a.call ? "2":"1"}m#{m}\e[0m"'

Page 80: Porqué Cervantes programaba mejor que tú

def d(b)eval"def #{b} end"

end

d 'a(e)e'

d 'ae(e,d)e==d'

d 'ai(e,a)a.include? e'

d 't(m,&a)puts"\e[0;3#{a.call ? "2":"1"}m#{m}\e[0m"'

Page 81: Porqué Cervantes programaba mejor que tú

def d(b)eval"def #{b} end"

end

d 'a(e)e'

d 'ae(e,d)e==d'

d 'ai(e,a)a.include? e'

d 't(m,&a)puts"\e[0;3#{a.call ? "2":"1"}m#{m}\e[0m"'

Page 82: Porqué Cervantes programaba mejor que tú

d 'a(e)e'

d 'ae(e,d)e==d'

d 'ai(e,a)a.include? e'

Page 83: Porqué Cervantes programaba mejor que tú

def assert(value) return value == trueend

def assert_equal(value, expected) return value == expectedend

def assert_includes(value, container) return container.include? valueend

Page 84: Porqué Cervantes programaba mejor que tú

def d(b)eval"def #{b} end"

end

d 'a(e)e'

d 'ae(e,d)e==d'

d 'ai(e,a)a.include? e'

d 't(m,&a)puts"\e[0;3#{a.call ? "2":"1"}m#{m}\e[0m"'

Page 85: Porqué Cervantes programaba mejor que tú

d 't(m,&a)puts"\e[0;3#{a.call ? "2":"1"}m#{m}\e[0m"'

Page 86: Porqué Cervantes programaba mejor que tú

def test(message, &assert) puts "\e[0;3#{assert.call ? "2":"1"}m#{message}\e[0m"end

Page 87: Porqué Cervantes programaba mejor que tú

¿legible?

Page 88: Porqué Cervantes programaba mejor que tú
Page 89: Porqué Cervantes programaba mejor que tú

legibilidad sí,pero...

¿cuánta?

Page 90: Porqué Cervantes programaba mejor que tú
Page 91: Porqué Cervantes programaba mejor que tú

si el test pasaimprimir en verde el nombre del test

sinoimprimir en rojo el nombre del test

Page 92: Porqué Cervantes programaba mejor que tú

def test(test_name, &test) if test.passes?

print_in GREEN, test_name else print_in RED, test_name end

end

Page 93: Porqué Cervantes programaba mejor que tú

el buen código es...

Page 94: Porqué Cervantes programaba mejor que tú

“aquel que hace obvio lo que está pasando”

Page 95: Porqué Cervantes programaba mejor que tú

Good code always looks like it was written by someone who cares.

Good code is code left by someone who cares deeply about the craft.

Page 96: Porqué Cervantes programaba mejor que tú

muchas gracias

Page 97: Porqué Cervantes programaba mejor que tú

Kent Beck: http://www.flickr.com/photos/26420411@N02/3062930943/

Opposing Armies: http://www.flickr.com/photos/ahounslea/4873239128

Ward Cunningham: http://www.flickr.com/photos/joshb/2247556208/

Uncle Bob: http://www.flickr.com/photos/koss/3250213001/

Balance: http://www.flickr.com/photos/classblog/5136926303/

Futurama pictures and WTFs/minute draws were found on google searches.

Hand drawings of Grady Booch, Ward Cunningham and Michael Feathers were taken from the Clean Code ebook.

credits