Хм.

Это сложно.

С одной стороны, за пределами Ivory Towers почти нет программистов, которые должны быть в состоянии обеспечить строгое доказательство асимптотического времени выполнения своих программ. С другой стороны, если вы не оцените ситуацию и не будете действовать соответственно, вы, скорее всего, напишете плохой код.

Что я имею в виду под "оценивать ситуацию и действовать соответственно?"

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

Но написать хорошую программу — это больше, чем просто посмотреть на «Большое О». Асимптотическое время выполнения — это только один ингредиент в гораздо большем блюде, от которого зависит, насколько хорошо работает ваша программа. Точно так же, как шеф-повар думает о вкусе каждого ингредиента и о том, как при приготовлении он влияет на вкусовой профиль и качество всего блюда, мы, программисты, должны думать не только об асимптотическом времени выполнения наших программ.

Подумайте о том, как структурированы ваши входные данные: ваши входные данные должны отражать проблему, которую вы пытаетесь решить.

Подумайте о том, как структурированы ваши выходные данные: ваши выходные данные должны экономично отражать решение вашей проблемы.

Подумайте о том, сколько вычислений выполняет ваша программа по сравнению с получаемыми ею входными данными, о характере использования памяти вашей программой и о скорости доступа к памяти. имеет какой-либо смысл с точки зрения их структуры, вы получите неприятную, раздутую программу, выполнение которой занимает слишком много времени.

Подумайте о доступе к файлам/базам данных и сети. Перемещение информации повсюду займет больше времени, чем если бы вы выполняли все расчеты в одном месте… но иногда деловые потребности требуют хранения и перемещения информации. Это удар по производительности, который вам придется принять, чтобы доставить ценность программе конечному пользователю.

Говоря о предоставлении ценности конечному пользователю, я надеюсь, что это дало конкурентоспособным программистам и начинающим программистам еще немного над чем задуматься…