+ All Categories
Home > Technology > Por qué Cervantes programaba mejor que tú

Por qué Cervantes programaba mejor que tú

Date post: 12-Apr-2017
Category:
Upload: javier-acero
View: 1,355 times
Download: 4 times
Share this document with a friend
97
Por qué Cervantes programaba mejor que tú Javier Acero @jacegu http://javieracero.com
Transcript
Page 1: Por qué Cervantes programaba mejor que tú

Por qué Cervantesprogramaba mejor que tú

Javier Acero @jacegu http://javieracero.com

Page 2: Por qué Cervantes programaba mejor que tú
Page 3: Por qué Cervantes programaba mejor que tú

1999

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

Code Quality!!

Page 7: Por qué Cervantes programaba mejor que tú

Code Quality!!

Business Value!!

Page 8: Por qué Cervantes programaba mejor que tú

2000

Page 9: Por qué Cervantes programaba mejor que tú

2001

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

2011

Page 13: Por qué Cervantes programaba mejor que tú

The Land That Scrum ForgotRobert C. Martin

NDC 2011

Page 14: Por qué Cervantes programaba mejor que tú
Page 15: Por qué Cervantes programaba mejor que tú

Por qué Cervantesprogramaba mejor que tú

Cervantesprogramaba

Page 16: Por qué Cervantes programaba mejor que tú

Por qué Cervantesprogramaba mejor que tú

Cervantesprogramaba

Page 17: Por qué Cervantes programaba mejor que tú
Page 18: Por qué Cervantes programaba mejor que tú

@author

Page 19: Por qué Cervantes programaba mejor que tú

escritura

Page 20: Por qué Cervantes programaba mejor que tú

“Comunicar a alguien por escrito algo”

Page 21: Por qué Cervantes programaba mejor que tú

lenguaje

Page 22: Por qué Cervantes programaba mejor que tú

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

ordenador”

Page 23: Por qué Cervantes programaba mejor que tú
Page 24: Por qué Cervantes programaba mejor que tú

0110001001100101011100110110000100100000011011010110100100100000011000100111001001101001011011000110110001100001011011100111010001100101001000000110001101110101011011000110111100100000011011010110010101110100110000111010000101101100011010010110001101101111

Page 25: Por qué Cervantes programaba mejor que tú

besa mi brillante culo metálico

0110001001100101011100110110000100100000011011010110100100100000011000100111001001101001011011000110110001100001011011100111010001100101001000000110001101110101011011000110111100100000011011010110010101110100110000111010000101101100011010010110001101101111

Page 26: Por qué Cervantes programaba mejor que tú

evolución de los lenguajes

Page 27: Por qué Cervantes programaba mejor que tú

evolución de los lenguajes

Page 28: Por qué Cervantes programaba mejor que tú

evolución de los lenguajes

potencia

Page 29: Por qué Cervantes programaba mejor que tú

evolución de los lenguajes

potencia legibilidad

Page 30: Por qué 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: Por qué 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: Por qué Cervantes programaba mejor que tú
Page 33: Por qué Cervantes programaba mejor que tú

100% humanos

Page 34: Por qué Cervantes programaba mejor que tú

¿realmente programamos para las

máquinas?

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

W.T.F.

Page 38: Por qué Cervantes programaba mejor que tú
Page 39: Por qué Cervantes programaba mejor que tú

“aquel que agrada a la persona que lo lee”

Page 40: Por qué Cervantes programaba mejor que tú

wehrwirtschaftsführer

Page 41: Por qué Cervantes programaba mejor que tú

rindfleischetikettierungsüberwachungsaufgabenübertragungsgesetz

Page 42: Por qué Cervantes programaba mejor que tú

subjetiva

Page 43: Por qué Cervantes programaba mejor que tú

principios

Page 44: Por qué 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: Por qué Cervantes programaba mejor que tú

“aquel que cumple todos los principios”

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

W.T.F.

Page 49: Por qué 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: Por qué Cervantes programaba mejor que tú

good code

Page 51: Por qué 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: Por qué 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: Por qué Cervantes programaba mejor que tú

legibilidad

Page 54: Por qué Cervantes programaba mejor que tú

*creencia personal

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

legibilidad*

Page 55: Por qué Cervantes programaba mejor que tú

defectos

Page 56: Por qué Cervantes programaba mejor que tú

defectos

Page 57: Por qué Cervantes programaba mejor que tú

1. Acoplamiento

defectos

Page 58: Por qué Cervantes programaba mejor que tú

1. Acoplamiento

2. Duplicación

defectos

Page 59: Por qué Cervantes programaba mejor que tú

1. Acoplamiento

2. Duplicación

3. Ausencia de encapsulación

defectos

Page 60: Por qué Cervantes programaba mejor que tú

1. Acoplamiento

2. Duplicación

3. Ausencia de encapsulación

4. Complejidad innecesaria

defectos

Page 61: Por qué Cervantes programaba mejor que tú

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

}}

Page 62: Por qué Cervantes programaba mejor que tú

mensaje.configuracionDeCanal()

Page 63: Por qué Cervantes programaba mejor que tú

MensajeSolicitud

Servicio Canal

ConfiguracionCanal

correspondiente a

de

a través de

Page 64: Por qué Cervantes programaba mejor que tú

subliminal slide

getters & settersareevil

Page 65: Por qué Cervantes programaba mejor que tú

las 4 cualidades del diseño simple

Page 66: Por qué 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: Por qué Cervantes programaba mejor que tú

oh wait...¿y los tests?

Page 68: Por qué Cervantes programaba mejor que tú
Page 69: Por qué 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: Por qué 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: Por qué 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: Por qué Cervantes programaba mejor que tú

twittestthe ruby test framework

that fits in a tweet!!

Page 73: Por qué Cervantes programaba mejor que tú

las 4 cualidades del diseño simple

Page 74: Por qué Cervantes programaba mejor que tú

1. Pasa todos los tests

las 4 cualidades del diseño simple

Page 75: Por qué Cervantes programaba mejor que tú

1. Pasa todos los tests

2. Minimiza la duplicación

las 4 cualidades del diseño simple

Page 76: Por qué 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: Por qué 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: Por qué Cervantes programaba mejor que tú

todo repercute en la legibilidad

Page 79: Por qué 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: Por qué 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: Por qué 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: Por qué Cervantes programaba mejor que tú

d 'a(e)e'

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

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

Page 83: Por qué 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: Por qué 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: Por qué Cervantes programaba mejor que tú

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

Page 86: Por qué Cervantes programaba mejor que tú

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

Page 87: Por qué Cervantes programaba mejor que tú

¿legible?

Page 88: Por qué Cervantes programaba mejor que tú
Page 89: Por qué Cervantes programaba mejor que tú

legibilidad sí,pero...

¿cuánta?

Page 90: Por qué Cervantes programaba mejor que tú
Page 91: Por qué Cervantes programaba mejor que tú

si el test pasaimprimir en verde el nombre del test

sinoimprimir en rojo el nombre del test

Page 92: Por qué 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: Por qué Cervantes programaba mejor que tú

el buen código es...

Page 94: Por qué Cervantes programaba mejor que tú

“aquel que hace obvio lo que está pasando”

Page 95: Por qué 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: Por qué Cervantes programaba mejor que tú

muchas gracias

Page 97: Por qué 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


Recommended