Czytałem artykuł w Wikipedii na temat Douglasa McIlroya i znalazłem cytat, który wspomina
„Prawdziwym bohaterem programowania jest ten, który pisze negatywny kod”.
Co to znaczy?
Czytałem artykuł w Wikipedii na temat Douglasa McIlroya i znalazłem cytat, który wspomina
„Prawdziwym bohaterem programowania jest ten, który pisze negatywny kod”.
Co to znaczy?
Odpowiedzi:
Oznacza to redukcję linii kodu poprzez usunięcie redundancji lub użycie bardziej zwięzłych konstrukcji.
Zobacz na przykład tę słynną anegdotę oryginalnego zespołu programistów Apple Lisa:
źródło
Cytat Billa Gatesa wzdłuż linii mierzenia produktywności programisty liniami kodu jest jak mierzenie postępów budowy samolotów według wagi.
Chciałbym dodać, że wskaźnik LOC zachęca do używania zbyt długich języków i świadomie wymyśla koło, aby osiągnąć limit.
źródło
Kiedy byłem w liceum - i tak, mieliśmy komputery w latach 70., choć musieliśmy je ze skór zwierzęcych przy użyciu kamiennych noży - jeden z nauczycieli matematyki przeprowadził konkurs programistyczny. Reguły były takie, że wygrywającym programem byłby ten, który wygenerował poprawne wyjście, i który miał najmniejszy iloczyn linii czasu wykonania kodu. Oznacza to, że jeśli twój program wziął, powiedz 100 linii kodu i działał przez 5 sekund, twój wynik wynosił 500. Jeśli ktoś inny napisał 90 linii kodu i biegł przez 6 sekund, jego wynik to 540. Niski wynik wygrywa, jak golf.
Uderzył mnie jako świetny system punktacji, nagradzający zarówno zwięzłość, jak i wydajność.
Ale zgłoszenie, które technicznie spełniało kryteria wygranej, zostało zdyskwalifikowane. Problem polegał na wydrukowaniu listy wszystkich liczb pierwszych mniejszych niż 100. Wpis zdyskwalifikowany wyglądał mniej więcej tak (większość uczniów używała wtedy języka BASIC):
Student, który napisał ten wpis, zauważył, że nie tylko był on krótki i bardzo wydajny, ale algorytm powinien być oczywisty dla każdego, kto ma choćby minimalną wiedzę na temat programowania, dzięki czemu program jest bardzo łatwy w utrzymaniu.
źródło
Ma język w policzek. Jeśli kosztuje Cię N $ za średnią kodowaną linię, wówczas kodowanie „linii ujemnych” z pewnością wygrywa.
Oznacza to, jako praktyczna rada, że mały kod, który wykonuje zadanie, jest znacznie lepszy niż duży kod, który robi to samo, a wszystkie inne rzeczy są równe.
źródło
X
linii. Następnie przez kilka iteracji, redukując produkt końcowy oY
linie. Tak więc(X-Y)
pozostałe linie wydają się bardzo kosztowne, ponieważ rzeź refaktoryzacji odciąła cały cruft.Pisanie tego samego programu w mniejszej ilości kodu jest celem każdego.
Jeśli program wziął 200 LOC do kodowania, a ja piszę w 150, napisałem -50 LOC. Więc napisałem negatywny kod.
źródło
Odpowiedź Thilo jest prawdopodobnie najdokładniejsza z historycznego punktu widzenia, ale metafora „kodu ujemnego” może również obejmować wydajność i wykorzystanie pamięci - nagradzanie wysiłków w celu odroczenia wykonania lub przydzielenia czegoś, dopóki nie będzie ono faktycznie potrzebne.
Ta mentalność „odwlekania się z płaceniem” wytworzyła takie nieprzyzwoite aksjomaty, takie jak „nic nie robić jest zawsze szybsze niż robienie czegoś”, „najszybszy kod to kod, który nigdy się nie wykonuje”, i „jeśli możesz go odłożyć wystarczająco długo, może nigdy nie będziesz musiał tego robić ”(odnosząc się do odroczenia kosztownych operacji, dopóki nie będzie to faktycznie wymagane)
Jedną z technik realizacji negatywnego kodu jest podważenie wstępnych założeń i definicji problemu. Jeśli możesz przedefiniować domenę problemu / wejściową tak, że „lepki problem nr 3” jest kategorycznie niemożliwy, nie musisz tracić czasu ani kodu na zajmowanie się lepkim problemem nr 3. Wyeliminowałeś kod, optymalizując projekt.
źródło