Код - это палимпсест

Есть что распаковать.

Программное обеспечение - это готовый продукт или постоянно действующий процесс?

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

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

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

Каждое изменение в коде создает новые взаимосвязи между классами и функциями, порождая и запутывая значения с каждым новым словом, добавленным в код. Взаимозависимости увеличиваются. La différance становится явным.

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

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

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

Означающее после означающего мы продолжаем читать, но не можем найти значение того, что написано в коде. Нет даже места для начала, нити, за которой нужно следовать. Тем не менее, программный артефакт работает, он вроде бы выполняет свою функцию. Но нам нужно изменить его, улучшить, но у нас нет путевой точки, которая сообщала бы нам, где мы находимся, нет ландшафтного объекта, который можно было бы разместить на карте и указать да, мы здесь. На этих равнинах уже много лет никого не было. Пески сместились, и ветер не собирается прекращать дуть. Руины почти не видны. Мы можем угадать форму более старого сооружения прошлой цивилизации. Распад программного обеспечения - это реальность.

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

Эволюция программного артефакта отражает вкусы и желания эпохи. Были области, которые хотели бы удовлетворить корпоративного читателя, наполненные объектно-ориентированными шаблонами, которые прорезают беспорядок и связывают части, формируя связи, которые не имеют смысла, но продвигают вперед намерения. Читатель может быть не в состоянии понять, почему класс A связан с классом B, если ему не сказано, что это просто соответствует идее корпоративного программного обеспечения. Но затем классы разваливаются, падая на пол, оставляя кучу функций, сгруппированных в модули. Функции настолько малы и настолько универсальны, что только при использовании мы можем сказать, какое значение они несут или производят. Функциональное программирование попыталось завладеть проектом, поэтому теперь читатель сталкивается с конфликтующими стилями. Пора узнать, где заканчивается лес, а где начинается равнина, где идет снег, а где замерзшая вода становится рекой.

Приказывать, управлять
- значит начинать называть имена;
когда имена множатся,
пора остановиться.
Если вы знаете, когда остановиться
, вы не в опасность.
- Урсула Ле Гуин - Тао Дэ Цзин