Это потому, что все они написаны на управляемых языках, а не на собственном коде?
Нет. Медленный код будет работать плохо независимо. Конечно, определенный язык может создавать определенные классы проблем при решении других. Но хорошие программисты вполне способны найти обходные пути, если у них достаточно времени.
Это отдельные программисты, которые написали программное обеспечение для этих устройств?
Частично. Во многих случаях это вполне вероятно, по крайней мере, способствующий фактор. Это неблагоприятный побочный эффект для отрасли, где хорошие программисты пользуются большим спросом и испытывают нехватку. Также пропасти между различными уровнями технических способностей могут быть довольно большими. Поэтому понятно, что иногда программисты, которым поручено внедрить определенное программное обеспечение, можно было бы поздравить только за то, что оно заработало (вроде как).
Во всех этих случаях разработчики приложений точно знали, на какую аппаратную платформу они нацелены и каковы ее возможности; они не приняли это во внимание?
Частично. Для начала, точная аппаратная платформа, вероятно, неизвестна, так как об этом часто договариваются с различными производителями параллельно во время разработки программного обеспечения. Фактически, после первоначального выпуска могут даже быть небольшие (но не обязательно незначительные) изменения в базовом оборудовании. Однако я бы согласился, что общие возможности будут известны.
Частично проблема заключается в том, что программное обеспечение, вероятно, разработано не на оборудовании, а на эмуляторах. Это затрудняет учет истинной производительности устройства, даже если эмуляторы на 100% точны, а это не так.
Конечно, это не оправдывает недостаточное тестирование на соответствующем прототипе оборудования перед выпуском. Эта вина, вероятно, лежит вне контроля dev / qa.
Это тот парень, который повторяет «оптимизация - корень зла», он сбил их с пути?
Нет, я почти уверен, что они его не слушают; в противном случае его не так часто цитировали бы (это считается « преждевременной оптимизацией ...»). :-D
Скорее всего, слишком много программистов принимают одну из двух крайностей в отношении оптимизации.
- Либо они либо полностью игнорируют это.
- Или они одержимы мелочами, которые не имеют ничего общего с фактическими требованиями к производительности. Чистый эффект заключается в том, что бюджет исчерпан, а код слишком запутан, чтобы безопасно оптимизировать реальные проблемы с производительностью.
Было ли это менталитетом «о, это просто дополнительные 100 мсек» каждый раз, пока все эти миллисекунды не складываются в минуты?
Возможно. Очевидно, что если Sleep(100)
он использовался в качестве эквивалента папиросной бумаги, используемой для замедления кровотечения отрубленной конечности - тогда следует ожидать проблем. Тем не менее, я подозреваю, что проблема более тонкая, чем эта.
Дело в том, что современное компьютерное оборудование (включая встроенные устройства) намного быстрее, чем люди считают. Большинство людей, даже «опытных» программистов, не понимают, насколько быстры компьютеры. 100 мс это долгое время - очень долгое время . И как это происходит, это «очень долгое время» сокращает 2 пути:
- Во-первых, программисты без необходимости беспокоятся о том, что компьютер делает чрезвычайно быстро. (Так получилось, что именно эта проблема « увеличения значения 300 раз в секунду » привела меня сюда во-первых.)
- Во-вторых, они иногда не проявляют должной заботы, когда вещи занимают очень много времени (в вычислительном масштабе). Так:
- если они игнорируют эффекты задержки при обмене данными по сети или с устройством хранения данных;
- если они игнорируют влияние заблокированного потока и ожидают другого потока;
- если они забывают об этом, поскольку компьютеры работают так быстро, то они способны повторять задачу гораздо чаще, чем следовало бы, и разработчик не осознает проблему
- ... если произойдет какая-либо комбинация таких упущений, подпрограмма неожиданно будет выполняться очень медленно (в масштабе времени вычислений). Несколько повторений, и это будет даже заметно для людей - но может быть сложно определить, потому что сотни взаимосвязанных вещей работают быстро сами по себе.
Это моя вина, что я купил эти продукты?
Да, безусловно. Ну, не вы лично, а потребители в целом. Продукты продаются (и покупаются ) по контрольным спискам функций. Слишком мало потребителей требуют лучшей производительности.
Чтобы проиллюстрировать мою точку зрения: в последний раз, когда я хотел купить мобильный телефон, магазин не мог даже предложить демо-модель для игры в магазине. Все, что у них было, это пластиковые ракушки с наклейками, чтобы показать, как будет выглядеть экран. Вы даже не можете почувствовать такой вес - не говоря уже о производительности или удобстве использования. Я хочу сказать, что если бы достаточное количество людей возразило против этой бизнес-модели и проголосовало бы со своими кошельками, чтобы высказать свое возражение, мы были бы одним маленьким шагом в правильном направлении.
Но они не, так что мы не; и каждый год новые мобильные телефоны работают медленнее на более быстром оборудовании.
(Вопросы не заданы.)
- Виноваты ли маркетологи? Частично. Им нужны даты выхода. И когда вырисовывается указанная дата, выбор между «заставить его работать» и «сделать это быстрее» не составляет никакого труда.
- Виноваты ли продавцы? Частично. Они хотят больше функций в контрольном списке. Они раскручивают списки функций и игнорируют производительность. Они (иногда) дают нереальные обещания.
- Виноваты ли менеджеры? Частично. Неопытные менеджеры могут совершать много ошибок, но даже очень опытные менеджеры могут (совершенно справедливо) пожертвовать временем, чтобы решить проблемы производительности в пользу других.
- Виноваты ли спецификации? Частично. Если что-то упущено из спецификации, гораздо легче «забыть» об этом позже. И если конкретно не указано, какова цель? (Хотя я лично считаю, что если команда будет гордиться своей работой, она все равно будет беспокоиться о производительности.)
- Виновато ли образование? Может быть. Образование, вероятно, всегда будет на заднем плане. Я, конечно, не одобряю «образование», которое быстро производит новичков с поверхностным пониманием разработки программного обеспечения. Однако образование, опирающееся на теорию и прививающее культуру обучения, не может быть плохим.
- Виноваты ли обновления? Частично. Новое программное обеспечение, старое оборудование действительно искушает судьбу. Даже до выпуска версии X, X + 1 находится в планировании. Новое программное обеспечение совместимо, но достаточно ли старого оборудования достаточно быстро? Было ли это проверено? Конкретное исправление производительности может быть добавлено в новое программное обеспечение - поощрение необоснованного обновления программного обеспечения
По сути, я считаю, что есть много способствующих факторов. Так что, к сожалению, нет серебряной пули, чтобы это исправить. Но это не значит, что это гибель и мрак. Есть способы внести свой вклад в улучшение вещей.
Итак, в какой момент все пошло не так для этих продуктов?
ИМХО, мы не можем определить какую-то одну точку. Есть много способствующих факторов, которые развивались с течением времени.
- Бин счетчики: сокращение затрат, сроки рынка. Но опять же мы бы сделали успехи, которых мы достигли без давления?
- Высокий спрос и низкое предложение квалифицированных людей в отрасли. Не только программисты, но и менеджеры, тестировщики и даже продавцы. Недостаток навыков и опыта приводит к ошибкам. Но опять же, это также приводит к обучению.
- Новейшие технологии. Пока технология не станет зрелой, она будет регулярно кусаться неожиданными способами. Но с другой стороны это часто обеспечивало ряд преимуществ в первую очередь.
- Сложное осложнение. Со временем индустрия развивалась: добавляя больше инструментов, технологий, слоев, техник, абстракций, аппаратного обеспечения, языков, вариантов, опций. Это делает несколько невозможным «полное» понимание современных систем. Тем не менее, мы также можем сделать гораздо больше за гораздо более короткое время.
Что мы, программисты, можем сделать, чтобы избежать причинения этой боли нашим собственным клиентам?
У меня есть несколько предложений (как технических, так и нетехнических), которые могут помочь:
- На диванах как можно - используйте свой продукт. Нет ничего лучше, чем опыт из первых рук, чтобы выявить неловкие, медленные или неудобные вещи. Однако вам нужно будет сознательно избегать недостатков из-за «инсайдерских знаний». Например, если у вас нет проблем с синхронизацией контактов, потому что вы делаете это с помощью скрипта Python для бэкдора - вы не используете «продукт». Что поднимает следующий вопрос ...
- Слушайте своих пользователей (желательно из первых рук, но по крайней мере из вторых рук через службу поддержки). Я знаю, что программисты (как правило) предпочитают скрываться и избегать взаимодействия с людьми; но это не поможет вам обнаружить проблемы, с которыми сталкиваются другие люди при использовании вашего продукта. Например, вы можете не заметить, что пункты меню медленные, потому что вы знаете все ярлыки и используете их исключительно. Даже если в руководстве полностью документированы все сочетания клавиш, некоторые люди все равно предпочитают меню - несмотря на то, что оно невыносимо медленное.
- Стремитесь постоянно улучшать свои навыки и знания в технике. Развивайте умение критически анализировать все, что вы изучаете. Регулярно переоценивайте свои знания. В некоторых случаях будьте готовы забыть то, что, как вы думали, вы знали. Который воспитывает ...
- Некоторые технологии / методы могут быть очень хитрыми, приводя к тонким недоразумениям и неправильным реализациям. Другие в процессе эволюции общих знаний или доступных инструментов могут оказаться в фаворе или в немилости (например, синглтоны). Некоторые темы настолько хитры, что порождают кучку «фокусных мудрецов», которые распространяют огромное количество дезинформации. Мой особенный багбир - дезинформация о многопоточности. Хорошая многопоточная реализация может значительно улучшить пользовательский опыт. К сожалению, многие дезинформированные подходы к многопоточности значительно снизят производительность, увеличат ошибочные ошибки, увеличат риски взаимоблокировок, усложнят отладку и т. Д. Так что помните: только потому, что «эксперт» сказал это, это не так.
- Стать владельцем. (Не серьезно, я не играю в бинго в зале заседаний.) Ведите переговоры с менеджерами, владельцами продуктов, менеджерами по продажам о функциях производительности, имеющих приоритет над некоторыми элементами контрольного списка. Требуйте лучших спецификаций. Не по-детски, но задавая вопросы, которые заставляют людей задуматься о производительности.
- Быть взыскательным потребителем. Выберите телефон, который имеет меньше функций, но работает быстрее. (Не быстрее процессора, быстрее пользовательского интерфейса.) Тогда похвастаться этим ! Чем больше потребителей начнут требовать производительности, тем больше счетчиков бинов начнут составлять бюджет.