Современные, кгм, программно-аппаратные вычислительные комплексы проекты все чаще выходят за рамки одной конкретной машины и конкретного пользователя.
Приходит сеть, вынужденная многопоточность (потому что два разных компа – это, как ни крути, два разных потока), транзакции, понятие времени, понятие латенси, гонок (data races) и всякого такого.
Вроде бы, проблемы у всех одинаковые, тем не менее, вменяемых инструментов до сих пор нету.
Есть ОО дизайн, есть реляционная модель, есть всякие CASE инструменты, нынче появились также различные онтологии, микроформаты и прочие попытки распределенного хранения данных, но у них всех есть два общих недостатка:
1. Они ориентируются на формальные математические модели, и не имеют понятия “достоверности” (valid/invalid data) данных, а также “доверия” (trusted/untrusted) к данным. Отсюда семейство уязвимостей, связанных с инжектированием вредоносного кода, ошибки и вылеты при работе с внешними источниками информации (датчиками и людьми), паника при повреждении носителей информации, невозможность без предварительной очистки импортировать внешние корпуса данных (что порождает проблемы разнообразной совместимости) и т.д.
2. Нету понятия времени. Реляционная модель ломается, когда начинается эволюция, с ООБД ситуация теоретически лучше, на практике мало кто доходит до корректной эволюции данных параллельно с кодом, а случаи автоматической эволюции мне вообще неизвестны, увы.
Онтологические базы знаний еще более статичны, и призваны представлять замороженный конденсат знаний, но почти полностью непригодны для отражения динамически изменяющейся проблемы, которую, вроде бы, должны помогать решать.
Также, статичными являются любимые многими юнит тесты, которые очень помогают при проверке, “не сломали ли чего, что должно было остаться”, но требуют эволюции не меньше, чем весь остальной изменяющийся код.
Единственное место, где есть вменяемое, пускай и примитивное, понятие времени – современные графические редакторы, рассчитанные на не-программистов, с бесконечным undo\redo, а также системы контроля версий.
Очень интересно на этом фоне выглядит CouchDB, в которой, вроде бы, были учтены большинство из вышеприведенных аспектов (кроме доверия), надо будет как-то посмотреть.
А в общем – складывается впечатление, что в этой области никаких велосипедов еще пока не изобретено, и придется делать что-то своё :(
Как-то так.