Переносимость и внесение усовершенствований
Система разрасталась, появлялись новые версии, и в какой-то момент кто-то решил, что алгоритм вычисления контрольной суммы не идеален, и sum была изменена с использованием лучшего алгоритма. Кто-то еще пришел к тому же выводу и тоже изменил sum, реализовав другой, столь же хороший алгоритм, и т. д. В результате сейчас имеется несколько версий sum, каждая из которых выдает свой вариант ответа. Мы поставили эксперимент, скопировав некий файл на другие машины, чтобы выяснить, какие же результаты покажет sum в каждом конкретном случае:
Непонятно, произошел сбой в передаче или просто мы столкнулись разными версиями sum. Может быть и то, и другое.
Таким образом, sum являет собой яркий пример препятствия на пути переносимости: программа, призванная помогать в копировании файлов с одной машины на другую, имеет несколько несовместимых версий, что делает ее абсолютно непригодной для использования.
Для выполнения изначально поставленной задачи первая версия sum не подходила: алгоритм, заложенный в ней, был не самым эффективным, но приемлемым. Ее "улучшение", может, и сделало собственно команду лучше, но зато использовать ее по назначению стало нельзя. И дея то, надо сказать, не в том, что получилось несколько разных по существу команд, а в том, что все эти команды имеют одно и то же имя. Как видите проблема несовместимости версий может оказаться весьма серьезной.
Поддерживайте совместимость с существующими программами и данными.
Когда выпускается новая версия программы, например текстового редактора, то она, как правило, умеет читать файлы, создания предыдущей версией. При этом мы ожидаем, что из-за добавления новых возможностей формат должен измениться. Но зачастую новые версии оказываются не в состоянии обеспечить способ записи в предыдущем формате. Пользователи новых версий, даже если они не обращаются к добавленным возможностям, не могут применять свои файлы совместно с пользователями более старой версии, таким образом, обновлять программы приходится сразу всем. Независимо от того, чем определяются такие решения – технической необходимостью или маркетинговой политикой, – о таких случаях можно только сожалеть.
Совместимостью сверху вниз называется возможность программы соответствовать спецификациям своих более ранних версий. Если вы собираетесь изменить свою программу, убедитесь, что при этом вы не создадите противоречий со старыми версиями и связанными с ними данными. Тщательно документируйте изменения и продумайте способ восстановить первоначальные возможности. И главное, задумайтесь над тем, перевесят ли достоинства предлагаемых вами усовершенствований потери от непереносимости, которые при этом возникнут.