Я читал статью в Википедии о Дугласе Макилрое и нашел цитату, в которой упоминается
«Настоящий герой программирования - тот, кто пишет отрицательный код».
Что это обозначает?
Я читал статью в Википедии о Дугласе Макилрое и нашел цитату, в которой упоминается
«Настоящий герой программирования - тот, кто пишет отрицательный код».
Что это обозначает?
Ответы:
Это означает сокращение строк кода путем устранения избыточности или использования более лаконичных конструкций.
Посмотрите, например, этот известный анекдот от оригинальной команды разработчиков Apple Lisa:
Когда в 1982 году команда Lisa пыталась доработать свое программное обеспечение, руководители проектов стали требовать от программистов еженедельных отчетов о количестве написанных ими строк кода. Билл Аткинсон думал, что это глупо. За неделю, в которую он переписал процедуры вычисления региона QuickDraw, чтобы они были в шесть раз быстрее и на 2000 строк короче, он поместил «-2000» в форму. Еще через несколько недель менеджеры перестали просить его заполнить форму, и он с радостью согласился.
Есть цитата Билла Гейтса о том, как измерять производительность программиста по строкам кода - это как измерять прогресс в авиастроении по весу.
Я хотел бы добавить, что метрика LOC поощряет использование чрезмерно многословных языков и намеренно изобретает колесо, чтобы соответствовать квоте.
Когда я учился в старшей школе - да, в 70-х у нас были компьютеры, хотя мы должны были делать их из шкур животных с помощью каменных ножей - один из учителей математики провел конкурс по программированию. Правила заключались в том, что победившей была бы программа, которая вырабатывала правильный вывод, и имела наименьшее произведение строк времени выполнения кода. То есть, если ваша программа взяла, скажем, 100 строк кода и работала в течение 5 секунд, ваш счет составлял 500. Если кто-то еще написал 90 строк кода и работал в течение 6 секунд, его результат был 540. Низкий счет выигрывает, как в гольфе.
Это произвело на меня впечатление блестящей системы начисления очков, поощряя лаконичность и производительность.
Но заявка, которая технически соответствовала критериям победы, была дисквалифицирована. Проблема заключалась в том, чтобы напечатать список всех простых чисел, меньших 100. Дисквалифицированная запись шла примерно так (большинство студентов тогда использовали 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"
Студент, который написал эту статью, указал, что она не только коротка и очень эффективна, но и алгоритм должен быть очевиден для всех, кто имеет минимальные знания в области программирования, что делает программу очень удобной в обслуживании.
Это насмешливый. Если это стоит $ N за среднюю кодированную строку, то кодирование «отрицательных линий», безусловно, является победителем.
В качестве практического совета это означает, что небольшой код, выполняющий эту работу, намного лучше, чем большой код, который делает то же самое, при прочих равных условиях.
X
строк. Затем, в течение нескольких итераций, сокращаем конечный продукт по Y
строкам. Таким образом, (X-Y)
оставшиеся строки кажутся очень дорогими, потому что резня рефакторинга уничтожила все потери.
Написание одной и той же программы с меньшим количеством кода является целью для всех.
Если программе потребовалось 200 LOC для кодирования, а я записал ее за 150, я написал -50 LOC. Поэтому я написал отрицательный код.
Ответ Тило, вероятно, является наиболее точным в историческом плане, но метафора «отрицательный код» может также включать производительность и использование памяти - вознаграждение за попытки отложить выполнение или выделение чего-либо до тех пор, пока это действительно не понадобится.
Этот менталитет «промедление платит» породил такие насмешливые аксиомы, как «Ничего не делать всегда быстрее, чем делать что-то», «Самый быстрый код - это код, который никогда не выполняется» и «Если вы можете отложить его достаточно долго, вам, возможно, никогда не придется делать это "(имеется в виду отсрочка дорогостоящих операций, пока они не потребуются)
Одним из способов реализации отрицательного кода является оспаривание исходных предположений и определений проблемы. Если вы можете переопределить проблемную / входную область таким образом, что «проблема-залипание № 3» категорически невозможна, вам не придется тратить время или код на решение проблемы-залипания № 3. Вы устранили код, оптимизировав дизайн.