В программе есть много всего. Это и кусок текста, набранный программистом; и движущая сила, которая заставляет компьютер делать то, что он делает; это и данные в памяти компьютера, но одновременно и управление действиями, выполняемыми в той же памяти. Попытки провести аналогии между программами и уже знакомыми нам объектами, как правило, терпят неудачу. Одна из приблизительно подходящих - это машина: в ней обычно задействовано много отдельных частей. И чтобы понять принцип их работы, нужно рассмотреть, как они взаимодействуют, обеспечивая работу целого.
Компьютер - физическая машина, играющая роль хозяина для этих нематериальных машин. Сами компьютеры могут выполнять только до глупого простые вещи. Причина, по которой они так полезны, заключается в том, что они делают это поразительно быстро. Программа может изобретательно комбинировать невероятное количество простых действий и таким образом делать очень сложные вещи.
Программа - это мысленная конструкция. Построить ее ничего не стоит, и она ничего не весит, она легко растет под нашими пальцами, печатающими на клавиатуре.
Но без должного внимания размер и сложность программы выходят из под контроля, что способно привести в замешательство даже ее создателя. Держать программы под контролем - главная проблема программирования. Пока программа работает, все отлично. Искусство программирования - это умение контролировать сложность. Покорить великолепную программу - значит сделать ее простой в своей сложности.
Некоторые программисты считают, что лучше всего справиться с проблемой, если использовать в программах лишь небольшой набор хорошо понятных приемов. Они разработали строгие правила («рекомендуемые методы~), предписывающие формы, которые должны иметь программы, и советуют тщательно придерживаться их, чтобы оставаться в безопасной зоне.
Это не только скучно, но и неэффективно. Новые проблемы часто требуют новых решений. Сфера программирования молода и все еще быстро развивается, и она достаточно разнообразна, чтобы в ней оставалось место для совершенно разных подходов. При разработке программ сделано много ужасных ошибок; вам следует двигаться вперед и тоже совершать ошибки, чтобы в них разбираться. Понимания того, как выглядит хорошая программа, можно достичь на практике, но не выучить, руководствуясь списком правил.