Mój Comcast DVR potrzebuje co najmniej trzech sekund, aby zareagować na każde naciśnięcie przycisku na pilocie zdalnego sterowania, co sprawia, że proste zadanie oglądania telewizji staje się frustrującą rozrywką przycisków. Mój iPhone zajmuje co najmniej piętnaście sekund, aby wyświetlać wiadomości tekstowe i ulega awarii ¼ razy, gdy próbuję uruchomić aplikację iPoda; samo otrzymanie i przeczytanie wiadomości e-mail często zajmuje znacznie dłużej niż minutę. Nawet navcom w moim samochodzie ma brudne i nie reagujące sterowanie, często połykając kolejne sygnały wejściowe, jeśli dokonam ich w odstępie krótszym niż kilka sekund.
Są to urządzenia stacjonarne dla użytkowników końcowych, dla których użyteczność powinna być najważniejsza, a jednak wszystkie zawodzą przy podstawowym czasie reakcji i opóźnieniu. Ich oprogramowanie jest po prostu zbyt wolne .
Co za tym stoi? Czy to problem techniczny czy społeczny? Kto lub co jest odpowiedzialne?
Czy to dlatego, że wszystkie zostały napisane w zarządzanych, odśmiecanych językach zamiast w natywnym kodzie? Czy to programiści napisali oprogramowanie dla tych urządzeń? We wszystkich tych przypadkach twórcy aplikacji wiedzieli dokładnie, na którą platformę sprzętową są kierowani i jakie są jej możliwości; czy nie wzięli tego pod uwagę? Czy to ten facet, który krąży w kółko powtarzając: „optymalizacja jest źródłem wszelkiego zła”, czy sprowadził ich na manowce? Czy to mentalność „och, to tylko dodatkowe 100 ms” za każdym razem, aż wszystkie milisekundy sumują się w minutach? Czy to moja wina, że kupili te produkty w pierwszej kolejności?
To subiektywne pytanie, bez jednej odpowiedzi, ale często denerwuję się, widząc tak wiele odpowiedzi tutaj, mówiąc: „och, nie martw się szybkością kodu, wydajność nie ma znaczenia”, kiedy wyraźnie w pewnym momencie ma to znaczenie dla użytkownik końcowy, który utknął z powolnym, niereagującym i okropnym doświadczeniem.
Więc w którym momencie coś poszło nie tak z tymi produktami? Co my, programiści, możemy zrobić, aby uniknąć zadawania bólu naszym klientom?
źródło
Odpowiedzi:
Dobre pytanie. Widzę to codziennie.
Ludzie pracują nad aplikacjami dobrej wielkości. Gdy działają, pojawiają się problemy z wydajnością, podobnie jak błędy. Różnica polega na tym, że błędy są „złe” - krzyczą „znajdź mnie i napraw mnie”. Problemy z wydajnością po prostu siedzą i stają się coraz gorsze. Programiści często myślą: „Cóż, mój kod nie miałby problemu z wydajnością. Raczej zarząd musi kupić mi nowszą / większą / szybszą maszynę”.
Faktem jest, że jeśli programiści okresowo polują na problemy z wydajnością (co w rzeczywistości jest bardzo łatwe ), mogą po prostu je usunąć.
Zamiast tego „stan techniki” to:
Ale tak naprawdę to jest negatywne. Mówiąc pozytywnie, ta metoda działa prawie cały czas i nie może być prostsza. Oto szczegółowy przykład .
źródło
To nie jest problem techniczny, to problem z marketingiem i zarządzaniem.
W tym momencie możesz przewracać oczami, ale proszę o wyrozumiałość.
To, co firma sprzedaje, to „produkt”, a ludzie, którzy definiują, co to jest, to „menedżer produktu”. W firmach technicznych bierze to pod uwagę wiele innych osób - eksperci od doświadczeń użytkowników, yadda yadda. Ale ostatecznie menedżerowie produktu są odpowiedzialni za napisanie specyfikacji tego, co użytkownik powinien otrzymać.
Weźmy twój rejestrator Comcast. Idealnie byłoby, gdyby działało to tak:
Oczywiście wiele rzeczy może się nie udać:
Widziałeś tam wszystkich niezdecydowanych programistów? Nie było żadnych.
Nie twierdzę, że nie ponosimy żadnej odpowiedzialności za niską wydajność - często pisanie dobrego, solidnego i wydajnego kodu jest tak samo łatwe i szybkie, jak pisanie śmieci.
Ale tak naprawdę, jeśli kierownictwo produktu i pracownicy kontroli jakości śpią za kierownicą, my, programiści, nie możemy tego nadrobić.
FWIW, całkowicie zgadzam się co do fatalnych interfejsów większości produktów konsumenckich. Piszę teraz kod interfejsu użytkownika od około 25 lat i dążę do elegancji i prostoty. W rzeczywistości jest to problem, ponieważ tak dużo o tym myślę, teraz nie mogę znaleźć źle zaprojektowanych interfejsów użytkownika, więc moja biedna żona kończy większość urządzeń w naszym centrum medialnym.
źródło
Ponieważ programiści nie są doskonali.
Jestem programistą osadzonych rzeczy. Część mojego kodu nie jest idealna. Większość mojego osadzonego kodu jest szybka.
Naprawienie problemów z wydajnością na końcu projektu jest bardzo trudne.
Czasami, aby uprościć (a zatem przetestować, opracować w realistycznym czasie, a nie fatalnie buggy) nakładamy różne warstwy, takie jak zdalne wprowadzanie do „usługi”, która nie jest częścią głównej aplikacji. Wynik końcowy, opóźnienie. Alternatywą jest umieszczenie wszystkiego w monolitycznej aplikacji, która jest wadliwą katastrofą w C lub C ++ (dwa najczęściej osadzane języki).
Czasami twoje urządzenie wbudowane ma harmonogram procesu, który nie robi tego, co chce użytkownik. Cholernie trudne do naprawienia jako programista osadzony.
Złożoność powoduje opóźnienie z powodu opóźnienia w nakładaniu warstw. Poprosiłeś o funkcje. Wypróbuj naprawdę starą Nokię, jak stara 3210. Szybki interfejs użytkownika. Niewiele funkcji.
Twierdzę, że programiści nie są mądrzejsi, więc szybszy sprzęt jest pochłaniany przez abstrakty, aby zapobiec wzajemnemu zabijaniu się funkcji. (Lub nie, w przypadku twojego iPhone'a)
Wydajność interfejsu użytkownika musi być wymogiem testowania w miarę postępu projektowania.
Jeśli nie zostanie określony, programista przyzwyczai się do tego. Wszyscy to robimy. „Moje dziecko nie jest brzydkie”
I to nie są języki GC; osadzona Realtime Java jest tak szybka, że przerażająca. (Z drugiej strony osadzony Python jest totalnym psem)
Piszę program, który odczytuje przełączniki na wejściach cyfrowych jako interfejs użytkownika. Nadal muszę odbić przełącznik, więc naprawdę szybkie jego dotknięcie nie działa, ponieważ odbijanie ma kilka warstw w górę. Idealnie byłoby mieć logikę odbijania na dole stosu oprogramowania układowego, ale nie tak działa sprzęt.
Niektóre odtwarzacze DVD po prostu uruchamiają skrypt „wysuwania”, aby wykonać wysuwanie. Twój DVR mógł zastosować to podejście, aby utrzymać rozsądne koszty rozwoju. Następnie oszczędzasz procesor lub pamięć RAM i jest do bani.
źródło
Czy to dlatego, że wszystkie zostały napisane w zarządzanych, odśmiecanych językach zamiast w natywnym kodzie?
Nie. Powolny kod niezależnie od tego będzie działał słabo. Oczywiście, określony język może wprowadzać pewne klasy problemów podczas rozwiązywania innych. Ale dobrzy programiści są w stanie znaleźć obejścia, mając wystarczająco dużo czasu.
Czy to programiści napisali oprogramowanie dla tych urządzeń?
Częściowo. W wielu przypadkach jest to prawdopodobnie co najmniej jeden czynnik. Jest to niefortunny efekt uboczny branży, w której dobrzy programiści są bardzo poszukiwani i mają małą podaż. Również przepaść między różnymi poziomami umiejętności technicznych może być dość duża. Jest więc oczywiste, że czasami programiści, którym powierzono zadanie wdrożenia określonego oprogramowania, mogą pogratulować tylko za jego uruchomienie (w pewnym sensie).
We wszystkich tych przypadkach twórcy aplikacji wiedzieli dokładnie, na którą platformę sprzętową są kierowani i jakie są jej możliwości; czy nie wzięli tego pod uwagę?
Częściowo. Po pierwsze, dokładna platforma sprzętowa prawdopodobnie nie jest znana, ponieważ często jest ona negocjowana równolegle z różnymi producentami podczas opracowywania oprogramowania. W rzeczywistości mogą wystąpić nawet niewielkie (ale niekoniecznie nieznaczne) zmiany w sprzęcie bazowym po początkowej wersji. Zgadzam się jednak, że ogólne możliwości będą znane.
Część problemu polega na tym, że oprogramowanie prawdopodobnie nie jest opracowywane na sprzęcie, odbywa się to w emulatorach. Utrudnia to rozliczenie prawdziwej wydajności urządzenia, nawet jeśli emulatory są w 100% dokładne - a tak nie jest.
Oczywiście nie usprawiedliwia to niewystarczającego testowania odpowiedniego prototypowego sprzętu przed wydaniem. Ta wina prawdopodobnie leży poza kontrolą dev / qa.
Czy to ten facet, który krąży w kółko powtarzając: „optymalizacja jest źródłem wszelkiego zła”, czy sprowadził ich na manowce?
Nie. Jestem pewien, że i tak go nie słuchają; w przeciwnym razie nie byłby tak często cytowany (to powinna być „ przedwczesna optymalizacja ...”). :-RE
Bardziej prawdopodobne jest, że zbyt wielu programistów przyjmuje jedną z 2 skrajności w zakresie optymalizacji.
Czy to mentalność „och, to tylko dodatkowe 100 ms” za każdym razem, aż wszystkie milisekundy sumują się w minutach?
Możliwie. Oczywiście, jeśli
Sleep(100)
został użyty jako odpowiednik bibuły stosowanej do spowolnienia krwawienia zerwanej kończyny - należy się spodziewać problemów. Podejrzewam jednak, że problem jest bardziej subtelny.Chodzi o to, że nowoczesny sprzęt komputerowy (w tym urządzenia wbudowane) jest znacznie szybszy, niż ludzie się im przypisują. Większość ludzi, nawet „doświadczonych” programistów, nie docenia szybkości komputerów. 100ms to długi czas - bardzo długi czas . I tak się składa, że ten „bardzo długi czas” tnie na dwa sposoby:
Czy to moja wina, że kupili te produkty w pierwszej kolejności?
Tak, zdecydowanie. Cóż, nie ty osobiście, ale ogólnie konsumenci. Produkty są sprzedawane (i kupowane ) według list kontrolnych funkcji. Zbyt niewielu konsumentów wymaga lepszej wydajności.
Aby zilustrować mój punkt widzenia: kiedy ostatni raz chciałem kupić telefon komórkowy, sklep nie mógł nawet zaoferować modelu demonstracyjnego do zabawy w sklepie. Wszystko, co mieli, to plastikowe skorupy z naklejkami pokazujące, jak będzie wyglądał ekran. Nie możesz nawet poczuć takiej wagi - nie mówiąc już o wydajności lub użyteczności. Chodzi mi o to, że jeśli wystarczająca liczba osób sprzeciwi się temu modelowi biznesowemu i zagłosuje swoimi portfelami, aby wyrazić swój sprzeciw, stanowimy jeden mały krok we właściwym kierunku.
Ale oni nie, więc nie jesteśmy; i co roku nowe telefony komórkowe działają wolniej na szybszym sprzęcie.
(Pytania nie zadawane.)
Zasadniczo uważam, że istnieje wiele czynników. Więc niestety nie ma srebrnej kuli, aby to naprawić. Ale to nie znaczy, że jest to los i mrok. Istnieją sposoby na poprawę sytuacji.
Więc w którym momencie coś poszło nie tak z tymi produktami?
IMHO tak naprawdę nie możemy zidentyfikować żadnego pojedynczego punktu. Istnieje wiele czynników, które ewoluowały w czasie.
Co my, programiści, możemy zrobić, aby uniknąć zadawania bólu naszym klientom?
Mam kilka sugestii (zarówno technicznych, jak i nietechnicznych), które mogą pomóc:
źródło
Twój pierwszy błąd i prawdopodobnie to, dlaczego masz głos w dół, zasługuje na rażąco oczywistą przesadę. Czy naprawdę uważasz, że iPhone i iPad są takie złe?
Ostatecznie klient jest odpowiedzialny. Wszystko sprowadza się do kosztu i tego, co klient jest gotowy zapłacić i co otrzymuje w zamian. Jeśli wybiorą cechy zamiast prędkości, właśnie to dostaną. Jeśli wybiorą cenę zamiast prędkości, to zostanie zbudowana i sprzedana. Jeśli wizerunek marki jest ważniejszy ... Ostatecznie klient decyduje o swoim portfelu, co jest ważne, a co nie. Masz wybór, aby zostać markową dziwką i kupować produkty, ponieważ wszyscy inni lub niezależny myśliciel, szukają połysku i marketingowego szumu i kupują coś, co spełnia Twoje potrzeby.
Obwiniasz programistów. Napisali kod, oczywiście, ale nie zdefiniowali i nie powinni definiować wymagań klientów, sprzętu, kosztu BOM, kosztu prac badawczo-rozwojowych, budżetu marketingowego ..... wszystkich rzeczy, które idą do stworzenia produktu , to nie jest oprogramowanie.
Zastosowane technologie, używane języki itp. Nie mają z tym nic wspólnego. Źli kontra dobrzy programiści, nie ma z tym nic wspólnego. Każdy na wpół przyzwoity programista może przyspieszyć działanie kodu, być bardziej responsywnym i być najlepszym. Z mojego doświadczenia wynika, że przyzwoici programiści nie zbankrutowali firmy, kiedy zostali zmuszeni do podjęcia decyzji, podczas gdy pół przyzwoici narzekają, jak „lepszym” powinno być.
źródło
Przedwczesna optymalizacja jest czasem zła, ale nie wtedy, gdy jest wymagana do dobrego doświadczenia użytkownika lub dobrej żywotności baterii w wystarczająco ograniczonym systemie. Błąd polega na tym, że nadaje się wyższy priorytet czystemu programowaniu inżynierii oprogramowania niż gotowaniu, niezależnie od tego, co zapewnia dobre wrażenia użytkownika i przyzwoitą żywotność baterii jako wyższy priorytet na początku projektu, nawet jeśli jest o wiele trudniejszy w utrzymaniu i krótki łączy pewnie starannie zaprojektowane stosy oprogramowania i metodologię.
Jeśli masz iPhone 3G, Apple wydało kilka aktualizacji systemu operacyjnego, które zostały zoptymalizowane tylko dla nowszych urządzeń. Późniejsze aktualizacje systemu operacyjnego 3G mogą zapewnić nieco lepszą wydajność 3G.
źródło
Rejestrator zajmuje tyle czasu, aby zmienić kanały, ponieważ najpierw musi zrzucić buforowane dane, a następnie ustawić w kolejce kolejny bufor pełen danych dla nowego oglądanego kanału. Bufor najprawdopodobniej jest przechowywany na dysku twardym, więc operacje te wymagają czasu (a ponadto mogą wypełniać bufor tylko w czasie rzeczywistym). W przypadku DVR nigdy nie oglądasz programów „na żywo”, zawsze jest ono opóźnione (nieprzypadkowo, jest opóźnione o tyle samo, co postrzegane opóźnienie przy przełączaniu kanałów). Można to łatwo zweryfikować, oglądając program sportowy w tym samym czasie, gdy słuchasz go w radiu.
źródło
Myślę, że powodem jest to, że większość aplikacji kierowanych przez konsumentów jest kontrolowana i sprzedawana przez osoby, które nic nie wiedzą o oprogramowaniu, i zatrudniają programistów na podstawie ich CV lub zaleceń jakiegoś menedżera „nic-nic”, w przeciwieństwie do ich rzeczywistych umiejętności i wiedzy .
źródło