2. Алгоритмы и структуры данных. Выбор абстрактного представления реальности

Делать выбор представления данных всегда нужно с учетом операций, которые нужно выполнять с данными. Хороший пример – представление чисел, которые сами суть абстракции свойств некоторых объектов:
  1. Если единственное (или основное) действие, которое нужно выполнять, – сложение, то хорошим представлением числа может быть черточек. Правило сложения при таком представлении – очевидное и очень простое. Римская нотация основана на этом принципе простоты, и правила сложения просты для маленьких чисел. 
  2. С другой стороны, представление арабскими цифрами требует не очевидных правил сложения (для маленьких чисел), и их нужно запоминать. Однако ситуация меняется на противоположную, если нужно складывать большие числа или выполнять умножение и деление. Разбиение этих операций на более простые шаги гораздо проще в случае арабской нотации благодаря ее систематической позиционной структуре.


В задаче представления положения объекта:
  1. первое решение может касаться выбора пары чисел в, скажем, декартовых или полярных координатах. 
  2. Второе решение может привести к представлению с плавающей точкой, где каждое вещественное число x состоит из пары целых, обозначающих дробную часть f и показатель e по некоторому основанию (например, x = f * 2e). 
  3. Третье решение, основанное на знании, что данные будут храниться в компьютере, может привести к двоичному позиционному представлению целых чисел. 
  4. Наконец, последнее решение может состоять в том, чтобы представлять двоичные цифры электрическими зарядами в полупроводниковом устройстве памяти. 

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

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

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