Подтвердить что ты не робот

Как долго длится код?

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

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

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

Обновление

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

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

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

4b9b3361

Ответ 1

Дольше, чем вы ожидаете.

Ответ 2

Вечность.

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

Ответ 3

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

Ответ 4

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

Ответ 5

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

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

Ответ 6

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

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

Ответ 8

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

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

Ответ 9

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

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

Ответ 10

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

Ответ 11

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

Ответ 12

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

Ответ 13

Существенные вещи:

  • Насколько хорош ваш внутренний класс даты (получите очень надежную версию библиотеки и придерживайтесь ее!)

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

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

Ответ 14

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

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

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

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

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

Ответ 15

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

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

Ответ 16

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

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

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

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

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

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

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

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

Ответ 17

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

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

Ответ 18

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

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

Хотя, меня не удивило бы, если в нем еще есть небольшой, но оригинальный код.

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

Ответ 19

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

Ответ 20

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

Ответ 21

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

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

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

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

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

Ответ 22

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

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

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

Ответ 23

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

Ответ 24

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