Mein Comcast-DVR benötigt mindestens drei Sekunden, um auf jeden Tastendruck auf der Fernbedienung zu reagieren. Dadurch wird die einfache Aufgabe, fernzusehen, zu einem frustrierenden Erlebnis beim Drücken von Tasten. Mein iPhone benötigt mindestens fünfzehn Sekunden, um Kurzmitteilungen anzuzeigen, und stürzt ¼ der Versuche ab, die iPod-App aufzurufen. Das einfache Empfangen und Lesen einer E-Mail dauert oft länger als eine Minute. Sogar das Navcom in meinem Auto hat matschige und nicht reagierende Bedienelemente, die häufig aufeinanderfolgende Eingaben verschlucken, wenn sie weniger als ein paar Sekunden voneinander entfernt sind.
Dies sind alles Geräte für Endverbraucher mit fester Hardware, für die die Benutzerfreundlichkeit von größter Bedeutung sein sollte, und dennoch scheitern sie alle an der grundlegenden Reaktionsfähigkeit und Latenz. Ihre Software ist einfach zu langsam .
Was steckt dahinter? Ist es ein technisches Problem oder ein soziales? Wer oder was ist verantwortlich?
Liegt es daran, dass diese alle in verwalteten, müllsammelbaren Sprachen und nicht in nativem Code geschrieben wurden? Haben die einzelnen Programmierer die Software für diese Geräte geschrieben? In all diesen Fällen wussten die App-Entwickler genau, auf welche Hardwareplattform sie abzielen und welche Funktionen sie hatten. Haben sie das nicht berücksichtigt? Ist es der Typ, der wiederholt: "Optimierung ist die Wurzel allen Übels", hat er sie in die Irre geführt? War es eine Mentalität von "Oh, es sind jedes Mal nur zusätzliche 100 ms", bis sich all diese Millisekunden auf Minuten summieren? Ist es meine Schuld, dass ich diese Produkte überhaupt gekauft habe?
Dies ist eine subjektive Frage, ohne einzelne Antwort, aber ich bin frustriert oft so viele Antworten hier , um zu sagen : „Oh, nicht über Code Geschwindigkeit sorgen, Leistung spielt keine Rolle“ , wenn klar irgendwann es tut Sache der Endbenutzer, der mit einer langsamen, nicht reagierenden, schrecklichen Erfahrung feststeckt.
Wann ist also bei diesen Produkten ein Fehler aufgetreten? Was können wir als Programmierer tun, um diesen Schmerz nicht unseren eigenen Kunden zuzufügen?
quelle
Antworten:
Gute Frage. Was ich täglich sehe, ist das.
Die Leute arbeiten an großformatigen Apps. Während sie arbeiten, schleichen sich Leistungsprobleme ein, genau wie Fehler. Der Unterschied ist - Bugs sind "schlecht" - sie schreien "finde mich und repariere mich". Leistungsprobleme sitzen einfach da und werden schlimmer. Programmierer denken oft: "Nun, mein Code hätte kein Leistungsproblem. Stattdessen muss das Management mir eine neuere / größere / schnellere Maschine kaufen."
Tatsache ist, wenn Entwickler regelmäßig nach Leistungsproblemen suchen (was eigentlich sehr einfach ist ), können sie diese einfach beseitigen.
Stattdessen lautet der "Stand der Technik":
Aber das ist wirklich negativ. Positiv ist zu vermerken, dass diese Methode fast immer funktioniert und nicht einfacher sein kann. Hier ist ein detailliertes Beispiel .
quelle
Dies ist kein technisches Problem, sondern ein Marketing- und Managementproblem.
Du verdrehst an dieser Stelle vielleicht die Augen, aber bitte trage es mit mir.
Was ein Unternehmen verkauft, ist sein "Produkt", und die Leute, die das definieren, sind "Produktmanager". In Technologiefirmen wiegen viele andere Leute darauf - Experten für Benutzererfahrungen, yadda yadda. Letztendlich sind die Produktmanager jedoch dafür verantwortlich, die Spezifikationen für das zu schreiben, was der Benutzer erhalten soll.
Nehmen wir also Ihren Comcast-DVR. Im Idealfall würden die Dinge so funktionieren:
Natürlich kann vieles schief gehen:
Hast du all die schwachsinnigen Programmierer dort gesehen? Es gab keine.
Ich sage nicht, dass wir überhaupt keine Verantwortung für schlechte Leistung tragen - oft ist es genauso einfach und schnell, guten, robusten und effizienten Code zu schreiben wie Junk.
Aber wirklich, wenn das Produktmanagement und die QS-Mitarbeiter alle am Steuer schlafen, können wir Programmierer das nicht wettmachen.
FWIW, ich stimme den abgrundtiefen Schnittstellen der meisten Konsumgüter voll und ganz zu. Ich schreibe jetzt seit ungefähr 25 Jahren UI-Code und strebe nach Eleganz und Einfachheit. Es ist eigentlich ein Problem, weil ich so viel darüber nachdenke, dass ich es heute nicht mehr gut finde, schlecht gestaltete Benutzeroberflächen zu finden, sodass meine arme Frau die meisten Geräte in unserem Media Center laufen lässt.
quelle
Weil Programmierer nicht perfekt sind.
Ich bin ein Programmierer von eingebetteten Dingen. Ein Teil meines Codes ist nicht perfekt. Der größte Teil meines eingebetteten Codes ist schnell.
Leistungsprobleme am Ende eines Projekts zu beheben, ist sehr schwierig.
Manchmal schichten wir Dinge, um die Dinge einfach zu halten (und damit testbar, entwicklungsfähig in realistischer Zeit, nicht tödlich fehlerhaft), wie die Remote-Eingabe für einen "Dienst", der nicht Teil der Hauptanwendung ist. Endergebnis, Latenz. Die Alternative besteht darin, alles in eine monolithische Anwendung zu packen, was in C oder C ++ (den beiden am häufigsten vorkommenden eingebetteten Sprachen) eine fehlerhafte Katastrophe darstellt.
Manchmal verfügt Ihr Embedded-Gerät über einen Prozess-Scheduler, der nicht das tut, was Sie als Benutzer wünschen. Verdammt schwer zu reparieren als Embedded-Entwickler.
Die Komplexität verursacht die Verzögerung aufgrund der Latenz beim Schichten. Sie haben nach den Funktionen gefragt. Probieren Sie ein wirklich altes Nokia aus, wie das alte 3210. Zippy fast UI. Nicht viele Funktionen.
Ich behaupte, dass Entwickler nicht schlauer werden, so dass schnellere Hardware von Abstraktionen absorbiert wird, um zu verhindern, dass sich Features gegenseitig umbringen. (Oder nicht, im Falle Ihres iPhone)
Die Leistung der Benutzeroberfläche muss eine Anforderung sein, die Sie im Verlauf des Entwurfs testen müssen.
Wenn es nicht spezifiziert ist, wird sich der Entwickler daran gewöhnen. Das machen wir alle. "Mein Baby ist nicht hässlich"
Und es sind nicht die GC-Sprachen; Embedded Realtime Java ist so schnell, dass es unheimlich ist. (Embedded Python hingegen ist ein totaler Hund)
Ich schreibe ein Programm, das beim Lesen digitale Eingänge als UI einschaltet. Der Schalter muss noch entprellt werden, so dass ein sehr schnelles Betätigen des Schalters nicht funktioniert, da der Entprellvorgang einige Ebenen höher ist. Idealerweise würde ich die Entprelllogik am unteren Rand des Firmware-Stacks haben, aber so funktioniert die Hardware nicht.
Einige DVD-Player führen einfach ein "Auswurf" -Skript aus, um den Auswurf durchzuführen. Ihr DVR hat diesen Ansatz möglicherweise gewählt, um die Entwicklungskosten in Grenzen zu halten. Dann spart man CPU oder RAM und es nervt.
quelle
Liegt es daran, dass diese alle in verwalteten, müllsammelbaren Sprachen und nicht in nativem Code geschrieben wurden?
Langsamer Code funktioniert trotzdem schlecht. Sicher, eine bestimmte Sprache kann bestimmte Problemklassen hervorrufen, während andere gelöst werden. Gute Programmierer sind jedoch durchaus in der Lage, Problemumgehungen zu finden, wenn genügend Zeit zur Verfügung steht.
Haben die einzelnen Programmierer die Software für diese Geräte geschrieben?
Teilweise. In vielen Fällen ist es sehr wahrscheinlich, dass zumindest ein Faktor dazu beiträgt. Dies ist ein bedauerlicher Nebeneffekt einer Branche, in der gute Programmierer stark nachgefragt werden und das Angebot knapp ist. Auch die Kluft zwischen verschiedenen technischen Fähigkeiten kann recht groß sein. Es liegt also auf der Hand, dass manchmal die Programmierer, die mit der Implementierung bestimmter Software beauftragt wurden, nur dazu beglückwünscht werden konnten, dass sie zum Laufen gebracht wurden.
In all diesen Fällen wussten die App-Entwickler genau, auf welche Hardwareplattform sie abzielen und welche Funktionen sie hatten. Haben sie das nicht berücksichtigt?
Teilweise. Zunächst einmal ist die genaue Hardwareplattform wahrscheinlich nicht bekannt, da diese bei der Softwareentwicklung häufig mit verschiedenen Herstellern parallel ausgehandelt wird. Tatsächlich kann es nach der Erstveröffentlichung sogar zu geringfügigen (aber nicht unbedingt unbedeutenden) Änderungen an der zugrunde liegenden Hardware kommen. Ich stimme jedoch zu, dass die allgemeinen Fähigkeiten bekannt sein werden.
Ein Teil des Problems ist, dass Software wahrscheinlich nicht auf der Hardware entwickelt wird, sondern in Emulatoren. Dies macht es schwierig, die tatsächliche Geräteleistung zu berücksichtigen, selbst wenn die Emulatoren zu 100% genau sind - was nicht der Fall ist.
Dies rechtfertigt natürlich nicht wirklich unzureichende Tests auf der entsprechenden Prototyp-Hardware vor der Veröffentlichung. Diese Schuld liegt wahrscheinlich außerhalb der Kontrolle von dev / qa.
Ist es der Typ, der wiederholt: "Optimierung ist die Wurzel allen Übels", hat er sie in die Irre geführt?
Nein, ich bin mir ziemlich sicher, dass sie ihm sowieso nicht zuhören. sonst würde er nicht so oft falsch zitiert (das soll " vorzeitige Optimierung ..." sein). :-D
Es ist wahrscheinlicher, dass zu viele Programmierer hinsichtlich der Optimierung eines von zwei Extremen annehmen.
War es eine Mentalität von "Oh, es sind jedes Mal nur zusätzliche 100 ms", bis sich all diese Millisekunden auf Minuten summieren?
Möglicherweise. Wenn
Sleep(100)
als Äquivalent Tissue-Papier verwendet wurde, um das Ausbluten einer abgetrennten Extremität zu verlangsamen, sind natürlich Probleme zu erwarten. Ich vermute jedoch, dass das Problem subtiler ist.Die Sache ist, dass moderne Computerhardware (einschließlich eingebetteter Geräte) viel schneller ist, als man ihnen zuschreibt. Die meisten Leute, selbst "erfahrene" Programmierer, wissen nicht, wie schnell Computer sind. 100 ms sind eine lange Zeit - eine sehr lange Zeit . Und wie es passiert, schneidet diese "sehr lange Zeit" zwei Wege:
Ist es meine Schuld, dass ich diese Produkte überhaupt gekauft habe?
Ja definitiv. Nun, nicht Sie persönlich, sondern die Verbraucher im Allgemeinen. Produkte werden über Feature-Checklisten verkauft (und gekauft ). Zu wenige Verbraucher fordern eine bessere Leistung.
Um meinen Standpunkt zu verdeutlichen: Als ich das letzte Mal ein Handy kaufen wollte, konnte der Laden nicht einmal ein Demomodell zum Spielen im Laden anbieten. Alles, was sie hatten, waren Plastikhüllen mit Aufklebern, die zeigten, wie der Bildschirm aussehen würde. Sie können nicht einmal ein Gefühl für das Gewicht bekommen - geschweige denn Leistung oder Benutzerfreundlichkeit. Mein Standpunkt ist, dass wir nur einen kleinen Schritt in die richtige Richtung gehen würden , wenn genügend Menschen Einwände gegen dieses Geschäftsmodell erheben und mit ihren Geldbörsen abstimmen würden, um ihren Einwand zu äußern .
Aber sie tun es nicht, also sind wir es nicht. und jedes Jahr laufen neue Handys auf schnellerer Hardware langsamer.
(Die Fragen nicht gestellt.)
Grundsätzlich glaube ich, dass es viele Faktoren gibt, die dazu beitragen. Leider gibt es keine Silberkugel, um das Problem zu beheben. Das heißt aber nicht, dass es düster und düster ist. Es gibt Möglichkeiten, zur Verbesserung der Dinge beizutragen.
Wann ist also bei diesen Produkten ein Fehler aufgetreten?
IMHO können wir keinen einzelnen Punkt wirklich identifizieren. Es gibt viele Faktoren, die sich im Laufe der Zeit entwickelt haben.
Was können wir als Programmierer tun, um diesen Schmerz nicht unseren eigenen Kunden zuzufügen?
Ich habe einige Vorschläge (sowohl technische als auch nichttechnische), die helfen können:
quelle
Ihr erster Fehler und wahrscheinlich der Grund, warum Sie eine Ablehnung erhalten haben, verdient die offensichtliche Übertreibung. Erwarten Sie wirklich, dass iPhone und iPad so schlecht sind?
Letztendlich ist der Kunde verantwortlich. Es kommt auf die Kosten an und darauf, was der Kunde bereit ist zu zahlen und was er dafür erhält. Wenn sie Merkmale vor Geschwindigkeit wählen, erhalten sie diese. Wenn sie den Preis der Geschwindigkeit vorziehen, wird das gebaut und verkauft. Wenn Markenimage wichtiger ist ..... Letztendlich entscheidet der Kunde mit seiner Geldbörse, was wichtig ist und was nicht. Sie haben die Wahl, eine Markenhure zu sein und Produkte zu kaufen, weil alle anderen es tun, oder Sie sind ein unabhängiger Denker, schauen hinter den Glanz- und Marketing-Hype und kaufen etwas, das Ihren Bedürfnissen entspricht.
Sie beschuldigen die Programmierer. Sicher, sie haben den Code geschrieben, aber sie haben die Kundenanforderungen, die Hardware, die Stücklistenkosten, die F & E-Kosten und das Marketingbudget nicht definiert und sollten sie auch nicht definieren , das ist keine Software.
Die verwendeten Technologien, verwendeten Sprachen usw. haben damit nichts zu tun. Schlechte gegen gute Entwickler, nichts damit zu tun. Jeder halbwegs anständige Programmierer kann einen Teil des Codes schneller ausführen, reaktionsschneller sein und das Ultimative bieten. Meine Erfahrung ist, dass anständige Programmierer das Geschäft nicht ruinieren, wenn sie die Entscheidungen treffen müssen, während halb anständige sich darüber beschweren, wie viel "besser" es sein sollte.
quelle
Eine vorzeitige Optimierung ist manchmal schlecht, jedoch nicht, wenn dies für eine gute Benutzererfahrung oder eine gute Akkulaufzeit in einem ausreichend eingeschränkten System erforderlich ist. Der Fehler liegt darin begründet, dass dem sauberen, wartbaren Software-Engineering eine höhere Priorität beigemessen wird als dem Kochen, um zu Beginn eines Projekts eine gute Benutzererfahrung und eine angemessene Batterielebensdauer zu gewährleisten Schaltet einen sauber strukturierten Software-Stack und eine Methodik ein.
Wenn Sie ein iPhone 3G besitzen, hat Apple einige Betriebssystem-Updates veröffentlicht, die nur für neuere Geräte optimiert wurden. Spätere Betriebssystemupdates für das 3G bieten möglicherweise eine etwas bessere Leistung für das 3G.
quelle
Der DVR benötigt so viel Zeit, um die Kanäle zu wechseln, da zuerst die gepufferten Daten ausgegeben und dann ein weiterer Puffer mit Daten für den neuen Kanal in die Warteschlange gestellt werden muss, den Sie gerade ansehen. Dieser Puffer wird höchstwahrscheinlich auf der Festplatte gespeichert, sodass diese Vorgänge einige Zeit in Anspruch nehmen (außerdem kann er den Puffer nur in Echtzeit füllen). Mit einem DVR sehen Sie niemals "Live" -Programme, es ist immer verzögert (nicht zufällig, es ist zeitgleich mit Ihrer wahrgenommenen Verzögerung beim Umschalten von Kanälen verzögert). Dies kann leicht überprüft werden, indem Sie ein Sportprogramm gleichzeitig mit dem Radiohören ansehen.
quelle
Ich denke, der Grund dafür ist, dass die meisten Consumer-gesteuerten Apps von Leuten gesteuert und vermarktet werden, die nichts über Software wissen und Entwickler auf der Grundlage ihrer Lebensläufe oder der Empfehlungen eines No-nothing-Managers einstellen, im Gegensatz zu ihren tatsächlichen Fähigkeiten und Kenntnissen .
quelle