Теперь Кью работает в режиме чтения

Мы сохранили весь контент, но добавить что-то новое уже нельзя

Как профессиональные программисты быстро определяют, какой код и алгоритм наиболее эффективен?

ПрограммированиеIt+1
Кайло Фернан
  ·   · 1,3 K
Математик-системный программист, разработчик асу...  · 25 авг 2021

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

Именно быстро:

Есть разные задачи, в большинстве своём они не требуют очень высокой эффективности и достаточно выбрать просто приемлемый не самый плохой алгоритм расписанный ещё Кнутом и Ахо.

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

Программисты сидят в профилировщиках, читают статьи по подобным вопросам, проводят множество сравнительных экспериментов на разных наборах данных.

Иногда(часто) использование более эффективного с т.з. времени алгоритма требует больше оперативной памяти, которой может быть недостаточно, или задача работает в связке с другими, потому нужно минимизировать обращения к жёсткому диску(и наоборот ряд улучшений для hdd, компенсирующих его долгое время доступа, сегодня не актуальны и могут замедлять работу относительно других алгоритмов при работе с ssd, есть и нюансы оптимизации для разных файловых систем. Помнится мне однажды пришлось промежуточные данные писать на физическую флешь мимо файловой системы, так как работа через ос и файловую систему снижала скорость в несколько раз.).

Сегодня задачу часто можно распараллелить, но с распараллеливанием тоже надо быть осторожней, это требует и памяти и переключение контекста с синхронизацией данных имеет большие накладные расходы(да и само создание треда достаточно ресурсоёмкий системный вызов), всё это нужно учитывать(есть базовые подходы позволяющие получить результаты более-менее, но если разговор о высоконагруженном сервере, то там идёт битва на не жизнь, так как "количество переходит в качество").

Есть особенности работы аппаратуры, предварительной выборки данных, спаривания инструкций, возможности использования дополнительной оперативной памяти и т.д. (да и банально при работе с большими файлами, самописная библиотека буферизации может в конкретно вашей задаче дать прирост в несколько раз относительно базовых возможностей языка/интерпретатора/ос)

Выбирая алгоритмы часто можно отбросить заведомо неподходящие алгоритмы, но и тут может быть подвох. я помню когда в сортировке м-деревьями для начальной фазы применили улучшение внутреннего порядка, добавляя не по одному элементу. а предварительно отсортированными группами примерно по 10. которые сортировали (как всем известно малоэффективным и требующем автоматического отбрасывания) пузырьком, который из-за простоты и лёгкого предсказывания переходов в микроархитектуре процессора, на малых массивах оказывался эффективнее более сложных алгоритмов с лучшими асимптотическими характеристиками.

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

Родился, учился и работал в СССР. Инженер-оптик...  · 20 авг 2021
Интуитивно после некоего качественного скачка в опыте. Нейронная сеть в голове набирает достаточно эпизодов обучения и определяет качество и эффективность по мелочам вроде стиля именования переменных и порядка инициализации... Читать далее
2 эксперта согласны
Вот не знаю про нейронные всякие дела, но то, что интуитивно - факт. Я помню, как когда-то я учил алгоритмы... Читать дальше
Увлекаюсь естественными науками и математикой...  · 20 авг 2021
В первую очередь через сопоставление со сложившимися паттернами, ассоциирующимися с быстрым и медленным, безопасным и небезопасным, подходящим и неподходящим кодом. Это может быть использование предрасчёта вместо множественных... Читать далее
1 эксперт согласен
Руководитель компании TORNADO, специалист в...  · 20 авг 2021  · tornadonadom.ru
Не так давно, программисты, в большей степени могли полагаться только на свои навыки и опыт в оптимизации кода. Категорически мало инструментов по упрощению и автоматизации процессов было доступно, еще меньше были по настоящему... Читать далее