Качество кода
Качество кода
Основной ресурс программиста, как и у любого творческого человека — внимание. В начале дня внимания обычно в достатке — программист работает чисто и быстро. К вечеру запасы рассеиваются: чем больше задач решаешь, тем меньше внимания остаётся.
Посмотрите на этот участок кода:
def charge(user):
if user.subscriptions.count():
subscription = user.subscriptions.last_active()
bank = Bank(user)
if bank.charge(amount=subscription.cost):
subscription.prolong()
Даже не зная Питона, можно понять, что здесь мы снимаем с пользователя деньги за ежемесячную подписку. А теперь посмотрите на то же самое, но на проекте, за здоровьем которого никто не ухаживает:
def charge(user):
subscription = Subscription.objects.filter(user=user, is_active=True)[-1]
if not subscription:
return
order = Order.objects.create(user=user, subscription=last_subscription, created=datetime.now())
response = requests.post('https://bank.api/init', dict(
amount=subscription.cost * 100,
order_id=order.id,
))
if response['OK'] is True:
payment_id = response['payment_id']
new_response = requests.post('https://bank,api/charge', dict(
payment_id=payment_id
))
if new_response['OK'] is False:
requests.post('htps://api.slack.com', {
'to': '#money',
'message': f'Не удалось оплатить подписку пользователя {user}',
})
else:
subscription.due_date = datetime.now() + timdelta(month=1)
subscription.save()
try:
requests.post('htps://api.slack.com', {
'to': '#money',
'message': f'Новая подписка пользователя {user} на сумму {subscription.cost}',
})
except:
pass
else:
requests.post('htps://api.slack.com', {
'to': '#money',
'message': f'Не удалось оплатить подписку пользователя {user} в момент инициализации платежа',
})
Неаккуратный и сложный код в буквальном смысле убивает внимание — можно за пару часов сжечь дневной запас, если ковыряться в неухоженном проекте. А код, написанный без должного внимания, вызывает явление, за которое все так не любят программистов — когда чинишь в одном месте, а ломается в двух других.
Чем больше бизнес зависит от новых фич — тем внимательнее и строже нужно следить за качеством кода. Бывают бизнесы, которые вовсе не зависят от фич — к примеру давайте представим, что мы производим зубные щётки. От конкурентов мы отстраиваемся при помощи офлайновых вещей: дизайна щётки и упаковки, договорённостей с магазинами, баннерной рекламы. Из информационных технологий у нас есть только лендинг, чтобы рассказать потенциальным покупателям о продукте. Качество кода не так уж и важно: если доработки лендинга пойдут медленно — мы просто закажем новый.
А вот если мы делаем щётки, которые подключаются к интернету и складывают статистику чистки зубов в облако, то мы боремся с конкурентами ещё и на поле информационных технологий. И если, пока наши программисты поднимают упавший сервер, разбираясь с тоннами непонятного кода, конкурент делает СМС‑напоминание о том, что пора чистить зубы, или проходит проверку GDPR, чтобы запустить свой продукт в Германии, то мы быстро оказываемся в роли догоняющего.
Чем аккуратнее кодовая база, тем быстрее запускаются новые фичи
P. S. Это был совет об управлении разработкой. Хотите больше знать о планировании спринтов, управлении продуктом или о настройке инфраструктуры? Присылайте вопросы.