Auf welche Art von Optimierungen neigen Sie sich im Allgemeinen beim Entwerfen von Software?
Sind Sie der Typ, für den Sie Ihr Design optimieren möchten?
- Entwicklungszeit (dh schnell zu schreiben und / oder einfacher zu warten)?
- Bearbeitungszeit
- Speicherplatz (RAM, DB, Disc usw.)
Dies ist natürlich sehr subjektiv in Bezug auf die Art der zu lösenden Probleme und die damit verbundenen Fristen. Ich würde gerne mehr über die Gründe erfahren, aus denen Sie eine Form der Optimierung einer anderen vorziehen würden.
design
optimization
Jason Whitehorn
quelle
quelle
Antworten:
Instandhaltung
Anschließend ggf. profilieren und auf Geschwindigkeit optimieren. Ich hatte selten einen Speicherbedarf - zumindest in den letzten 10 Jahren nicht. Vorher habe ich getan.
quelle
Entwicklungszeit
Verarbeitung und Lagerung sind billig. Deine Zeit ist nicht.
Nur zu beachten:
Das bedeutet nicht, dass Sie schlecht Code schreiben müssen, um ihn schnell zu beenden. Es bedeutet, den Code so zu schreiben, dass eine schnelle Entwicklung möglich ist. Es hängt auch ganz von Ihren Anwendungsfällen ab. Wenn es sich um eine einfache, zwei- oder dreiseitige Website mit einem Kontaktformular handelt, müssen Sie wahrscheinlich kein PHP-Framework verwenden. Ein paar Includes und ein Mailer-Skript beschleunigen die Entwicklung. Wenn Sie stattdessen eine flexible Plattform erstellen möchten, auf der Sie wachsen und neue Funktionen hinzufügen können, lohnt es sich, sich die Zeit zu nehmen, sie richtig zu gestalten und entsprechend zu codieren, da dies die zukünftige Entwicklung beschleunigen wird.
Im direkten Vergleich zu Verarbeitungszeit und Lagerung neige ich zu einer schnelleren Entwicklungszeit. Ist die Verwendung der Subtraktionsfunktion collectionutils die schnellste und speichereffizienteste Methode zum Subtrahieren von Sammlungen? Nein! Aber es ist eine schnellere Entwicklungszeit. Wenn Sie auf Performance- oder Speicherengpässe stoßen, können Sie diese später beheben. Optimieren, bevor Sie wissen, was optimiert werden muss, ist eine Verschwendung Ihrer Zeit, und genau dafür plädiere ich.
quelle
Benutzererfahrung.
Dies ist der einzige Wert, der für Ihren Kunden von Bedeutung ist.
Entwicklungszeit ist weniger wichtig. Ich kann eine voll funktionsfähige Befehlszeilenanwendung viel schneller als eine GUI schreiben, aber wenn Mrs. Jane nicht herausfindet, wie sie Berichte ausspucken kann, die sie will, ist das nutzlos.
Wartung ist weniger wichtig. Ich kann eine Wippe sehr schnell reparieren, aber wenn sie mitten in einem Wald liegt, können Benutzer sie nicht finden.
Verarbeitungszeit ist weniger wichtig. Wenn ich ein Auto herstelle, das in 60 Sekunden auf Lichtgeschwindigkeit 0 geht, können Benutzer nicht lenken.
Ästhetik ist weniger wichtig. Ich kann eine Mona Lisa malen, aber wenn sie sich hinter einer Mauer versteckt, kann sie niemand sehen.
User Experience ist der einzige Wert, der zählt. Die ultimative Leistung besteht darin, eine Anwendung zu erstellen, die genau das tut, was der Benutzer erwartet.
quelle
Es gibt nur eine Sache zu optimieren und es ist:
Was Ihre Kunden wollen
Benötigen Ihre Kunden das schnellste Programm? Auf Geschwindigkeit optimieren.
Benötigen Ihre Kunden absolute Zuverlässigkeit? Optimieren Sie dafür.
Müssen sie es morgen liefern, oder wird es unbrauchbar sein? Optimieren Sie die Entwicklungsgeschwindigkeit.
Laufen Sie auf einem unglaublich kleinen Gerät mit eingeschränkten Ressourcen? Optimieren Sie für diese Ressourcen.
quelle
Bearbeitungszeit
Die Zeit meines Benutzers ist nicht billig. Was herumkommt, geht herum.Ich habe gerade eine Anwendung aktualisiert, die ich letztes Jahr verwende. Sie hatten die App komplett neu geschrieben, und Junge, es war langsam. Ich musste endlich einen neuen Computer kaufen, um ihn schnell laufen zu lassen. Ich garantiere Ihnen, dass das nicht billig war, aber meine Zeit ist wertvoller.
quelle
Ich tendiere dazu, den Speicherverbrauch und die Speicherzuweisungen zu begrenzen. Ich weiß, es ist alte Schule, aber:
quelle
Ich würde sagen, ich optimiere in Richtung Effizienz, wobei Effizienz als Kompromiss zwischen Entwicklungszeit, zukünftiger Wartbarkeit, Benutzererfahrung und Ressourcenverbrauch definiert wird. Als Entwickler müssen Sie all diese Dinge unter einen Hut bringen, um ein Gleichgewicht zu halten.
Wie erreichen Sie dieses Gleichgewicht? Zunächst müssen Sie einige Konstanten festlegen, z. B. die Frist, die Hardware, auf der Ihre Anwendung ausgeführt wird, und die Art der Person, die sie verwendet. Ohne diese zu kennen, können Sie nicht das richtige Gleichgewicht herstellen und Prioritäten setzen, wo dies erforderlich ist.
Wenn Sie beispielsweise eine Serveranwendung auf einem leistungsstarken Computer entwickeln, möchten Sie möglicherweise die Leistungseffizienz abwägen, um sicherzustellen, dass Sie einen unbeweglichen Termin einhalten. Wenn Ihr Entwickler jedoch eine Anwendung entwickelt, die schnell auf Benutzereingaben reagieren muss (z. B. ein Videospiel), müssen Sie Ihre Eingaberoutine priorisieren, um sicherzustellen, dass sie nicht verzögert wird.
quelle
Welche Virtualisierungstechnologie auch immer ich verwende
Erinnern Sie sich noch an die Zeiten, als Systeme mit mehr als 512 MB RAM als Vorreiter galten? Ich verbringe meine Tage damit, Code für den Prior zu schreiben.
Ich arbeite hauptsächlich mit Low-Level-Programmen, die in der privilegierten Domäne in einer Xen-Umgebung ausgeführt werden. Unsere Obergrenze für die privilegierte Domain beträgt 512 MB, so dass der Rest des Arbeitsspeichers für unsere Kunden frei ist. Es ist auch typisch für uns, die privilegierte Domäne auf nur einen CPU-Kern zu beschränken.
Hier schreibe ich also Code, der auf einem brandneuen 6-KB-Server ausgeführt wird, und jedes Programm muss (idealerweise) innerhalb einer 100-KB-Obergrenze funktionieren oder die dynamische Speicherzuweisung vollständig vermeiden.
Ich optimiere konkret für:
Ich muss auch extrem fleißig sein, wenn es darum geht, auf Schlösser zu warten, auf E / A zu warten oder nur allgemein zu warten. Ein beträchtlicher Teil meiner Zeit fließt in die Verbesserung vorhandener nicht blockierender Socket-Bibliotheken und in die Erforschung praktischerer Methoden zur sperrenfreien Programmierung.
Jeden Tag finde ich es etwas ironisch, dass ich Code wie vor 15 Jahren auf Systemen schreibe, die im letzten Monat aufgrund von technologischen Fortschritten gekauft wurden.
Dies ist typisch für alle, die auch auf eingebetteten Plattformen arbeiten, obwohl selbst viele über mindestens 1 GB verfügen. Wie Jason betont, ist es auch typisch, wenn Programme geschrieben werden, die auf mobilen Geräten ausgeführt werden sollen. Die Liste geht weiter, Kioske, Thin Clients, Bilderrahmen, etc ..
Ich beginne zu denken, dass Hardware-Einschränkungen Programmierer wirklich von Leuten trennen, die etwas zum Laufen bringen können, ohne sich darum zu kümmern, was es tatsächlich verbraucht. Ich mache mir Sorgen darüber, welche Sprachen, die Typ und Gedächtnis vollständig abstrahieren und in den Pool des gesunden Menschenverstandes einfließen, der von Programmierern verschiedener Disziplinen geteilt wurde.
quelle
Forschungsergebnisse
Als Akademiker dachte ich mir, ich sollte teilen, wofür ich optimiere. Beachten Sie, dass dies nicht mit der Optimierung für eine kürzere Entwicklungszeit identisch ist. Häufig bedeutet dies, dass die Arbeit möglicherweise eine Forschungsfrage unterstützt, jedoch kein zu lieferndes, poliertes Produkt ist. Dies könnte als Qualitätsproblem angesehen werden, und es könnte erklären, warum viele sagen, dass (akademische) Informatiker keine Erfahrung in der "realen Welt" haben. (ZB "Würden sie sonst nicht wissen, wie man ein lieferbares Produkt entwickelt?" )
Es ist eine feine Linie. In Bezug auf die Wirkung möchten Sie, dass Ihre Arbeit von anderen verwendet und zitiert wird, und Joels Eisberg-Effekt kommt ins Spiel: Ein wenig Glanz und Glanz kann viel bewirken. Wenn Sie jedoch keine Grundlage für weitere Projekte schaffen, auf denen Sie aufbauen können, können Sie möglicherweise nicht die Zeit rechtfertigen, die für die Erstellung eines zu liefernden Produkts aufgewendet wurde.
quelle
... danach alles andere
... endlich auf Leistung optimieren ;-)
quelle
Qualität / Prüfung
Optimieren Sie die Qualität, indem Sie sicherstellen, dass im Entwicklungsplan Zeit für das Testen vorhanden ist, sowohl für das Testen von Einheiten als auch für das Testen nach Funktionen / Phasen.
quelle
Dies hängt von den Anforderungen Ihres Programms ab.
Das meiste, was ich mache, ist stark von der Verarbeitungskapazität und dem Arbeitsspeicher abhängig, durchläuft jedoch nicht viele, wenn überhaupt, signifikante Veränderungen im durchschnittlichen Jahr.
Ich habe in der Vergangenheit an Projekten gearbeitet, bei denen der Code häufig geändert wird, damit die Wartbarkeit in diesen Fällen an Bedeutung gewinnt.
Ich habe in der Vergangenheit auch an Systemen gearbeitet, bei denen die Datenmenge das bedeutendste Problem darstellt, selbst bei der Speicherung auf der Festplatte. Die Größe wird jedoch häufiger zu einem Problem, wenn Sie die Daten viel oder nur langsam verschieben müssen Verknüpfung.
quelle
Eleganz .
Wenn Ihr Code gut entworfen ist, hat er mehrere Auswirkungen:
quelle
Entwicklungszeit, absolut. Ich optimiere auch für Bandbreite, aber ich gehe nicht zu binär.
quelle
Da ich Installationen auf mehreren Systemtypen durchführe, von IBM Mainframe bis hin zu PCs, optimiere ich zuerst die Kompatibilität, dann die Größe und dann die Geschwindigkeit.
quelle
Es hängt davon ab, ob
Wenn Sie an einem eingebetteten Echtzeit-Videoverarbeitungssystem arbeiten, optimieren Sie die Verarbeitungsgeschwindigkeit. Wenn Sie an einem Textverarbeitungsprogramm arbeiten, optimieren Sie die Entwicklungszeit.
In jedem Fall muss Ihr Code jedoch funktionieren und wartbar sein.
quelle
Ausdruck meiner Absicht.
Ich möchte, dass jemand, der meinen Code liest, auf einfache Weise erkennt, welche Vorgänge ich in der Domäne aufgerufen habe. Ebenso versuche ich, nicht-semantischen Junk (geschweifte Klammern, Funktionsschlüsselwörter in js usw.) zu minimieren, um das Scannen zu vereinfachen.
Natürlich muss man das durch Wartbarkeit ausgleichen. Ich liebe es, Funktionen zu schreiben, die Funktionen und alle möglichen fortgeschrittenen Techniken zurückgeben, und sie fördern mein Ziel, aber wenn der Nutzen gering ist, werde ich mich auf die Seite von Techniken beschränken, mit denen solide jr-Programmierer vertraut wären.
quelle
Alle von ihnen
Bearbeitungszeit
Die heutigen Computer sind schnell, aber bei weitem nicht genug. In vielen Situationen ist die Leistung entscheidend - wenn Sie Medienserver streamen.
Lager
Ihr Kunde hat möglicherweise eine große Festplatte, z. B. 1 TB. Welche können von 1000 HD-Filmen aufgenommen werden, wenn Sie es zu einem Dienst machen wollen, ist es bei weitem nicht genug, nicht wahr?
Entwicklungszeit
Nun, ich bin mir nicht sicher, ob dies als "Optimierung" gilt. Ich verwende Java anstelle von C ++ und die Entwicklung wird 10-mal schneller Vorwärts und total rockig!
BTW Ich glaube, um die Entwicklung Ihres Entwicklungsprozesses zu beschleunigen, sollten Sie Java wählen, versuchen Sie niemals Müll wie Python ... der behauptet, Sie könnten die DEV-Zeit verkürzen.
quelle