it-swarm.com.de

Was ist negativer Code?

Ich las den Wikipedia-Artikel über Douglas McIlroy und fand ein Zitat, das erwähnt

"Der wahre Held der Programmierung ist derjenige, der negativen Code schreibt."

Was bedeutet das?

341
Anonymous

Dies bedeutet, Codezeilen zu reduzieren, indem Redundanzen entfernt oder präzisere Konstrukte verwendet werden.

Siehe zum Beispiel diese berühmte Anekdote aus dem Original Apple Lisa Entwicklerteam:

Als das Lisa-Team 1982 auf die Fertigstellung seiner Software drängte, forderten die Projektmanager die Programmierer auf, wöchentliche Formulare einzureichen, in denen über die Anzahl der von ihnen geschriebenen Codezeilen berichtet wird. Bill Atkinson fand das albern. Für die Woche, in der er die Regionsberechnungsroutinen von QuickDraw so umgeschrieben hatte, dass sie sechsmal schneller und 2000 Zeilen kürzer waren, setzte er "-2000" in das Formular. Nach einigen weiteren Wochen hörten die Manager auf, ihn zu bitten, das Formular auszufüllen, und er folgte gerne.

503
Thilo

Es gibt ein Zitat von Bill Gates, in dem die Produktivität von Programmierern anhand von Codezeilen gemessen wird, als würde man den Fortschritt beim Bau von Flugzeugen nach Gewicht messen.

Ich möchte hinzufügen, dass die LOC-Metrik die Verwendung übermäßig langatmiger Sprachen und die absichtliche Neuerfindung des Rads zur Einhaltung der Quote gefördert hat.

131
Ugly American

Als ich in der High School war - und ja, wir hatten Computer in den 70ern, obwohl wir sie mit Steinmessern aus Tierhäuten herstellen mussten -, führte einer der Mathematiklehrer einen Programmierwettbewerb durch. Die Regeln lauteten, dass das Gewinnerprogramm dasjenige sein würde, das die richtige Ausgabe erzeugt und das kleinste Produkt aus Zeilen mit Codezeiten zur Laufzeit hat. Das heißt, wenn Ihr Programm beispielsweise 100 Codezeilen dauerte und 5 Sekunden lang lief, betrug Ihre Punktzahl 500. Wenn jemand anderes 90 Codezeilen schrieb und 6 Sekunden lang lief, betrug seine Punktzahl 540. Niedrige Punktzahl gewinnt, wie Golf.

Es kam mir wie ein brillantes Punktesystem vor, das sowohl Prägnanz als auch Leistung belohnte.

Der Beitrag, der die Gewinnkriterien technisch erfüllte, wurde jedoch disqualifiziert. Das Problem bestand darin, eine Liste aller Primzahlen unter 100 auszudrucken. Der disqualifizierte Eintrag sah ungefähr so ​​aus (die meisten Studenten verwendeten damals BASIC):

100 print "2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61,"
110 print "67, 71, 73, 79, 83, 87, 89, 91, 97"

Der Student, der diesen Eintrag schrieb, wies darauf hin, dass er nicht nur kurz und sehr effizient sei, sondern dass der Algorithmus auch für jeden offensichtlich sein sollte, der nur über minimale Programmierkenntnisse verfügt, wodurch das Programm in hohem Maße wartbar ist.

118
Jay

Es ist ein Augenzwinkern. Wenn es Sie $ N pro durchschnittlich codierter Zeile kostet, ist die Codierung von "negativen Zeilen" sicherlich ein Gewinner.

Dies bedeutet als praktischen Rat, dass kleiner Code, der die Aufgabe erfüllt, viel besser ist als großer Code, der dasselbe tut, wobei alle anderen Dinge gleich sind.

34
Ira Baxter

Das gleiche Programm in weniger Code zu schreiben, ist ein Ziel für alle.

Wenn ein Programm 200 LOC zum Codieren benötigte und ich es in 150 schrieb, schrieb ich -50 LOC. Also habe ich negativen Code geschrieben.

27
LucaB

Thilos Antwort ist historisch wahrscheinlich am genauesten, aber die Metapher "negativer Code" kann auch Leistung und Speichernutzung enthalten - eine lohnende Anstrengung, die Ausführung oder Zuweisung von etwas zu verschieben, bis es tatsächlich benötigt wird.

Diese "Aufschub zahlt sich aus" -Mentalität führte zu solchen ironischen Axiomen wie "Nichts zu tun ist immer schneller als etwas zu tun", "Der schnellste Code ist der Code, der niemals ausgeführt wird" und "Wenn Sie ihn lange genug aufschieben können, Sie müssen es möglicherweise nie tun "(in Bezug auf die Verschiebung teurer Vorgänge, bis sie tatsächlich erforderlich sind)

Eine Technik zur Realisierung von negativem Code besteht darin, anfängliche Annahmen und Definitionen des Problems in Frage zu stellen. Wenn Sie das Problem/die Eingabedomäne so neu definieren können, dass "Sticky Issue # 3" kategorisch unmöglich ist, müssen Sie keine Zeit oder keinen Code für das Sticky Issue # 3 aufwenden. Sie haben Code eliminiert, indem Sie das Design optimiert haben.

9
dthorpe