Це тому, що всі вони написані керованими, зібраними сміттям мовами, а не рідним кодом?
Ні. Повільний код буде працювати погано незалежно. Звичайно, певна мова може вводити певні класи проблем під час вирішення інших. Але хороші програмісти цілком здатні знайти обхідні проблеми, даючи достатньо часу.
Це окремі програмісти написали програмне забезпечення для цих пристроїв?
Частково. У багатьох випадках це цілком ймовірно, щонайменше, сприяючий фактор. Це невдалий побічний ефект галузі, де хороші програмісти користуються великим попитом і дефіцитом. Також затоки між різними рівнями технічних можливостей можуть бути досить великими. Тож без сумніву, що іноді програмістів, які мають завдання впровадити певне програмне забезпечення, можна привітати лише за те, що він налагодив його (на зразок).
У всіх цих випадках розробники додатків точно знали, на яку апаратну платформу вони націлені та які її можливості; вони не врахували це?
Частково. Для початку точна апаратна платформа, напевно, не відома, оскільки про це часто домовляються з різними виробниками паралельно під час розробки програмного забезпечення. Насправді можуть бути навіть невеликі (але не обов'язково незначні) зміни базового обладнання після первинного випуску. Однак я погодився б, що загальні можливості будуть відомі.
Частина проблеми полягає в тому, що програмне забезпечення, ймовірно, не розробляється на апаратному забезпеченні, це робиться в емуляторах. Це ускладнює облік справжньої продуктивності пристрою, навіть якщо емулятори на 100% точні - чого вони не є.
Звичайно, це насправді не виправдовує недостатнє тестування відповідного обладнання для прототипу перед випуском. Ця провина, ймовірно, лежить поза контролем dev / qa.
Це той хлопець, який ходить навколо, повторюючи "оптимізація - корінь усього зла", чи зводив їх із збитків?
Ні. Я впевнений, що його все одно не слухають; інакше його не так часто цитують (це, мабуть, " передчасна оптимізація ..."). :-D
Більш ймовірно, що занадто багато програмістів приймають одну з двох крайнощів щодо оптимізації.
- Або вони або ігнорують його повністю.
- Або вони одержимі дрібницями, що не мають нічого спільного з фактичними вимогами до продуктивності. Чистий ефект полягає в тому, що бюджет закінчується, а код занадто затуманений, щоб безпечно оптимізувати реальні проблеми з продуктивністю.
Це був менталітет "о, це просто додаткові 100 мс" кожного разу, поки всі ці мілісекунди не складуть хвилин?
Можливо. Очевидно, якщо Sleep(100)
його використовували як еквівалент тканинного паперу, який використовується для уповільнення кровотечі відірваної кінцівки - тоді очікувати проблем слід. Однак я підозрюю, що проблема є більш тонкою, ніж ця.
Справа в тому, що сучасне обчислювальне обладнання (в тому числі вбудовані пристрої) відбувається набагато швидше, ніж люди їм дають заслугу. Більшість людей, навіть «досвідчені» програмісти, не в змозі оцінити, наскільки швидко працюють комп'ютери. 100 мс - це довго - дуже довго . І як це відбувається, цей "дуже довгий час" скорочує 2 способи:
- Перший полягає в тому, що програмісти непотрібно турбуються про те, що комп'ютер робить надзвичайно швидко. (Так трапляється, що саме таке занепокоєння " збільшення значення в 300 разів за секунду " призвело мене сюди насамперед.)
- Друга полягає в тому, що вони часом не виявляють належної стурбованості, коли справи займають дуже довго (на часовій шкалі обчислень). Так:
- якщо вони ігнорують наслідки затримки під час спілкування по мережі або із пристроєм зберігання даних;
- якщо вони ігнорують вплив заблокованої нитки і чекають чергової нитки;
- якщо вони забудуть, що так як комп'ютери працюють так швидко, він дуже здатний повторити завдання набагато частіше, ніж слід, не розробник усвідомлює проблему
- ... якщо виникає будь-яке поєднання таких оглядів, рутина буде несподівано працювати дуже повільно (на часовій шкалі обчислень). Кілька повторень, і це навіть буде помітно людям, - але, можливо, буде складно виправити, тому що сотні взаємопов’язаних речей швидко працюють самі по собі.
Чи я винен, що в першу чергу придбав ці продукти?
Так, звичайно. Ну, не ви особисто, а споживачі взагалі. Продукти продаються (і купуються ) контрольними списками. Занадто мало споживачів вимагають кращих показників роботи.
Щоб проілюструвати мою думку: Востаннє, коли я хотів придбати мобільний телефон, магазин навіть не міг запропонувати демонстраційну модель, щоб грати з магазином. Все, що вони мали, - це пластикові оболонки з наклейками, щоб показати, як виглядатиме екран. Ви навіть не можете відчути таку вагу - не кажучи вже про продуктивність чи зручність використання. Моя думка полягає в тому, що якби достатньо людей заперечувало проти цієї бізнес-моделі і проголосувало за допомогою своїх гаманців, щоб висловити своє заперечення, ми зробили б один невеликий крок у правильному напрямку.
Але вони цього не роблять, тому ми і не; і з кожним роком нові мобільні телефони працюють повільніше на швидшому апаратному забезпеченні.
(Питання не задаються.)
- Чи винні люди з маркетингу? Частково. Їм потрібні дати випуску. І коли зазначена дата наступає, вибір між "примушувати її працювати" та "зробити це швидше" - не потрібний.
- Чи винні у цьому торгові люди? Частково. Вони хочуть отримати більше функцій у контрольному списку. Вони перекручують списки функцій і ігнорують продуктивність. Вони (іноді) дають нереалістичні обіцянки.
- Чи винні менеджери? Частково. Недосвідчені менеджери можуть допустити багато помилок, але навіть дуже досвідчені менеджери можуть (цілком справедливо) принести в жертву час для вирішення проблем ефективності на користь інших проблем.
- Чи винні специфікації? Частково. Якщо щось залишається поза специфікацією, про це набагато простіше "забути" згодом. І якщо конкретно не зазначено, яка мета? (Хоча я особисто вважаю, що якщо команда пишається своєю роботою, вони б турбувалися про результати роботи незалежно.)
- Чи винна освіта? Можливо. Навчання, ймовірно, завжди буде на ногах. Я, безумовно, не схвалюю "освіту", яка швидко витісняє початківців з поверхневим розумінням розробки програмного забезпечення. Однак освіта, яка підкріплена теорією і прищеплює культуру навчання, не може бути поганою.
- Чи винні оновлення? Частково. Нове програмне забезпечення, стара апаратура справді спокушає долю. Ще до виходу версії X планується X + 1. Нове програмне забезпечення сумісне, але чи є старе обладнання досить швидким? Це було випробувано? Конкретне виправлення продуктивності може бути включено в нове програмне забезпечення - заохочуючи необдумане оновлення програмного забезпечення.
В основному, я вважаю, що багато факторів, що сприяють цьому. Тож, на жаль, немає срібної кулі, яка б її виправити. Але це не означає, що це приреченість і похмурість. Є способи сприяти покращенню речей.
Отже, в який момент справи пішли не так у цих продуктів?
ІМХО, ми не можемо реально визначити жодну точку. Існує багато факторів, що сприяють розвиткові.
- Лічильники квасолі: скорочення витрат, ринкові терміни. Але знову ж таки ми зробили б аванси, які ми досягли без тиску?
- Високий попит і низький попит кваліфікованих працівників галузі. Не лише програмісти, а й менеджери, тестери та навіть продавці. Відсутність навичок та досвіду призводить до помилок. Але знову ж таки це призводить і до навчання.
- Найкраща технологія. Поки технологія не дозріє, вона буде регулярно кусатися несподіваними способами. Але потім знову ж таки це найчастіше дало низку переваг.
- Складне ускладнення. З часом галузь розвивалася: додавали більше інструментів, технологій, шарів, технік, абстракцій, апаратних засобів, мов, варіацій, варіантів. Це робить дещо неможливим «повне» розуміння сучасних систем. Однак ми також здатні зробити набагато більше за набагато коротший час.
Що ми можемо зробити як програмісти, щоб не завдати цього болю власним клієнтам?
У мене є кілька пропозицій (як технічних, так і нетехнічних), які можуть допомогти:
- Наскільки це можливо, використовуйте власний продукт. Немає нічого, як досвід з перших рук, щоб розкрити незручні, повільні або незручні речі. Однак вам потрібно буде свідомо уникати обходу недоліків через "інсайдерські знання". Наприклад, якщо у вас немає проблем із синхронізацією контактів, оскільки ви робите це із заднім сценарієм Python - ви не використовуєте "продукт". Що підводить наступний момент ...
- Слухайте своїх користувачів (бажано, з перших рук, але принаймні з другої руки через підтримку). Я знаю, що програмісти (як правило) вважають за краще ховатися подалі і уникати взаємодії з людьми; але це не допомагає виявити проблеми, які виникають інші люди під час використання вашого продукту. Наприклад, ви можете не помітити, що параметри меню повільні, оскільки ви знаєте всі ярлики і використовуєте їх виключно. Навіть якщо в посібнику повністю задокументовано всі ярлики, деякі люди все одно віддадуть перевагу меню - незважаючи на те, що вони є недостатньо повільними.
- Прагніть постійно вдосконалювати свої технічні навички та знання. Розвивайте вміння критично аналізувати все, що ви дізнаєтесь. Регулярно переоцінюйте свої знання. У деяких випадках будьте готові забути те, що ви думали, що знаєте. Що виховує ...
- Деякі технології / методи можуть бути дуже хитрими, що призводять до тонких непорозумінь та неправильної реалізації. Інші, завдяки еволюції загальних знань чи доступних інструментів, можуть вийти на користь або вийти з неї (наприклад, Singletons). Деякі теми настільки хитрі, що вони розмножують купу "hocus-pocus pundits", які розповсюджують величезну частину дезінформації. Особливим моїм помилкою є дезінформація навколо багаторізкових різьб. Хороша багатопотокова реалізація може значно покращити роботу користувачів. На жаль, багато дезінформованих підходів до багатопотокової роботи значно знизять продуктивність, збільшать помилкові помилки, збільшать ризики мертвих блокувань, ускладнять налагодження тощо. Тому пам’ятайте: тільки тому, що це сказав експерт, це не робить це правдою.
- Взяти на себе право власності. (Ні серйозно, я не граю в бінго зал.) Ведіть переговори з менеджерами, власниками продуктів, продавцями щодо функцій, які мають перевагу над деякими пунктами контрольного списку. Вимагайте кращих технічних характеристик. Не по-дитячому, а задаючи питання, які змушують людей замислюватися про продуктивність.
- Будьте вимогливим споживачем. Виберіть телефон, у якого менше функцій, але він швидший. (Не швидший процесор, швидший інтерфейс користувача.) Потім похвалитися цим ! Чим більше споживачів починають вимагати продуктивності, тим більше лічильників бобів почнуть складати бюджет.