x
 
Федор Борщев
26 сентября 2019
Советы почтой каждую неделю
Пожалуйста, получите наше письмо, чтобы подтвердить свой адрес:
Вы подписаны на «Советы за неделю»:

Как следить за качеством кода? Часть первая: зачем


Качество кода

Основ­ной ресурс про­грам­ми­ста, как и у любого твор­че­ского чело­века — вни­ма­ние. В начале дня вни­ма­ния обычно в достатке — про­грам­мист рабо­тает чисто и быстро. К вечеру запасы рас­се­и­ва­ются: чем больше задач реша­ешь, тем меньше вни­ма­ния остаётся.

Качество кода

Посмот­рите на этот уча­сток кода:

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. Это был совет об управлении разработкой. Хотите больше знать о планировании спринтов, управлении продуктом или о настройке инфраструктуры? Присылайте вопросы.

Поделиться
Отправить

Цель рубрики — обсуждение вопросов дизайна всех видов, текста в дизайне и взаимоотношений дизайнеров с клиентами.

Мы публикуем комментарии, которые добавляют к уже сказанному новые мысли и хорошие примеры. Мы ожидаем, что такие комментарии составят около 20% от общего числа.

Решение о публикации принимается один раз; мы не имеем возможности комментировать или пересматривать свое решение, хотя оно может быть ошибочно. Уже опубликованные комментарии могут быть удалены через некоторое время, если без них обсуждение не становится менее ценным или интересным.

Вот такой веб 2.0.

Как следить за качеством кода? Часть вторая: метрики Несколько месяцев назад меня повысили из обычного разработчика до «тимлида» 1 Как правильно, эффективно и уважительно ставить KPI? Существует ли способ проверить компетентность веб-разработчика, если сам ничего не понимаешь в этом?




Недавно всплыло

10 дизайнерских товаров японских студий 2 Хочу научиться сторителлингу 12 Как совместить информационный стиль и текст для поисковиков? 7 Хочу научиться сторителлингу 2