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

Советы по дизайну программы, которая будет запущена через 25 лет

Если вы создаете приложение (которое в основном обрабатывает данные), которое должно быть запущено сейчас и возможно (может быть, нет) 10 или 25 лет спустя, какие советы по дизайну существуют для таких приложений?

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

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

Я бы пошел на UNIX (Linux) + Python + YAML/JSON (/CSV/plaintext), какие-нибудь советы для этого выбора или альтернативный набор инструментов? Схема / lisp существует уже целую вечность, и очень сложно испортить основы языка, учитывая, что все будет самодостаточным.

EDIT: пожалуйста, не забудьте советы о фактическом дизайне и коде, например выпуск 2038 года!

4b9b3361

Ответ 1

Собственно, требование №1 будет "использовать популярный язык с официальной спецификацией Международной организации по стандартизации". Это гораздо важнее любых других вещей, которые вы упомянули. ( "Открытый исходный код"? Пожалуйста... Существуют тысячи программ с общественным достоянием 80-х и 90-х годов, которые сегодня можно было бы практически невозможно выполнить.)

Например, если вы жестко кодируете спецификации C99 или С++ 98 или С++ 03 или даже С++ 0x, вероятность составляет примерно 99,9999%, что компилятор будет существовать для вашей платформы 10, 20 и Через 50 лет, который может обрабатывать ваш код с нулевыми изменениями. Это, возможно, самая полезная вещь о формальной спецификации для популярного языка.

Кодирование жестко такой спецификации может быть нелегким, поскольку многие нетривиальные программы (например, что-либо с графическим интерфейсом) не могут быть записаны на 100% переносимо.

Но это все равно, где я начну. Реализуйте столько, сколько сможете, в 100% стандартном коде, а затем изолируйте остальные (например, графический интерфейс) в модулях, зависящих от платформы. Минимизируйте размер последнего, и вы минимизируете работу, которую должны выполнять ваши преемники.

Бесплатные сторонние инструменты - будь то Boost или что-то вроде Python - отличные ответы на некоторые вопросы, но не на этот.

Ответ 2

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

Ответ 3

Было бы интересно узнать период полураспада развернутого приложения. Я предполагаю, что 10 лет вовсе не необычны, и основным приложениям предприятия может быть больше 25 лет - там есть много приложений для мейнфреймов /CICS.

Следовательно, я бы сказал, что любое серьезное развитие должно предусматривать, что приложение будет использоваться не менее 10 лет. У крупных Enterpises вполне может быть политика "Evergreening" - это перенос приложений на более поздние версии операционных систем, баз данных и т.д.

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

Ваш предложенный стек разумен, Java и Spring или Java EE тоже будут хороши.

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

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

Ответ 4

Java может быть хорошим языком для написания кода. java имеет отличную обратную совместимость, большую стандартную библиотеку, которая также имеет хорошую обратную совместимость и достаточно популярна, что она, скорее всего, будет через 25 лет. Даже если java выходит из употребления, существует достаточно jvm-языков, таких как scala и clojure, что, вероятно, станет достаточно популярным, чтобы обеспечить выживание jvm и java как продукта.

Python не может быть хорошим выбором, поскольку они иногда нарушают совместимость (python 3 несовместим с python 2).