Legibilidade importa

Princípios de Engenharia de Software em Python

Adam Spannbauer

Machine Learning Engineer

O Zen do Python

import this
O Zen do Python, por Tim Peters (resumido)

Bonito é melhor que feio.
Explícito é melhor que implícito.
Simples é melhor que complexo.
Complexo é melhor que complicado.
Legibilidade importa.
Se a implementação é difícil de explicar, é uma má ideia.
Se a implementação é fácil de explicar, pode ser uma boa ideia.
Princípios de Engenharia de Software em Python

Nomeação descritiva

Nomeação ruim

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

Nomeação descritiva

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
Princípios de Engenharia de Software em Python

Mantenha simples

O Zen do Python, por Tim Peters (resumido)

Simples é melhor que complexo.
Complexo é melhor que complicado.

  Fatia de Pizza

Princípios de Engenharia de Software em Python

Fazendo uma pizza - complexo

def make_pizza(ingredients):
    # Fazer a massa
    dough = mix(ingredients['yeast'],
                ingredients['flour'],
                ingredients['water'],
                ingredients['salt'],
                ingredients['shortening'])

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

    # Fazer o molho
    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)
    ...
Princípios de Engenharia de Software em Python

Fazendo uma pizza - simples

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

    return bake(assembled_pizza)
Princípios de Engenharia de Software em Python

Quando refatorar

Nomeação ruim

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

Nomeação descritiva

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
Princípios de Engenharia de Software em Python

Vamos praticar

Princípios de Engenharia de Software em Python

Preparing Video For Download...