«Код читается в 10 раз чаще, чем пишется» — Роберт Мартин, автор Clean Code. Чистый код — это уважение к коллегам и к себе в будущем. Разберём принципы, которые действительно работают.

Именование: самый важный навык

# naming.py
# Плохо:
def f(d, n):
    return [x for x in d if x['a'] > n]

# Хорошо: имена объясняют намерение
def filter_users_above_age(users, min_age):
    return [
        user for user in users
        if user['age'] > min_age
    ]

Принцип единственной ответственности (SRP)

Функция или класс должны делать одну вещь и делать её хорошо. Если вы затрудняетесь кратко описать, что делает функция — она делает слишком много.

# srp.py
# Плохо: функция делает три разные вещи
def process_order(order):
    validate_order(order)     # валидация
    save_to_db(order)         # сохранение
    send_email(order)         # уведомление

# Хорошо: три отдельные функции, одна координирующая
def process_order(order):
    validate(order)
    save(order)
    notify(order)
Чистый код и рефакторинг

// DRY, KISS, YAGNI

DRY (Don't Repeat Yourself): дублирование — источник ошибок. KISS (Keep It Simple): простое решение лучше сложного. YAGNI (You Aren't Gonna Need It): не добавляйте функциональность «на будущее» — вы скорее всего не будете её использовать.

Магические числа и строки

# constants.py
# Плохо: что означает 86400?
if user.age > 18 and session.duration < 86400:
    allow_access()

# Хорошо: константы говорят за себя
LEGAL_AGE = 18
SECONDS_PER_DAY = 86400

if user.age > LEGAL_AGE and session.duration < SECONDS_PER_DAY:
    allow_access()

Комментарии: когда нужны, когда вредны

Хороший код читается как проза — без комментариев. Комментируйте «почему», а не «что». Комментарий, объясняющий «что делает этот код», — сигнал, что код нужно упростить.

# comments.py
# Плохой комментарий — дублирует код:
i += 1  # увеличить i на 1

# Хороший комментарий — объясняет "почему":
# Начинаем с 1, а не с 0, чтобы пропустить заголовок
for i in range(1, len(rows)):
Принципы написания кода