Что такое отрицательный код?

Я читал статью Википедии о Дугласе Макилрое и нашел цитату, в которой упоминается

  

«Настоящим героем программирования является тот, кто пишет отрицательный код».

Что это значит?

331 голос | спросил Anonymous 27 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowMon, 27 Sep 2010 06:14:08 +0400 2010, 06:14:08

6 ответов


491

Это означает сокращение строк кода путем удаления избыточности или использования более сжатых конструкций.

См., например, этот знаменитый анекдот от команды разработчиков Apple Lisa:

  

Когда команда Lisa пыталась завершить свое программное обеспечение в 1982 году, руководители проектов начали требовать от программистов представления еженедельных отчетов о количестве строк кода, которые они написали. Билл Аткинсон думал, что это глупо. В течение недели, когда он переписал процедуры расчета QuickDraw, в шесть раз быстрее, а 2000 строк короче, он добавил «-2000» в форму. Через несколько недель менеджеры перестали просить его заполнить форму, и он с радостью согласился.

ответил Thilo 27 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowMon, 27 Sep 2010 06:15:04 +0400 2010, 06:15:04
128

Есть цитата Билла Гейтса по линиям измерения производительности программиста по линиям кода, как измерение прогресса по производству самолетов по весу.

Я хотел бы добавить, что метрика LOC поощряла использование чрезмерно длинных языков и намеренно изобретала колесо для соответствия квоте.

ответил 27 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowMon, 27 Sep 2010 08:57:49 +0400 2010, 08:57:49
113

Когда я учился в старшей школе, и да, у нас были компьютеры еще в 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"

Студент, который написал эту запись, указал, что она не только короткая и очень эффективная, но и алгоритм должен быть очевиден для любого, у кого даже минимальное знание программирования, что делает программу очень удобной.

ответил Jay 20 +04002010-10-20T01:02:39+04:00312010bEurope/MoscowWed, 20 Oct 2010 01:02:39 +0400 2010, 01:02:39
34

Это язык в щеке. Если это стоит $ N за среднюю кодированную строку, то кодирование «отрицательных строк», безусловно, является победителем.

Это означает, что, как практический совет, небольшой код, который выполняет работу, намного лучше, чем большой код, который делает то же самое, при прочих равных условиях.

ответил Ira Baxter 27 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowMon, 27 Sep 2010 06:17:02 +0400 2010, 06:17:02
27

Написание одной и той же программы в меньшем количестве кодов является целью для всех.

Если программа взяла 200 LOC для кода, и я пишу ее в 150, я написал -50 LOC. Поэтому я написал отрицательный код.

ответил LucaB 27 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowMon, 27 Sep 2010 11:44:02 +0400 2010, 11:44:02
9

Ответ Тило , вероятно, наиболее точным исторически, но метафора «отрицательного кода» также может включать в себя производительность и память использование - поощрение усилий по отсрочке исполнения или распределению чего-либо, пока оно не понадобится.

Этот менталитет «промедления платит» вызвал такие «щекотливые» аксиомы, такие как «Ничего не делать всегда быстрее, чем что-то делать», «Самый быстрый код - это код, который никогда не выполняется», и «Если вы можете его отложить достаточно долго, вам, возможно, никогда не придется это делать »(ссылаясь на отсрочку дорогостоящих операций до фактической необходимости)

Один из способов реализации отрицательного кода - оспаривать исходные предположения и определения проблемы. Если вы можете переопределить проблему /входной домен таким образом, чтобы «липкая проблема №3» была категорически невозможна, вам не нужно тратить время или код на липкую проблему №3. Вы удалили код, оптимизировав дизайн.

ответил dthorpe 26 AM000000100000001831 2011, 10:58:18

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132