Является ли ошибка при чтении кода очевидностью?

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

Если говорить, я не могу не вспомнить программы, которые запускались пару лет назад, такие как Winamp или некоторые игры, в которых вам нужна была высокопроизводительная программа, потому что ваш 486 100 МГц не воспроизводит mp3 с этой красивой mp3-плеер, который потреблял все ваши циклы процессора.

Теперь я запускаю Media Player (или что-то еще), начинаю играть в mp3, и он съедает 25-30% одного из моих четырех ядер. Давай!! Если 486 может это сделать, как можно воспроизвести так много процессора, чтобы сделать то же самое?

Я сам разработчик, и я всегда советовал: сохраняйте свой код простым, преждевременно не оптимизируя производительность. Кажется, что мы перешли от "попытки максимально использовать наименьшее количество процессоров" до ", если он не требует слишком большого количества CPU.).

Итак, как вы думаете, мы убиваем производительность, игнорируя оптимизацию?

Ответ 1

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

Ответ 2

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

Ответ 3

Если вы поклонник winamp, вам может понравиться прочитать эту замечательную статью о Justin Frankel интересные времена в AOL после того, как AOL купила WinAmp.

Его последний продукт Reaper.

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

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

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

Ответ 4

В частности, что касается mp3-плеера, вы, вероятно, не похожи друг на друга. Ваш старый 486 mp3-плеер мало что делал, но играл в mp3, Media Player несет в себе всю загрузку трещин, занимающихся причудливыми эффектами, аэро-интерфейсом и всем этим. Не говоря уже о том, что он, вероятно, звонит домой и еще десяток других мест на планете, чтобы сообщить Microsoft о том, что вы тоже перечисляете: -)

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

Ответ 5

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

Ответ 6

Хороший код может быть быстрым. Проблема может быть много:

  • Языки более высокого уровня значительно облегчают время разработки, но могут стоить процессорное время. Для большого количества приложений это отличный компромисс.
  • Программисты не так образованы по алгоритмам, каким они были раньше - это может быть связано с языками высокого уровня, так как люди просто используют свой язык встроенный sort() вместо выбора быстрой сортировки по сортировке вставки
  • Приложения теперь делают намного больше. Я уверен, что Media Player имеет больше возможностей, чем старая версия WinAmp.

Я бы не сказал, что быстрый код мертв. Для контрпримеров посмотрите код операционной системы (на ум приходит список планировщика O (1) в Linux) и, конечно же, код игры.

Ответ 7

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

Ответ 8

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

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

Ответ 9

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

Ответ 10

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

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

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

Приветствия,

-R