В современном программном обеспечении грань между кодом и данными может стать ужасно тонкой и размытой, и не всегда легко отличить их друг от друга.В конце концов, что касается компьютера, все это data , если только существующий код - обычно ОС - не определен иначе.Даже программы должны быть загружены в память как данные, прежде чем ЦПУ сможет их выполнить.
Например, представьте алгоритм, который вычисляет стоимость заказа, когда более крупные заказы получают более низкие цены за единицу.Он является частью более крупной программной системы в магазине, написанной на C.
Этот алгоритм написан на C и считывает файл, который содержит входную таблицу, предоставленную руководством, с различными ценами за единицу товара исоответствующие пороги размера заказа.Большинство людей утверждают, что файл с простой таблицей ввода - это, конечно, данные.
Теперь представьте, что хранилище меняет свою политику на какую-то асимптотическую функцию, а не на предварительно выбранные пороги, так чтоэто может разместить безумно большие заказы.Они могут также захотеть учесть обменные курсы и инфляцию - или что-либо еще, что придут к руководству.
Магазин нанимает компетентного программиста, и она встраивает хороший синтаксический анализатор математических выражений в исходный код на Си.Входной файл теперь содержит выражение с глобальными переменными, такими функциями, как log()
и tan()
, а также некоторые простые вещи, такие как постоянная Планка и скорость carbon-14 * 1016.* деградация.
cost = (base * ordered * exchange * ... + ... / ...)^13
Большинство людей по-прежнему утверждают, что выражение, даже если оно не так просто, как таблица, на самом деле является данными.В конце концов, это, вероятно, предоставлено руководством как есть.
Магазин получает большое количество жалоб от клиентов, которые потеряли сознание, пытаясь оценить свои расходы, и от бухгалтеров о большом количестве потерь.менять.Магазин решает вернуться к столу для небольших заказов и использовать последовательность Фибоначчи для более крупных заказов.
Программист устал от модификации и перекомпиляции кода C, поэтому она встраивает Pythonвместо интерпретатора.Входной файл теперь содержит функцию Python, которая опрашивает целое число Fib(n)
обезьян на предмет стоимости больших заказов.
Вопрос: Является ли данными входного файла?
С технической точки зрения нет ничего другого.И таблицу, и выражение необходимо проанализировать перед использованием.Синтаксический анализатор математических выражений, вероятно, поддерживает ветвление и функции - возможно, он не был завершен по Тьюрингу, но он все еще использует собственный язык (например, MathML).
И все же сейчас многие людиутверждают, что входной файл просто стал кодом .
Так что же является отличительной особенностью , которая превращает формат ввода из data в код ?
Модифицируемость: Необходимость перекомпиляции всей системы для внесения изменений - очень хорошая индикация кодацентрическая система.Тем не менее, я легко могу представить (ну, скорее, я действительно видел ) программное обеспечение, которое было разработано достаточно некомпетентно, чтобы иметь, например, встроенную таблицу ввода во время компиляции.И давайте не будем забывать, что во многих приложениях все еще есть значки, которые большинство людей сочли бы данными - встроенными в свои исполняемые файлы.
Формат ввода: Это - на мой взгляд, наивно - самый распространенный фактор, который люди считают: «Если это на языке программирования, то это код» .Хорошо, C - это код - вы должны его скомпилировать.Я также согласен с тем, что Python также является кодом - он является полноценным языком.Так почему же не является XML / XSL-кодом? XSL - довольно сложный язык сам по себе - отсюда и название L
.
На мой взгляд, ни один из этих двух критериев не является действительной отличительной чертой .Я думаю, что люди должны рассмотреть что-то еще:
- Ремонтопригодность: Короче говоря, если пользователь системы должен нанять третью сторону, чтобы сделать экспертиза необходима для изменения поведения доступной системы, тогда система должна считаться кодоцентричной до некоторой степени.
Это, конечно, означает, что система являетсяуправляемые данными или нет, следует рассматривать как минимум по отношению к целевой аудитории - если не по отношению к клиенту в каждом конкретном случае.
Это также означает, чтоРазличия могут быть затронуты доступным набором инструментов.Спецификация UML - настоящий кошмар, но в наши дни у нас есть все эти графические редакторы UML, которые могут нам помочь.Если был какой-то сторонний высокоуровневый инструмент ИИ, который анализирует естественный язык и производит XML / Python / что угодно, то система становится управляемой данными даже для гораздо более сложного ввода.
Возможно, небольшой магазинне имеет опыта или ресурсов для найма третьей стороны.Таким образом, то, что позволяет работникам изменять свое поведение со знанием, которое можно получить на среднем курсе менеджмента - математику, диаграммы и т. Д. - можно считать достаточно управляемым данными для этой аудитории.
С другой стороныу многомиллиардной международной корпорации обычно в штате есть группа ИТ-специалистов и веб-дизайнеров.Поэтому XML / XSL, Javascript или даже Python и PHP, вероятно, достаточно просты для обработки.У него также есть достаточно сложные требования, чтобы что-то более простое могло бы просто не сократить его.
Я считаю, что при разработке программной системы следует стремиться к достижению такого точного баланса в используемых форматах ввода, где целевая аудитория может делать то, чтоони нуждаются в, без необходимости часто звонить третьим лицам.
Следует отметить, что аутсорсинг размывает линии еще больше.Есть довольно много проблем, для которых текущая технология просто не позволяет доступному решению обратиться к дилетанту.В этом случае целевой аудиторией решения, вероятно, следует считать третью сторону, которой будет передана операция.Можно ожидать, что в этой третьей стороне будет задействовано немало экспертов.