Что такое есть компьютерная программа? Предисловие

На мой личный и субъективный взгляд человека, который написал свою первую программу в 1979 году, и с тех пор уже черт знает сколько лет занимается разработкой программ, вся индустрия программирования находится в глубоком структурном кризисе. И, более того, уверенно двигается все глубже в эту самую, как бы это политкорректно сказать? А, да, в кризис!

Я собираюсь подробно обосновать свою мысль. И, далее, предложить, как из него выйти.

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

Обратимся к википедии, как к хранилищу «здравого смысла»[1]:

Компьютерная программа — последовательность инструкций, определяющих процедуру решения конкретной задачи компьютером (вычислительной машиной). Программы необходимы для работы компьютера… (https://ru.wikipedia.org/wiki/Компьютерная_программа)

В этих трех замечательных строчках скрываются две ловушки. Одна из них (вторая) очевидна, а первую надо раскладывать.

Очевидная ловушка: «Программы необходимы для работы компьютера» — Отнюдь! Это компьютеры нужны для того, чтобы исполнять программы, которые, в свою очередь, нужны для решения наших человеческих задач.

Если уж мы живем в настолько вывернутом мире, что программы необходимы для работы компьютера, давайте уж везде ставить телегу впереди лошади. Как например, вот такое высказывание: Автомобили нужны для работы дороги! Логично же, ведь если не будет автомобилей, то дорога будет стоять без дела?

Не буду останавливаться на этой простой ловушке. Вернусь к главной.

Программа – это последовательность инструкций.

Как много нам вопросов чудных готовит это краткое определение!

Например,

  • О каких инструкциях идет речь? Языка программирования или исполняемого кода?
  • А если в программе много ниток исполнения? Где же последовательность?
  • А распределенные программы?
  • А как же быть с архитектурой программы? Где она здесь?
  • А вот еще есть табличные алгоритмы? А программы, управляемыми данными?
  • И так далее, о чем я дальше еще скажу

Если снова обратится к аналогии, мы можем посмотреть на процессор и сказать: тут множество транзисторов, соединенных проводниками, по которым бегает ток.

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

Определение программы, как последовательности инструкции, столь же бессмысленно, как определение процессора как кучи транзисторов, соединенных проводами.

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

Мне придется сказать много слов, чтобы пояснить эту мысль. Инерция определения слишком велика, надо посмотреть на программирование с разных сторон.

[1] Здравый смысл — совокупность взглядов на окружающую действительность, навыков, форм мышления, выработанных и используемых человеком в повседневной практической деятельности, которые разделяют почти все люди и которые можно разумно ожидать от почти всех людей без необходимости обсуждения. (https://ru.wikipedia.org/wiki/Здравый_смысл)

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *