На мой личный и субъективный взгляд человека, который написал свою первую программу в 1979 году, и с тех пор уже черт знает сколько лет занимается разработкой программ, вся индустрия программирования находится в глубоком структурном кризисе. И, более того, уверенно двигается все глубже в эту самую, как бы это политкорректно сказать? А, да, в кризис!
Я собираюсь подробно обосновать свою мысль. И, далее, предложить, как из него выйти.
Начну я с самых основ, с той философской ошибки, которая, на мой взгляд, существенно способствовала кризису программирования. С ошибки в определении «компьютерной программы».
Обратимся к википедии, как к хранилищу «здравого смысла»[1]:
Компьютерная программа — последовательность инструкций, определяющих процедуру решения конкретной задачи компьютером (вычислительной машиной). Программы необходимы для работы компьютера… (https://ru.wikipedia.org/wiki/Компьютерная_программа)
В этих трех замечательных строчках скрываются две ловушки. Одна из них (вторая) очевидна, а первую надо раскладывать.
Очевидная ловушка: «Программы необходимы для работы компьютера» — Отнюдь! Это компьютеры нужны для того, чтобы исполнять программы, которые, в свою очередь, нужны для решения наших человеческих задач.
Если уж мы живем в настолько вывернутом мире, что программы необходимы для работы компьютера, давайте уж везде ставить телегу впереди лошади. Как например, вот такое высказывание: Автомобили нужны для работы дороги! Логично же, ведь если не будет автомобилей, то дорога будет стоять без дела?
Не буду останавливаться на этой простой ловушке. Вернусь к главной.
Программа – это последовательность инструкций.
Как много нам вопросов чудных готовит это краткое определение!
Например,
- О каких инструкциях идет речь? Языка программирования или исполняемого кода?
- А если в программе много ниток исполнения? Где же последовательность?
- А распределенные программы?
- А как же быть с архитектурой программы? Где она здесь?
- А вот еще есть табличные алгоритмы? А программы, управляемыми данными?
- И так далее, о чем я дальше еще скажу
Если снова обратится к аналогии, мы можем посмотреть на процессор и сказать: тут множество транзисторов, соединенных проводниками, по которым бегает ток.
И будем правы, вот только эта правота нам ничего не дает. Чтобы понять, как работает процессор, и, тем более, чтобы сконструировать процессор, надо видеть систему команд и иерархию взаимодействующих частей.
Определение программы, как последовательности инструкции, столь же бессмысленно, как определение процессора как кучи транзисторов, соединенных проводами.
Я утверждаю, что определение программы, как последовательности инструкций, не только бессмысленно, а значит, бесполезно, но и принципиально вредно.
Мне придется сказать много слов, чтобы пояснить эту мысль. Инерция определения слишком велика, надо посмотреть на программирование с разных сторон.
[1] Здравый смысл — совокупность взглядов на окружающую действительность, навыков, форм мышления, выработанных и используемых человеком в повседневной практической деятельности, которые разделяют почти все люди и которые можно разумно ожидать от почти всех людей без необходимости обсуждения. (https://ru.wikipedia.org/wiki/Здравый_смысл)