Оптимизации это: Оптимизация — Что такое Оптимизация?

Содержание

Оптимизация

Оптимальный — наилучший в заданных условиях. Качество оценивается с помощью критерия оптимальности, а условия задаются в виде ограничений на дополнительные критерии.

Стремление к повышению эффективности труда, творчества, любой целенаправленной деятельности, это естественное стремление человека как бы нашло свое выражение, ясную и понятную форму в идее оптимальности. Различие между строго научным и «общепринятым», житейским пониманием оптимальности совсем невелико. Правда, встречающиеся выражения типа «наиболее оптимальный» или «добьемся максимального эффекта при минимуме затрат» математически некорректны, но лица, использующие эти выражения, на самом деле просто нестрого и неудачно выражают правильную мысль: как только дело касается конкретной оптимизации, они быстро и легко исправляют формулировки.

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

Оптимизационные модели

Оптимизационные модели предназначены для определения оптимальных (наилучших) с точки зрения некоторого критерия параметров моделируемого объекта или же для поиска оптимального (наилучшего) режима управления некоторым процессом. Часть параметров модели относят к параметрам управления, изменяя которые можно получать различные варианты наборов значений выходных параметров. Как правило, данные модели строятся с использованием одной или нескольких дескриптивных моделей и включают некоторый критерий, позволяющий сравнивать различные варианты наборов значений выходных параметров между собой с целью выбора наилучшего. На область значений входных параметров могут быть наложены ограничения в виде равенств и неравенств, связанные с особенностями рассматриваемого объекта или процесса. Целью оптимизационных моделей является поиск таких допустимых параметров управления, при которых критерий выбора достигает своего «наилучшего значения».

Оптимизационные модели исследования операций

Задача формулируется в виде математической модели. Типовая математическая модель исследования операций  представлена в следующей формулировке:

Максимизация или минимизация целевой функции, при условии выполнения ограничений

Оптимальными называются решения которые по тем или другим признакам предпочтительнее других. Каждый выбор лучшего варианта конкретен, поскольку основан на соответствии установленным критериям. Говоря об оптимальном варианте, указывают эти критерии («оптимальный по…»). То, что оптимально при одном критерии, не обязательно будет таковым при другом.

Допустимое решение — если оно удовлетворяет всем ограничениям модели. Допустимых решений в отдельных случаях может быть бесконечное множество.

Оптимальное решение — если кроме того, что оно допустимо, целевая функция в этом решении достигает максимального или минимального значения.

Оптимизация — максимизация или минимизация целевой функции.

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

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

Модель оптимального выбора

Большое число встречающихся на практике задач выбора сводится к нахождению лучших или наиболее предпочтительных для человека вариантов, а нередко — к поиску единственно лучшего варианта. При этом у каждого лица принимающего решение (ЛПР) есть собственные субъективные представления о том, что для него является предпочтительным в конкретной ситуации выбора.

Имеется достаточно много задач, для которых можно построить математическую модель выбора, где понятие лучшего варианта формализуется путем задания одного или нескольких числовых показателей эффективности или критериев качества решения. Эти показатели, хотя и задаются ЛПР, носят объективный характер, определяемый содержанием решаемой задачи, и выражаются какими-либо функциями, зависящими от переменных, которыми измеряются свойства вариантов. В таких случаях наиболее предпочтительным для ЛПР вариантом решения задачи выбора принято считать так называемый оптимальный вариант, который соответствует экстремальному значению одного или нескольких показателей эффективности решения при существующих условиях.

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

Для анализа возможных вариантов решения проблемы (способов достижения цели) и выбора среди них одного или нескольких лучших вариантов строятся формальные модели оптимального выбора. Модель дает упрощенное представление реальной проблемы и должна отражать наиболее важные и объективно существующие зависимости и связи между вариантами, описывающими их признаками и ограничениями, которые задаются управляемыми и неуправляемыми факторами. Построение такой модели — задача консультантов-аналитиков и экспертов при участии ЛПР. При построении модели выбора нужно соизмерять адекватность и детальность модели с точностью требуемого решения реальной задачи выбора, а также с объемом необходимой для поиска решения информации — как имеющейся в наличии, так и получаемой дополнительно.

Ограничения оптимизационного подхода

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

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

При всей очевидной полезности идеи оптимизации практика требует необходимости осторожного обращения с ней. Для такого заключения имеются достаточно веские основания.

  1. Оптимальное решение часто оказывается неустойчивым: незначительные на первый взгляд изменения в условиях задачи могут привести к выбору существенно отличающихся альтернатив.
  2. Рассматриваемая система является частью некоторой большей системы, и тогда локальная оптимизация совсем не обязательно приведет к тому же результату, который потребуется от подсистемы при оптимизации системы в целом. Это приводит к необходимости увязывать критерии подсистем с критериями системы, часто делая ненужной локальную оптимизацию.
  3. Критерии характеризуют цель лишь косвенно, иногда лучше, иногда хуже, но всегда приближенно. Максимизация критерия оптимальности часто отождествляется с целью, а на самом деле это разные вещи. Фактически критерий и цель относятся друг к другу как модель и оригинал, со всеми вытекающими отсюда особенностями. Многие цели трудно или даже невозможно количественно описать.
  4. Не задав всех необходимых ограничений, мы можем одновременно с максимизацией основного критерия получить непредвиденные и нежелательные сопутствуюшие эффекты.

 

 

Моделирование

Системный анализ

Исследование операций

Методология исследования операций

 

 

 

Оптимизация запасов | Минимизация рисков и отходов

Оптимизация запасов — это методика, обеспечивающая наличие необходимых запасов для удовлетворения спроса, при этом не допуская образования избыточных запасов. Эта методика также формирует определенный буфер запасов на случай непредвиденных ситуаций. В идеальном случае различные методы оптимизации должны поддерживать не только реагирование на риски и возможности, но и прогнозирование рисков и подготовку к ним.

Оптимизация запасов сегодня важна как никогда

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

 

Раньше, когда потребители терпимо относились к доставке в течение недели или даже более, компаниям было достаточно иметь пару крупных складов. Но сегодня из-за эффекта Амазона потребители все чаще ожидают доставку в день заказа или на следующий день. Это оказало огромное влияние на оптимизацию запасов, поскольку теперь компаниям необходимо иметь значительное число центров распределения и управлять запасами на множестве складов и хранилищ. Более того, популярность интернет-покупок достигла рекордно высокого уровня, а лояльность потребителей бренду снижается в условиях возросшего выбора в интернете. Это привело к беспрецедентному уровню конкуренции для многих компаний, к сокращению прибыли и к снижению терпимости к ошибкам.

Цепочка поставок — это действительно сложная вещь.

Илон Маск

Разница между управлением запасами и оптимизацией запасов

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

  • Управление запасами нацелено на достижение целевых показателей высокой производительности и эффективности для всех операций с запасами. Современные технологии планирования цепочки поставок поддерживают эти процессы, обеспечивая менеджерам по логистике повышение прозрачности всех звеньев цепочки. Интернет вещей (IoT) и облачные устройства и активы можно автоматизировать для повышения эффективности производства. Производственные, складские и логистические процессы также становятся более эффективными благодаря применению таких интеллектуальных технологий, как искусственный интеллект (ИИ), машинное обучение, робототехника и роботизированная автоматизация процессов.
  • Оптимизация запасов — это подгруппа операций управления запасами, основной целью которых является увеличение прибыли и минимизация убытков. Создание избыточных запасов ведет к потерям и отходам. Эти товары занимают место, оказываются просроченными и часто не пользуются спросом, или их приходится продавать по сниженным ценам. С другой стороны, как мы видели во время пандемии, если речь идет о запасах, то дефицит и неожиданный спрос — это две стороны одной медали, и затраты могут проявить себя в виде потери потенциальной прибыли и нанесенного бренду ущерба. Таким образом, цель оптимизации запасов состоит в том, чтобы наилучшим образом прогнозировать спрос и максимизировать финансовые результаты для компании.

Различные типы запасов

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

 

Обычно выделяют четыре основных типа запасов:

  1. Сырье. Это все запасы, которые в конечном итоге попадают в готовое изделие.
  2. Незавершенное производство (НП). Как следует из названия, это весь запас, который в настоящее время подготавливается и упаковывается. Это затратный и рискованный этап, поэтому решения по оптимизации запасов можно применять для поиска наиболее эффективных с точки зрения затрат и времени процессов.
  3. Готовая продукция. Это то, что обычно представляют себе люди, услышав слово «запас» — продукт в упакованном и готовом к продаже состоянии.
  4. Материалы для обслуживания, ремонта и эксплуатации (MRO). Все запасы, необходимые для производства, изготовления и доставки товаров. Оптимизация запасов нацелена на достижение наилучшего баланса между избытком и дефицитом этих непотребительских позиций.

Сложности традиционной оптимизации запасов

С тех пор, как в мире появились склады и цепочки поставок, одной из самых сложных задач для оптимизации запасов является ответ на вопрос: «уже достаточно» или «еще нет»? Прогнозирование спроса традиционно было методикой, опирающейся на данные о прошлых событиях. Какой бы высокой квалификацией ни обладали специалисты по оптимизации запасов и прогнозированию спроса, способности человека к анализу и прогнозу всегда ограничены. Поэтому линейные цепочки поставок, в которых используются устаревшие системы, всегда будут уязвимыми независимо от опыта специалистов. Вот некоторые из самых распространенных проблем:

  • Устаревшие системы, не способные собирать большие данные и управлять ими. Вручную и с устаревшими технологиями невозможно обрабатывать большие объемы разрозненных и неструктурированных данных. Именно на основе этих данных и при помощи таких интеллектуальных технологий, как искусственный интеллект, машинное обучение и расширенная аналитика, достигается большая точность прогнозирования рисков и спроса.
  • Быстрое изменение запросов клиентов. С каждым годом растет запрос потребителей на оперативную поставку и персонализированную продукцию. Кроме того, жизненные циклы продуктов стали короче, чем когда бы то ни было. Компаниям слишком дорого наращивать сети поставок для удовлетворения этих потребностей, поэтому оптимизация запасов должна осуществляться с повышенной точностью.  
  • Рост конкуренции. Влияние концепции «Индустрия 4.0» и интеллектуальных технологий цепочки поставок состоит в том, что компании могут создаваться и расти быстрее, чем когда-либо, и управление осуществляется из центрального узла. Это привело к беспрецедентному уровню конкуренции и к широкому выбору для потребителей. Решения для оптимизации запасов становятся все более востребованными, потому что помогают обеспечить конкурентные преимущества.
  • Погодные условия и стихийные бедствия. Каждый год мы наблюдаем все больше разрушительных штормов и лесных пожаров. Очевидно, что невозможно точно предсказывать такие события, но при помощи расширенной аналитики и облачных решений менеджеры по управлению запасами могут действовать гораздо более эффективно в периоды колебаний спроса.

Опора на фундаментальные процессы прогнозирования и оптимизации запасов

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

 

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

  • ABC анализ. Определение наиболее и наименее популярных продуктов, а также продуктов, которые наиболее и наименее рентабельны. Традиционно это достигалось за счет анализа данных продаж за прошлые периоды. Но благодаря расширенной аналитике и интеллектуальным технологиям теперь можно лучше прогнозировать тенденции, а также рост и сокращение потребностей в запасах еще до их возникновения.
  • Прогнозирование спроса. Прогнозная аналитика помогает предсказывать клиентский спрос. Она также используется для прогнозирования тенденций или рисков. Если традиционно это был процесс, направленный в прошлое, то теперь программное обеспечение для управления запасами позволяет менеджерам по цепочкам поставок свести к минимуму риск дефицита и потерь, а также более точно прогнозировать спрос.  
  • Планирование потребности в материалах (MRP). Система, в которой осуществляется планирование, календарное планирование и контроль запасов для производства. Устаревшие MRP-системы все чаще заменяются системами интегрированного бизнес-планирования и системами планирования потребности в материалах на основе спроса (DDMRP), которые обеспечивают большую точность и устойчивость. 
  • Формула точки пополнения запаса. Отражает минимальный объем запаса, по достижении которого запас должен быть пополнен. Этот процесс традиционно является сложным, поскольку он зависит от конкретного продукта, даже если речь идет об очень похожих продуктах. Например, у белых и черных носков могут быть разные точки пополнения запаса. Технологии оптимизации запасов обеспечивают точность и прозрачность даже самых сложных объемов запасов в разных местоположениях — в любом месте и в режиме реального времени.
  • Непрерывное управление запасами. Оно особенно актуально для товаров повседневного спроса, движение которых осуществляется с молниеносной скоростью. Интеллектуальные технологии позволяют полностью автоматизировать процессы непрерывного управления запасами во всех точках контакта при осуществлении омниканальных закупок. Машинное обучение может помочь этим инструментам стать еще более интеллектуальными и точными, позволяя даже отслеживать новости, тенденции и сводки погоды, чтобы предоставлять оперативные аналитические данные и отчеты о состоянии запасов. 
  • Страховой и резервный запас. Здесь речь идет о создании реалистичных резервных запасов на случай непредвиденных ситуаций. Это стало серьезной проблемой с тех пор, как в мире появились цепочки поставок, потому что и дефицит, и отходы приводят к потере прибыли. Современные решения для управления цепочкой поставок обеспечивают скорость, взаимосвязанность и расширенные функции анализа данных в процессе управления запасами. Это позволяет компаниям оптимизировать объемы резервных запасов с впечатляющей точностью.

Системы оптимизации запасов: преимущества и результаты

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

  • Повышение прозрачности бизнеса. Использование программных решений для оптимизации запасов позволяет улучшить прозрачность по многим направлениям — от продаж, маркетинга и бухгалтерского учета до управления поставщиками сырья и даже глобальными партнерами, активами и расходами. Подключение к облаку позволяет всем командам, участвующим в цепочке поставок, работать вместе в реальном времени.
  • Улучшение прогнозирования спроса и возможностей прогнозирования. Интеллектуальные технологии могут обрабатывать сложные данные из источников как внутри компании, так и за ее пределами, а также предоставлять точные прогнозы и аналитические данные. Когда в технологиях цепочки поставок используются искусственный интеллект и машинное обучение, прогнозная аналитика и прогнозирование спроса становятся более точными и информативными.
  • Более комплексные результаты оптимизации. Интеллектуальные системы, способные анализировать сложные и разноплановые наборы данных, позволяют менеджерам по управлению запасами видеть не только наиболее рентабельные продукты, но и оптимальные местоположения, где товары и их комбинации лучше всего продаются в разное время года.
  • Масштабируемость. Компаниям необходимо уметь быстро наращивать объемы по многим причинам. Это может быть успешная деятельность и рост бизнеса, непредвиденные события или сезонность. Для интеллектуального программного обеспечения и современных баз данных возможность масштабирования не ограничена, и они могут наращивать и оптимизировать операции в глобальном масштабе.

Расширение горизонтов благодаря многоуровневой оптимизации управления запасами (MEIO)

Сложные (особенно глобальные) цепочки поставок получают преимущества от решений MEIO. Эти решения основаны на традиционных принципах оптимизации запасов, но используют современные облачные технологии управления цепочкой поставок. Так MEIO решения централизованно получают представление о глобальных операциях в реальном времени. Эффективное решение MEIO рекомендует оптимальные объемы запасов для каждого звена (или уровня) в цепочке поставок за счет одновременной оптимизации баланса запасов по нескольким местоположениям.

 

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

Начало работы с лучшими практиками планирования запасов

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

  1. Используйте надежные методы прогнозирования спроса.
    Прогнозирование спроса дает компании важнейшую информацию, позволяя выработать стратегию управления запасами и другие процессы, такие как закупка ресурсов, входящая логистика, производство, финансовое планирование и оценка рисков.
  2. Сделайте ваш бюджет запасов на I квартал приоритетным.
    У каждой компании есть свои циклы и изменения в течение года. Составив поквартальный бюджет запасов, планировщики цепочек поставок смогут устанавливать более реалистичные и достижимые цели и KPI.
  3. Внедрите стандартные системы инвентаризации.
    Системы инвентаризации можно настроить для различных типов запасов, и это поможет повысить эффективность и оптимизировать рабочие процессы. Сложные в организационном плане компании часто используют разные системы. Главное здесь — это согласованность и действия по плану. Есть два основных типа систем инвентаризации запасов:
    • Система непрерывной инвентаризации. В рамках этой модели в каждом цикле заказывается одинаковое количество товаров, и менеджеры по управлению запасами должны постоянно отслеживать уровень запасов и пополнять их, когда количество товара опускается ниже установленного уровня. 
    • Периодическая инвентаризация. В этой модели менеджеры по управлению запасами заказывают продукты в одно и то же время в каждом бизнес-цикле. В конце цикла необходимый запас заказывается на основе уровня запаса на этот момент времени. Эта система не использует фиксированные уровни повторных заказов и более эффективна для неходовых продуктов.
  4. Прислушивайтесь к своим клиентам.
    Многие компании прислушиваются только к самым «шумным» клиентам и в конечном итоге принимают решения на основе самой громкой обратной связи. Лучшие программные решения для управления запасами могут регулярно собирать и анализировать данные от всех клиентов и покупателей и предлагать информацию и рекомендации в реальном времени. Это позволяет оптимизировать запасы, обеспечивая информированность при принятии решений по управлению запасами.
  5. Используйте принципы «точно в срок» и «по запросу».
    Сокращение жизненного цикла продукта и растущий потребительский запрос на скорость и персонализацию означают, что оптимизация запасов должна быть быстрой и гибкой. Такие технологии, как 3D-печать и роботизированная автоматизация, позволяют компаниям создавать виртуальные запасы. Цепочки поставок в производственной отрасли все чаще используют сети поставщиков по запросу. С помощью интеллектуального программного обеспечения менеджеры по управлению запасами могут принимать решения об оптимизации запасов в реальном времени, не сомневаясь в том, что эти решения подкреплены данными.

Дальнейшие шаги к улучшенному планированию и оптимизации запасов

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

Узнайте больше о решениях для оптимизации запасов

Оптимизируйте запасы в соответствии с поставленными целями при помощи SAP Integrated Business Planning.

Подробнее

Новостная рассылка SAP Insights

Подпишитесь сегодня

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

Другие материалы

Почему преждевременная оптимизация — корень всех зол

Matt Watson Советы разработчиков, хитрости и ресурсы, Советы для руководителей разработчиков

Одна из самых сложных частей разработки программного обеспечения — это знать, над чем работать. Мы все любим писать код и создавать вещи. Разработчики тоже дорогие и дефицитные. Одна из самых больших проблем заключается в том, чтобы убедиться, что мы правильно используем свое время. Последнее, чего мы хотим, — это выпускать код, который не нравится нашим пользователям или который не работает. Сколько времени мы должны посвятить настройке и оптимизации производительности, всегда зависит от баланса.

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

Совет. Мгновенное обнаружение ошибок приложений и проблем с производительностью с помощью Stackify Retrace

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

Что такое преждевременная оптимизация?

Преждевременная оптимизация — это трата большого количества времени на то, что вам на самом деле может не понадобиться. «Преждевременная оптимизация — корень всех зол» — известная поговорка среди разработчиков программного обеспечения. Его источник приписывается Дональду Кнуту. Вот полная цитата из его книги Искусство компьютерного программирования :

«Настоящая проблема заключается в том, что программисты тратят слишком много времени на беспокойство об эффективности не в том месте и не в то время; преждевременная оптимизация — корень всех зол (или, по крайней мере, большей их части) в программировании».

Эта оригинальная цитата о преждевременной оптимизации была взята из книги, опубликованной очень давно, в 1960-х годах. Возможно, это было другое время, когда мейнфреймы и перфокарты были обычным явлением. Циклы обработки ЦП также были недостаточными.

Какое отношение преждевременная оптимизация имеет к сегодняшнему дню?

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

Ощущение преждевременной оптимизации по-прежнему актуально, и эта концепция применима к современной разработке. Преждевременная оптимизация — это то, о чем разработчики всегда должны думать. Это то, чего они всегда должны стараться избегать в своей повседневной работе. Сегодня это так же применимо, как и во времена мэйнфреймов и перфокарт.

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

Почему отзывы пользователей должны быть приоритетными

Лучший способ объяснить это простой историей. В настоящее время я работаю над побочным проектом, который связан с контент-маркетингом и измерением его эффективности. Для этого требуется сбор данных из Google Analytics и ручное сканирование страниц веб-сайта для создания некоторых информационных панелей отчетов.

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

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

Вещи, на которые я мог бы тратить время

Вместо того, чтобы сосредоточиться на том, чтобы сделать продукт правильным, я мог бы делать все это:

  • Оценка нескольких вариантов хранения всех данных Google Analytics, которые мне нужно собрать и запросить, которые могут быть «большими данными»
  • Как поставить в очередь и масштабировать огромное количество рабочих процессов для еженедельного сканирования всех страниц веб-сайта
  • Оценка необходимости использования многооблачного развертывания для обеспечения максимальной доступности
  • Выяснение того, как спроектировать продукт для размещения в нескольких центрах обработки данных по всему миру, когда я выйду на глобальный уровень
  • Обеспечение 100% покрытия тестами всего моего кода
  • Создание автоматизированных синтетических тестов

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

Ничто из этого не имеет значения… пока

Попытка улучшить использование Docker, Kubernetes, автоматизированного тестирования или непрерывного развертывания — определенно пустая трата времени, если я никому не отправляю это. «Мы не можем отправить быстро никому! Ура!»

Знаешь, что важно?

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

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

Почему отзывы о продукте являются приоритетом

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

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

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

Совет. Мгновенное обнаружение ошибок приложений и проблем с производительностью с помощью Stackify Retrace

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

Резюме

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

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

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

  • Об авторе
  • Последние сообщения

О Мэтте Уотсоне

Мэтт является основателем и генеральным директором Stackify. Он был разработчиком/хакером более 15 лет и любит решать сложные задачи с кодом. Работая в сфере управления ИТ, он понял, сколько времени он тратит впустую, пытаясь потушить производственные пожары без подходящих инструментов. Он основал Stackify в 2012 году, чтобы создать простой в использовании набор инструментов для разработчиков.

  • Retrace и Microsoft Application Insights: 14 причин выбрать Retrace — 25 октября 2021 г.
  • Как перехватить все исключения в C# и найти все ошибки приложений — 19 августа 2021 г.
  • Мониторинг веб-производительности: практическое руководство для разработчиков — 9 июля 2021 г.
  • Что такое NullReferenceException? Ссылка на объект не указывает на экземпляр объекта — 5 марта 2021 г.
  • Производительность ASP.NET: 9 типов инструментов, которые вам нужно знать! — 19 февраля 2021 г.

a-RetraceapmCTODDev LeadersDeveloperDevOpsDevOps LeadersPrefix

Почему это «корень всех зол» и как его избежать – Эффективность

 

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

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

 

Содержание

Примеры преждевременной оптимизации

Люди занимаются преждевременной оптимизацией разными способами и во многих сферах жизни. К ним относятся, например:

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

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

 

«Преждевременная оптимизация — корень всех зол»

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

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

В частности, Кнут популяризировал концепцию преждевременной оптимизации и поговорку о том, что преждевременная оптимизация является корнем всех зол в следующей цитате:

«Нет никаких сомнений в том, что святой Грааль эффективности ведет к злоупотреблениям. Программисты тратят огромное количество времени, думая или беспокоясь о скорости некритических частей своих программ, и эти попытки повысить эффективность на самом деле имеют сильное негативное влияние, когда речь идет об отладке и обслуживании. Мы должны забыть о малой эффективности, скажем, в 97% случаев: преждевременная оптимизация — корень всех зол.

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

— Из «Структурированного программирования с перейдите к операторам» (Кнут, 1974), выделено жирным шрифтом для выделения

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

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

Настоящая проблема заключается в том, что программисты тратят слишком много времени на беспокойство об эффективности в неподходящих местах и ​​в неподходящее время; преждевременная оптимизация — корень всех зол (или, по крайней мере, большей их части) в программировании.

Мы не должны быть мудрыми и глупыми, и мы не должны всегда думать об эффективности с точки зрения того, сколько процентов прибыли или потери в общем времени работы или пространстве. Когда мы покупаем автомобиль, многие из нас почти не обращают внимания на разницу в цене в 50 или 100 долларов, в то время как мы можем специально съездить в конкретный магазин, чтобы купить 50-центовую вещь всего за 25 центов. Я хочу сказать, что есть время и место для эффективности; Я обсуждал его надлежащую роль в своей статье о структурном программировании, опубликованной в текущем выпуске журнала 9.0023 Компьютерные исследования .

— Из книги «Компьютерное программирование как искусство» (Кнут, 1974 г. ), выделено жирным шрифтом для выделения. к утверждению «преждевременная оптимизация — корень всех зол» как изречение Хоара в 1989 году. Однако данные свидетельствуют о том, что Кнут был тем, кто придумал эту фразу.

Наконец, обратите внимание, что преждевременная оптимизация тесно связана с другими концепциями, включая принцип разработки программного обеспечения вам это не понадобится (YAGNI), что означает, что вы должны «всегда реализовывать вещи, когда они вам на самом деле нужны, никогда когда вы просто предвидите, что они вам нужны», и явление, при котором люди тратят непропорционально большое количество ресурсов на решение относительно незначительных проблем.

Примечание : Оптимизация также может быть проблематичной по другим причинам, помимо того, что она слишком ранняя, в том числе из-за того, что она бессмысленна (в том смысле, что она не помогает), предлагает низкую отдачу от инвестиций (в том смысле, что затраты на ее реализацию больше, чем ценность, которую он предлагает), и контрпродуктивны (в том смысле, что они вызывают больше проблем, чем решают). Эти дополнительные потенциальные проблемы в некоторой степени обсуждаются Кнутом, когда он упоминает преждевременную оптимизацию.

 

Опасности преждевременной оптимизации

Преждевременная оптимизация может привести к различным проблемам, в том числе:

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

 

Причины преждевременной оптимизации

Люди занимаются преждевременной оптимизацией по многим причинам, включая следующие:

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

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

 

Как избежать преждевременной оптимизации

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

  • Почему вы хотите оптимизировать? Например, считаете ли вы, что эта оптимизация будет иметь значимое положительное влияние, или вы просто сосредоточились на ней, чтобы отложить решение чего-то другого?
  • Каковы преимущества оптимизации? В частности, что вы получите от этой оптимизации как в краткосрочной, так и в долгосрочной перспективе?
  • Сколько стоит оптимизация? В частности, какие ресурсы вам нужно будет потратить на эту оптимизацию (например, время и деньги) и сколько из них вам нужно будет потратить?
  • Что еще вы могли бы сделать? Например, есть ли что-то более полезное, над чем вы могли бы работать?
  • Каковы потенциальные опасности оптимизации? Например, может ли это привести вас к неоптимальному курсу действий, потому что у вас еще нет достаточной информации?
  • Насколько вероятно, что эта оптимизация станет неактуальной? Тот факт, что это может стать неактуальным, не означает, что вы не должны над этим работать, но эту возможность следует учитывать, как и сопутствующие факторы (например, преимущества оптимизации до того, как она станет неактуальной).
  • Каковы преимущества и недостатки ожидания с этой оптимизацией? Например, возможно ли, что ждать с этой оптимизацией до следующей недели, когда у вас будет больше информации, не будет никаких недостатков?

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

Это предостережение отмечено в исходной цитате, которая популяризировала концепцию преждевременной оптимизации, в которой говорится, что «Мы должны забыть о малой эффективности, скажем, примерно в 97% случаев: преждевременная оптимизация — корень всех зол. Тем не менее, мы не должны упускать наши возможности в отношении этих критических 3%».

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

Примечание . При определении того, следует ли вам что-то оптимизировать, полезно учитывать правило 80/20 (также известное как принцип Парето ), которое в данном контексте означает, что 80 % положительных результатов, которые вы опыт будет зависеть от 20% работы, которую вы делаете.

 

Резюме и выводы

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