La lisibilité compte

Principes d'ingénierie logicielle en Python

Adam Spannbauer

Machine Learning Engineer

Le Zen de Python

import this
Le Zen de Python, par Tim Peters (version abrégée)

Le beau vaut mieux que le laid.
L'explicite vaut mieux que l'implicite.
Le simple vaut mieux que le complexe.
Le complexe vaut mieux que le compliqué.
La lisibilité compte.
Si l'implémentation est difficile à expliquer, c'est une mauvaise idée.
Si l'implémentation est facile à expliquer, c'est peut‑être une bonne idée.
Principes d'ingénierie logicielle en Python

Des noms descriptifs

Mauvais noms

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

Noms descriptifs

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

Trop en faire

def check_if_temperature_is_above_boiling_point(
        temperature_to_check, 
        celsius_water_boiling_point=100):
    return temperature_to_check >= celsius_water_boiling_point
Principes d'ingénierie logicielle en Python

Rester simple

Le Zen de Python, par Tim Peters (version abrégée)

Le simple vaut mieux que le complexe.
Le complexe vaut mieux que le compliqué.

  Tranche de pizza

Principes d'ingénierie logicielle en Python

Préparer une pizza – complexe

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

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

    # Make sauce
    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)
    ...
Principes d'ingénierie logicielle en Python

Préparer une 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)
Principes d'ingénierie logicielle en Python

Quand remanier le code

Mauvais noms

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

Noms descriptifs

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

Trop en faire

def check_if_temperature_is_above_boiling_point(
        temperature_to_check, 
        celsius_water_boiling_point=100):
    return temperature_to_check >= celsius_water_boiling_point
Principes d'ingénierie logicielle en Python

Passons à la pratique !

Principes d'ingénierie logicielle en Python

Preparing Video For Download...