La legibilidad importa

Principios de ingeniería de software en Python

Adam Spannbauer

Machine Learning Engineer

El Zen de Python

import this
El Zen de Python, por Tim Peters (resumido)

Lo bello es mejor que lo feo.
Lo explícito es mejor que lo implícito.
Lo simple es mejor que lo complejo.
Lo complejo es mejor que lo complicado.
La legibilidad importa.
Si la implementación es difícil de explicar, es una mala idea.
Si la implementación es fácil de explicar, puede ser una buena idea.
Principios de ingeniería de software en Python

Nombres descriptivos

Nombres pobres

def check(x, y=100):
    return x >= y

Nombres descriptivos

def is_boiling(temp, boiling_point=100):
    return temp >= boiling_point

Exagerando

def check_if_temperature_is_above_boiling_point(
        temperature_to_check, 
        celsius_water_boiling_point=100):
    return temperature_to_check >= celsius_water_boiling_point
Principios de ingeniería de software en Python

Manténlo simple

El Zen de Python, por Tim Peters (resumido)

Lo simple es mejor que lo complejo.
Lo complejo es mejor que lo complicado.

  Porción de pizza

Principios de ingeniería de software en Python

Haciendo una pizza - complejo

def make_pizza(ingredients):
    # Hacer masa
    dough = mix(ingredients['yeast'],
                ingredients['flour'],
                ingredients['water'],
                ingredients['salt'],
                ingredients['shortening'])

    kneaded_dough = knead(dough)
    risen_dough = prove(kneaded_dough)

    # Hacer salsa
    sauce_base = sautee(ingredients['onion'],
                                ingredients['garlic'],
                                ingredients['olive oil'])

    sauce_mixture = combine(sauce_base,
                            ingredients['tomato_paste'],
                            ingredients['water'],
                            ingredients['spices'])

    sauce = simmer(sauce_mixture)
    ...
Principios de ingeniería de software en Python

Haciendo una pizza - simple

def make_pizza(ingredients):
    dough = make_dough(ingredients)
    sauce = make_sauce(ingredients)
    assembled_pizza = assemble_pizza(dough, sauce, ingredients)

    return bake(assembled_pizza)
Principios de ingeniería de software en Python

Cuándo refactorizar

Nombres pobres

def check(x, y=100):
    return x >= y

Nombres descriptivos

def is_boiling(temp, boiling_point=100):
    return temp >= boiling_point

Exagerando

def check_if_temperature_is_above_boiling_point(
        temperature_to_check, 
        celsius_water_boiling_point=100):
    return temperature_to_check >= celsius_water_boiling_point
Principios de ingeniería de software en Python

¡Vamos a practicar!

Principios de ingeniería de software en Python

Preparing Video For Download...