Рассказ о том, как в пирожке можно испечь дом

12.4.1. О теории программирования и логике программистов.

 

 

       Любой объект нашего физического мира имеет своё предназначение, задуманное и реализованное Творцом либо Программистами. Реализация материального объекта происходит благодаря работе специального программного обеспечения, размещенного на инфрафизическом уровне реальности. Свойства же любого осязаемого нами объекта определяются заданными этим программным обеспечением алгоритмами поведения при взаимодействии с другими объектами.

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

 

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

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

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

       И всё это произошло на протяжении каких-то нескольких десятков лет, причём в условиях полного интеллектуального порабощения человечества. Что же можно сказать об уровне и возможностях Программного Обеспечения нашего мира, а особенно – о Программистах!…

 

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

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

 

       Давайте попробуем поставить себя на место программиста, у которого стоит задача создать материальный объект (или если Вам так удобнее представлять – объект на экране монитора) для выполнения некоторой задачи в рамках большой, постоянно исполняемой программы (скажем, на постоянно работающем сервере). Что он будет делать?

       Конечно же, программист не станет разрабатывать всю программу «с нуля». В первую очередь ему нужно подобрать уже готовые подпрограммы, визуальные компоненты, формы, типичные запросы, ранее наработанные подходы и методики для того, чтобы, используя все доступные ему средства разработки, за минимальное время собрать работающую программу в конкретной среде. После этого начинается этап тестирования, исправления недочётов. В конечном итоге, в идеале, получается программа, которая точно и вовремя выполняет то, что и требовал от программиста заказчик.

 

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

 

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

       Как же отреагирует программа на нештатную ситуацию? Это зависит, в большой мере, от уровня и квалификации программиста. Хороший стиль программирования, помимо всего прочего, состоит в том, что весь исполняемый программный код заключается в так называемые блоки исключений. Это означает, что если в процессе выполнения любой части задания программа получает на вход недопустимые данные или происходит любой другой непредвиденный сбой, вроде зацикливания или деления на ноль, она всегда должна знать, что делать в такой ситуации, дабы не допустить «зависания» или срыва задания в целом.

 

       Такое действие в теории программирования называется обработкой исключительной ситуации. В большинстве случаев, чтобы «не париться» с этими ситуациями, программисты оставляют этот блок… пустым! Что это даёт? Программа молча «проглатывает» исключительную ситуацию и продолжает далее работать, как ни в чём не бывало, не уведомляя об этом пользователя и не предпринимая никаких других действий в среде своего выполнения.

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

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

 

       Программа, выполняющаяся в родной для неё среде, может оперировать любыми параметрами этой среды, нужными программисту. Например, пиксель может поочередно возникать в разных местах монитора. Если жители страны Монитории возьмутся следить за выкрутасами этого пикселя, у них сорвёт крышу, и вся их физика полетит коту под хвост, ибо скорость пикселя получится бесконечной. Эти наиболее любознательные жители также называются уфологами; им никогда не надоедает смотреть на эти пиксели…

       Если же программисту нужно сделать «плавное» изменение в мирке, нарисованном на экране монитора, он будет вынужден написать программу так, чтобы она оперировала свойствами существующих объектов Монитории, с помощью которых будет выполняться данное задание. В данном случае программа уже будет существенно ограничена некоторыми свойствами имитируемых объектов, зато в остальном она может ни в чём себе не отказывать.

 

       Теперь, вооруженные этими знаниями, приступим к анализу свойств «пирожков».