Данные - главное в системе. PDF Печать E-mail

(В оригинале - It is all about the data)

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

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

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

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

Такой взгляд на систему – как на структуру лежащих в ее основе данных – может упростить для понимания даже самую сложную систему. Упростить до минимума, необходимого для понимания того, как систему построить и запустить.

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

И конечно же, множество основных проблем в проектировании ПО напрямую относятся к данным. Собирает ли система правильные данные в правильное время? Кто должен иметь возможность эти данные видеть и изменять? Данные какого качества собраны и как быстро растет их количество? Какая их структура и как именно обеспечивается надежность? Когда данные уже в системе, возникает еще один вопрос – нужно ли вывести и/или изменить существующие данные или добавить новую порцию?


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

Автор оригинала - Paul W. Homer