Readability counts~読みやすいことは重要だ

Python におけるソフトウェアエンジニアリングの原則

Adam Spannbauer

Machine Learning Engineer

Pythonの禅

import this
The Zen of Python, by Tim Peters (abridged)

Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
The complex is better than complicated.
Readability counts.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Python におけるソフトウェアエンジニアリングの原則

説明的な名前

良くない名前

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

説明的な名前

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

やりすぎな名前

def check_if_temperature_is_above_boiling_point(
        temperature_to_check, 
        celsius_water_boiling_point=100):
    return temperature_to_check >= celsius_water_boiling_point
Python におけるソフトウェアエンジニアリングの原則

シンプルに保つ

The Zen of Python, by Tim Peters (abridged)

Simple is better than complex.
Complex is better than complicated.

Pizza Slice

Python におけるソフトウェアエンジニアリングの原則

ピザ作り - 複雑

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)
    ...
Python におけるソフトウェアエンジニアリングの原則

ピザ作り - シンプル

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

    return bake(assembled_pizza)
Python におけるソフトウェアエンジニアリングの原則

リファクタリングのタイミング

良くない名前

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

説明的な名前

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

やりすぎな名前

def check_if_temperature_is_above_boiling_point(
        temperature_to_check, 
        celsius_water_boiling_point=100):
    return temperature_to_check >= celsius_water_boiling_point
Python におけるソフトウェアエンジニアリングの原則

練習しましょう!

Python におけるソフトウェアエンジニアリングの原則

Preparing Video For Download...