Любая программа словно фотон

Было ли у вас такое, что одним прекрасным утром, за чашечкой кофе и любимыми печеньками вы внезапно вспоминаете, что у вас сегодня дед лайн? Далее вы легким нажатием кнопки на корпусе включаете свой рабочий компьютер, вводите пароль и запускаете программу Discord, где вас уже около получаса ожидает заказчик.
На удивление, вы успели к дед лайну! Поздравляю вас, вы смогли уложиться в сроки впервые за долгое время. Вы спокойны, чувство невыполненного домашнего задания не преследует вас (по крайней мере при выполнении этого заказа), ваше сердце бьется с частой 90 колебаний в минуту, а ваш кот мило лежит у вас на коленках. В такие моменты легко можно словить нирвану, не так ли?
Но в какой-то момент, настанет время проверить вашу выполненную на пять работу, дабы получить свои честно заработанные деньги и пойти побаловать своего котика. Вы легкими двумя нажатиями открываете папку «Zakaz freelance (26)», попутно запуская «Visual Studio Code». Далее идет абсолютно привычное всем нам дело: проверка констант, запуск кода и самое главное, молитва, которую вы читаете в консоли, ведь ввод ее в консоль уже вошло к вам в привычку. И казалось бы, все идет хорошо, заказчик довольно смотрит на результат ваших усердий, как вдруг… Вы получаете банальную ошибку, которую вы можете исправить, но заказчику это не объяснить. Начинается паника, стресс, желание изобрести машину времени, чтобы переместиться на пару часов назад, дабы исправить ошибку раньше намеченного диалога. Но к сожалению, вам явно не до такого изобретения.
Заказчик, медленно покуривая, говорит самые суровые и страшные слова в вашей жизни: «Работай.». После этого, он кладет трубку, а вы в панике идете заново запускать код, дабы удостовериться в ошибке. Проворачивая все действия заново, программа выполняет все действия, что вы ей заготовили, все функции используется, программа выполняется за замеренное ранее время. Ошибки нет.

Если с вами подобного не случалось, то это обязательно случится. В этой статье мы разберем, почему такое может случиться и почему любая программа неоднозначна.

Почему словно фотон?

Это название статье я дал в честь популярного эксперимента, где наблюдается изменение поведения фотонов при наличии наблюдателя.

4832765d2fd0f366fddbe9ce6387f50c.png


В нашем же случае, наблюдателем является заказчик, а программа — фотоном. Интересная аналогия, не правда ли?

ПАН

ПАН — это аббревиатура из трех слов (Повторение, Альтернатива, Наблюдение), которую когда-то я услышал от знакомого программиста. Этот термин не особо введен в общество программистов, но соблюдая три простых правила, вы сможете сильно уменьшить вероятность возникновения непредвиденных ошибок на кануне.

Повторение

Что же я имею ввиду? К примеру, вы работаете с языком python и библиотекой selenium.
Если вы хоть раз работали с данной библиотекой, то в курсе, что даже в самом идеальном коде обязательно выскочит какая-нибудь ошибка. И не важно, как много вы исправляли, ведь произойти может все, что угодно. Например нестабильное подключение, слишком быстрая загрузка, случайно появившееся окно на странице и прочие неожиданные действия, которые вызывают ошибку при работе с драйвером браузера. Большинство подобных ошибок решаются вполне просто, нужно просто перезагрузить драйвер. Вроде как банально.
И так, первое решение заключается в повторе действия. Да, это банально, но действительно эффективно. Код может выглядеть примерно так:

def func():
  while True: # цикл нужен, чтобы в любом случае повторять действие вне зависимости от ошибки
    try:
      # код
      # 
      # /код
      break
    except:
      print("Error. I repeat the action")

Да, этот простейший код уже решает множество ваших проблем. Лично я додумался поступить примерно также совсем недавно…
В прочем, опытных программистов подобным точно не удивишь : D

Альтернатива

Если приводить тот же пример с Selenium, то стоит понимать, что всегда стоит искать альтернативу больному решению. Повторение не сможет помочь в решении определенной задачи, если само решение не верное. с помощью той же конструкции try-except сделайте несколько альтернативных решений.

try:
  # код
  #
  # /код
  print("Решение 1")
except:
  try:
    # код
    #
    # /код
    print("Решение 2")
  except:
    # код
    #
    # /код
    print("Решение 3")

Также банально, но многие забывают о подобном решении некоторых проблем.

Наблюдение

А допустим, проблема не так уж и очевидна на первый взгляд? Запомните, что проведение наблюдений перед самым дед лайном очень важно. Нужно проанализировать абсолютно каждую деталь, от того, сколько оперативной памяти требуется для полноценной работы вашей программы вплоть до наблюдаемого изменения ресурса парсинга к примеру. Это тоже важная деталь. Стоит наблюдать все.

Итоги

Да, не спорю, вполне вероятно, вы думаете, что это все слишком банально и заезжено, настоящий программист точно предусмотрит абсолютно каждую деталь, а подобные конструкции имеются в любом коде. Но вы удивитесь, если посмотрите на количество людей, не выполняющих хотя бы один пункт.
Заметьте, и слишком сложного решения я тоже не предлагал. Если вы видите здесь маленькие детали в программке, то да, это так и есть. Но добавить подобное решение, тем более усовершенствовать его, будет уместно практически в любом коде.

Обучение программированию не может научить быть экспертом, также как и изучение кистей и красок не может превратить кого-либо в художника.— Eric S. Raymond

© Habrahabr.ru