Профилировщики помогают исправить плохую интуицию, когда дело доходит до кода. Учитывая то, сколько аппаратного обеспечения предсказывает в наши дни, нецелесообразно с человеческой точки зрения прогнозировать производительность вашего кода, но это было даже верно во времена Кнута, так много десятилетий назад, который выступал за то, чтобы профилировщики были включены в качестве стандартных инструментов разработки для исправления ошибок. «безумно глупый» характер разработчиков. Но я собираюсь пойти другим путем с этим ответом, учитывая, насколько исчерпывающими являются ответы в других отношениях, и сказать, что понимание на стороне пользователя - это еще одно «исправление».
На моем личном опыте я был свидетелем того, как особенно блестящий разработчик (но с пробелами в том, как пользователи на самом деле используют программное обеспечение) оптимизировал алгоритм подразделения с помощью профилировщика (очень хороший, дорогой и всеобъемлющий: VTune от Intel с графом вызовов). выборка поверх профилировщиков графических процессоров) для сеток позволяет добиться удивительных результатов при использовании миллиардов граней в графическом процессоре при разделении простых примитивов, таких как кубы, с 6 клеточными / входными полигонами. За исключением того, что он настроил и настроил его на тот тестовый пример, который был непохож на любой реальный пример использования (пользователи не хотят, чтобы миллиард граней к подразделенному кубу начинал напоминать идеальную сферу, их входные данные подразделения, как правило, похожи на символы и транспортные средства и другие сложные входы).
Как ни странно, я продвинулся вперед с умом, наполовину таким же функциональным, как у него, и без докторской степени в моей карьере по той простой причине, что я понимал, чего хотят пользователи, чего хотят маркетинг, чего хотят дизайнеры. Я не могу особо подчеркнуть, насколько полезно быть в состоянии поставить себя на место пользователя и взглянуть на свое программное обеспечение и на то, что оно должно делать в качестве реальных пользователей, стремясь отделить себя от усилий, которые вы прикладываете. в построение того, что вы построили, и глядя на него свежим взглядом. Я даже столкнулся с разработчиком выше, что это невозможно сделать; он думал, что я виновен в том, что у меня было такое же эго, которое есть у всех технически подкованных, но не обращающих на себя внимание разработчиков, и я постоянно доказывал, что он неправ, когда пользователи и дизайнеры стекаются ко мне, чтобы поговорить о том, что делать. Это звучит очень эгоистично, но я уравняю это с заявлением об отказе от ответственности, что я не такой блестящий программист, но я понимаю, чего хотят пользователи и дизайнеры, и это сделало меня особенно любимым в моей области, где это казалось особенно редким качество по какой-то причине. Как программисты, мы, вероятно, больше привыкли к проведению тестов, чем к пониманию и общению с обычными нетехническими людьми.
Так что есть профилирование и правильное измерение, но также есть фундаментальная необходимость убедиться, что вы измеряете операцию с типом входных данных, которые реальные пользователи фактически предоставят приложению. В противном случае вы даже можете иметь VTune или CodeAnalyst, или gprof, или любой другой профилировщик в руках, и все же, пытаясь оптимизировать горячие точки в соответствии с тем, что может показаться разработчикам обычным тестовым примером, но непонятным для пользователей, в конечном итоге пессимизация общего варианта использования в пользу какого-то непонятного варианта использования, который лишь немногие пользователи, если таковые вообще имеются, рассматривают возможность подачи заявки
В конце концов, все недостатки, которые мы, как правило, несем, поскольку разработчики могут быть сбалансированы с железным молотом того, что делает пользователей действительно счастливыми, не решая проблему голода в мире, и практической необходимости получать деньги, чтобы мы могли платить за аренду или покупать пиво или посмотрите на голых дам или на то, что вы хотите / должны сделать. Все остальное потенциально работает против этой фундаментальной потребности бизнеса, и любой разработчик, настолько благородный, такой героический, что забывает, что речь идет о зарабатывании денег и, в конечном итоге, удовлетворении пользователей, заставляющих их платить, мог бы принести себя на землю. и отключить режим бога, создавая виртуальные миры в пользу реальной необходимости просто отправлять и получать немного денег на еду. Мы можем потеряться в метриках и методах программного обеспечения, но, по сути, это так ».