2009-12-14 3 views
40

Я в процессе возврата к некоторым более незначительным TODO в моем коде. Один из них относится к классу, который обрабатывает частичные даты, например. Январь 2001 года. Он отлично подходит для дат, которые будут видны в нашей системе (1990 - 2099 годы) и изящно терпит неудачу для других дат.Как долго длится код?

TODO, который я оставил для себя, заключается в том, что я не обрабатываю даты в 2100 году и далее. Я действительно не думаю, что это стоит усилий, направленных на устранение этой конкретной проблемы, но я понимаю ошибки Y2k. Если бы мы были в 2080 году, я думаю, что я буду думать по-другому и исправить ошибку.

Итак, как долго длится код? Как далеко вперед мы планируем, чтобы наши системы продолжали работать?

Update

Хорошо, спасибо за ваш вклад. Я думаю, что я собираюсь отказаться от TODO в коде и ничего не делать. Мысления, которые я нашел наиболее интересными, были следующими:

  • @Adrian - Вечность, я думаю, что это самое правильное предположение, ваша точка зрения о ВМ является хорошей.
  • @ jan-hancic - Это зависит, да.
  • @ chris-ballance - Я предполагаю, что я буду мертв к тому времени, когда это ограничение ударит, чтобы они могли осквернить мою могилу, если они захотят, но я буду мертв, поэтому я просто буду преследовать его жопа.

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

+5

Я думаю, что ваш код работает с 1990 по 2089 год. Обработка только двух последних цифр * всегда * плохая идея;) –

+2

, вы думаете, что программное обеспечение должно поставляться со сроком годности? После истечения срока действия программного обеспечения разработчик может вымыть руки любым * проблемным * поведением: -P –

+6

Интересный вопрос, который также может быть сформулирован как * Как полупеченный мой код разрешен? *;) – BalusC

ответ

71

Longer чем вы ожидаете.

+21

+1. Возможно * много * дольше :-) –

+7

+1. Я написал код, который должен был использоваться в течение 20 * минут * и в конечном итоге использовался более 3 * лет *. Результат не был интересным для поддержания. – Aaronaught

+0

Я только что сделал «в основном», заменив приложение интрасети. Часть этого кода была датирована 1996 годом. – chris

1

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

21

Вы не можете получить общий ответ здесь. Зависит от того, какой проект вы строите. Если вы пишете программное обеспечение для космического зонда, вы можете запрограммировать его так, чтобы он работал в течение следующих 100 лет и более. Но если вы программируете специальное предложение Xmas для веб-страницы вашей компании, должно быть достаточно нескольких недель ...

+0

Хороший ответ, я когда-то слышал, что этот код имеет средний срок службы около 7 лет ... но я мог ошибаться. – Zoidberg

+6

@ Zoidberg, я также читал, что хорошее программное обеспечение занимает десять лет, а это значит, что в среднем код плохой :) –

+2

@Andreas - Что звучит правильно. – Rook

35

Eternity.

Учитывая, что старая система продолжает работать на виртуальных машинах, мы должны предположить, что весь полезный код будет работать вечно. Существует множество систем, которые выполняются с 60-х годов, например, базовый код в финансовом секторе, и, похоже, нет никаких указаний на то, что эти системы когда-либо будут заменены. (И тем временем внешний интерфейс заменяется каждый год на последнюю причуду в веб-технологиях. Таким образом, чем ближе ваш код к ядру вашей системы, тем более вероятно, что он будет работать вечно.)

+4

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

+0

@michael достаточно верно, эта система продолжает развиваться (мы могли бы даже сказать, что только эволюционирующая система будет работать вечно). Однако текущие исследования показывают, что маловероятно, что каждая линия будет меняться во время эволюции, система обычно разваливается на стабильные и постоянно меняющиеся части. – akuhn

+11

Это очень, очень старый вопрос :) Корабль Тесея - http://en.wikipedia.org/wiki/Ship_of_Theseus –

3

Я не думаю, что код будет длиться так долго. Подумайте обо всех изобретениях и достижениях за последние 90 лет.

В 2100 году нам не придется записывать код. Будет какой-то интерфейс мозга-машины.

+3

Тогда мы, вероятно, будем использовать эти интерфейсы с мозгом-машиной для * написания кода *. Обещания заменить «написание кода» на X были на протяжении десятилетий, но никогда не поставлялись. Примеры для инструментов X: 5GL, RAD, CASE, MDA. –

+1

Посмотрите, что Фред Брукс должен сказать о существенных и случайных сложностях. Или, рассмотрите эту цитату: «Сделайте все как можно проще, а не проще». Существует определенная степень сложности, которую программы обязательно имеют. Или из эпизода анимационной серии Бэтмена: «Ты не хочешь быть в моем сознании. Это не приятное место». –

+7

У меня уже есть интерфейс «мозг-машина»: он называется моей клавиатурой. Клавиатуры не отвечали за Y2K, поэтому я не вижу, как новый интерфейс «мозг-машина» может исправить что угодно, кроме, возможно, RSI. – Ken

0

Вот мои два цента:

Когда мы разрабатываем проект, мы обычно объявляем его до последнего «по крайней мере» 5 лет. Обычно не более 10 лет, прежде чем мы переконструируем его и построим его на всем протяжении. (Мы говорим о проектах среднего размера).

Что обычно происходит, так это то, что новый проект, который вы строите, должен заменить старый, либо технологический мудрый (т. Е. Переход от MF к окнам, VB к .net и т. Д.), Но этот проект никогда не заканчивается. Таким образом, ваш клиент в конечном итоге работает с двумя системами одновременно, и эта система остается тем, что позже называется «наследием».

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

Но чтобы ответить на ваш вопрос, я бы поставил на 5-10 лет до того, редизайн, и если ваши даты не будут длинными в будущем, не нужно беспокоиться об ограничении 2100.

10

Иногда код длится дольше, чем вы думаете. Но более важным является аргумент скользкого склона. Как только вы простите себе немного не-пуленепробиваемости, у вас может возникнуть соблазн еще больше оптимизировать и сэкономить на логической правильности, пока он окончательно не укусит вас.

Кстати, я рекомендую иметь идентификатор проблемы (например, номер случая FogBugz) в каждом комментарии TODO, чтобы люди могли подписаться и отслеживать этот TODO.

+1

Мне нравится идея иметь bugid для каждого TODO, но это становится проблемой на предприятиях, которые отслеживают дефекты строго, поскольку у этих магазинов есть проблемы с дефектами, которые находятся в «открытом» состоянии в течение нескольких месяцев (лет?). Кроме того, в таких магазинах, как правило, нахмурился, чтобы внести изменения в код, которые не вызваны дефектами, сообщенными клиентами. –

+2

Разве не скользкий аргумент склона обычно считается ошибочным только потому, что * может * быть на самом деле промежуточным? – waxwing

+1

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

1

Я всегда пытался кодировать, как мои приложения должны работать «навсегда». Я очень уверен, что больше не буду в 2100 году, но, зная, что у моего программного обеспечения есть срок годности, я не чувствую себя хорошо. Если вы знаете о таких вещах, старайтесь избегать их! Вы никогда не узнаете, но какой-то неизвестный программист в будущем может быть благодарен.

+0

Вам нужно справиться с тем, что нам нужно будет пересмотреть понятие високосных лет где-то до 29 февраля, 100000? По-видимому, вращение Земли не настолько предсказуемо.Очевидно, есть пределы, но что такое здравомыслящий, а что нет? – MSalters

+3

@MSalters: разумно программировать календарь, который мы сейчас используем. Если мы изменим работу високосных лет, то это уже не тот календарь: это разница между юлианским и григорианским календарями. Точно так же никто не будет обвинять ваше программное обеспечение в том, что он не смог использовать Марсианский революционный календарь, когда он появился в AD 3762. –

11

Никто не знает. Профессиональное программирование существует уже 30-40 лет, поэтому никто не знает, будет ли код прослужить 100 лет. Но если ошибка Y2K является показателем, то много кода будет придерживаться гораздо дольше, чем предполагал программист. Имейте в виду, что даже если учесть это, он все равно может оставаться дольше, чем вы ожидали. Независимо от того, сколько вы готовите, он все еще может пережить ожидаемую продолжительность жизни.

Мой совет - не планировать код на протяжении последних 100 лет. Вместо этого постарайтесь убедиться, что весь ваш код будет работать в течение одного и того же промежутка времени, т. Е. Часть его не должна прерываться через 2 года, а другая часть не удастся через 100 лет. Помните, что вы всегда должны сначала фиксировать самое слабое звено, поэтому нет смысла укреплять самую сильную связь.

2

Ну, мы недавно сделали формат метки времени, где время хранится в беззнаковое 64-битное целое число, как микросекунд от 1970. продлится до 586912 года, который должен быть достаточно.

Кодирование «навсегда» не нужно - конечно, вы можете использовать BigIntegers и везде, но почему? Просто будьте готовы к более чем 5 или 10 годам. В наши дни 20-летний код производства не совсем необычен, и я подозреваю, что в ближайшем будущем средний жизненный цикл станет еще более продолжительным.

0

ИМХО это сводится к мастерству: гордость, которую мы берем в нашей работе, кодируя стандарт, нам не будет стыдно видеть другого реального кодера.

В случае таких дат, вы заявили, что это gracefully fails после 2100. Похоже, вы можете удалить TODO без плохой совести, потому что вы создали ответ, который позволит причину сбоя легко диагностироваться и фиксироваться в (хотя и вероятном или маловероятном) обстоятельстве, что происходит сбой.

0

Есть примеры кода, работающего на более старых машинах, которым 40 или 50 лет.

(Интересные биты в этой теме: http://developers.slashdot.org/developers/08/05/11/1759213.shtml).

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

Другие вещи, которые вы должны думать о:

1) Что такое «активный образ жизни» приложения - то есть там, где это будет использоваться и обработки.

2) Что такое «неактивная жизнь» приложения, то есть он не будет использоваться изо дня в день, но может использоваться для извлечения и просмотра старых записей. Например, британский аудит закона означает, что записи должны быть доступны в течение 7 лет, поэтому это может быть 7 лет от последнего использования системы.

3) Каков диапазон будущих данных, с которыми ему нужно справиться? Например, скажите, что вы снимаете даты истечения срока действия кредитной карты - у вас может быть карточка, срок действия которой не истечет в течение десятилетия. Вы можете справиться с этой датой?

Ответы на эти вопросы, как правило, приводят вас к предположению, что вы никогда не должны сознательно писать код, который имеет ограничения по дате, кроме тех, которые использует язык OS/Language, который вы используете.

1

Вплоть до момента, когда она ломается или иным образом перестает быть полезной, а затем немного дольше после того

+0

Я собирался сказать достаточно долго, чтобы терпеть неудачу. – ElGringoGrande

-2

3-5 лет макс. После этого вы перешли на другую работу и оставили свой дерьмовый код.

+1

Я работаю 10 лет. Некоторым из кода, на который я полагаюсь, больше 30 лет. – slim

+3

-1 опрометчивый. если бы Данте жил сегодня, восьмой круг был бы для программистов, которые сбрасывали дерьмо на других. –

0

Вопрос не в том, «Как долго длится код?» а скорее: «Как долго события в моем коде влияют на приложение?»

Даже если ваш код заменен, возможно, он заменит код, который делает то же самое. В какой-то степени это является прямой причиной проблемы Y2K. Более того, это является непосредственной причиной Y2038 problem.

16

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

+2

Во всех нас есть маленький психодер. – Cerin

0

Также имейте в виду, что вы подразумеваете под последним.

Например, оригинальная операционная система UNIX была разработана 30 лет назад. Но за эти 30 лет продукт со временем эволюционировал.

Хотя, это меня не удивит, если в нем по-прежнему существует немного, но оригинального кода.

Так что подумайте об этом двумя способами ...1) вы когда-либо протискиваете код, который будет затронут в будущем, 2) продукт/код будет развиваться, если у вас есть поддержка и инволюция.

1

Эфирные вещи:

  1. Насколько хорош ваш внутренний класс дата

  2. Это не только с течением времени, но (получить очень надежную версию библиотеки и придерживаться его!) а также рост количества запросов, которые хотят ваши пользователи. Например, возможно, у вас есть 30-летние ипотечные вклады сейчас, но в следующем месяце кто-то решает ввести 99-летнюю аренду со сроком погашения 2110 или 100-летнюю облигацию Disney!

Если вы принимаете 2 цифры года входы с окошком даты, думаю, очень тщательно о том, что применяется для даты начала и окончания, и дают много немедленной обратной связи.

0

В моем нынешнем магазине есть большая база кода, которая управляет финансовыми приложениями со сложными бизнес-правилами. Некоторые из этих правил кодируются в хранимых процедурах, некоторые - в триггерах, а некоторые - в программном коде 3gl и 4gl. Существует код с конца 90-х, и ни один из них в ваших «традиционных» языках Legacy, таких как COBOL или FORTRAN. Как можно себе представить, это куча спагетти-кода, созданная до того, как TDD что-то значило, поэтому люди не хотят ничего трогать.

0

У меня был случай быть заключенным на контракт более чем через десять лет после того, как он проконсультировался с портированием кода на новую платформу (OS/2 просто не так популярен в эти дни!). Если вы сомневаетесь, предположите, что ваш код будет жить дольше, чем вы. По крайней мере, запишите этот недостаток: исправить их, если это не потребует огромной работы, чем документировать их.

0

В 1995 году я начал работать на новой работе, на 8-летней основе кода. Итак, дата выхода - 1987 или около того.

Возможно, что код все еще находится в эксплуатации. Это то что ? 23 года.
Были некоторые шаги компании, но они, вероятно, сохранили программное обеспечение (потому что оно работает) Если он все еще находится в эксплуатации, он все равно будет работать через десять лет или около того.

Это не удивительно, особенно высоких технологий код в C (в основном)

В 1999 году я начал на новую работу, тем кодовая имел антецеденты к 1984 году новая версия я разработал в 2000 году является все еще находящийся в эксплуатации, с элементами дизайна, такими как форматы файлов данных из предыдущего (и т. д.), и это будет программа развития в течение 26 лет.

Таким образом, проблема 2086 года начинает зависеть от того, как эти 32 бит подписали переключение time_t.

0

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

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

В качестве примечания стороны: Одним из основных плюсов автоматизированного модульного тестирования является проверка кода, который вы даже не можете запомнить, есть в системе!:)

0

Пока люди могут продолжать взимать плату за поддержку с людьми, которые готовы заплатить за это.

Смежные вопросы