ПРОГРАММИСТКИЕ БАСHИ

     Hесколько слов об  авторе. Эдсгер Дейкстра  (Edsger W. Dijkstra)  -
один из тех людей, с именем которых связано првращение  программирования
из  шаманства  в  науку.  Работы  Э.  Дейкстры уже сегодня можно назвать
классическими.
     Одной  из  форм  научной  деятельности  Дейкстры  являются  письма,
которые  он  время  от  времени  посылает своим корреспондентам (а также
нанимателям:  живя  в  Голландии  в  г.  Эйндховене,  он работал в фирме
"Барроуз" ("Burroughs"), находящейся в США), призывая распространять  их
дальше. Сборник, содержащий некоторые из этих писем, был опубликовыан  в
1982  г.  Когда  взгляды  Э.  Дейкстры  стали  известны  широкому  кругу
программистов, они  вызвали сильную  (и далеко  не всегда положительную)
реакцию. С неоторыми сокращениями приводится эссе Э. Дейкстры.

                                Притча

     В незапамятные времена была организована железнодорожная  компания.
Один из  ее руководителей  (вероятно, коммерческий  директор) обнаружил,
что  можно  сэкономить  много  денег,  если  снабжать туалетом не каждый
железнодорожный  вагон,  а  лишь  половину  из  них.  Так  и решено было
сделать.
     Однако  вскоре   после  начала   пассажирских  перевозок   начались
неприятности с туалетами. Причина  их была крайне проста:  хотя компания
была  только  что  создана,  неразберихи  уже  хватало, и о распоряжении
коммерческого жиректора ничего не  знали на сортировочных станциях,  где
все  вагоны  считали  одинаковыми.  В  результате  в  некоторых  поездах
туалетов почти совсем не было.
     Чтобы  исправить   положение,  каждый   вагон  снабдили   надписью,
говорящей, есть  ли в  нем туалет,  и сцепщикам  было велено  составлять
поезда  так,  чтобы  около  половины  вагонов  имели туалеты. Хотя это и
осложнило  работу  сцепщиков,  вскоре  они  с  гордостью  сообщили,  что
тщательно выполняют новую инструкцию.
     Тем  не   менее  неприятности   с  туалетами   продолжались.  овое
расследование  их  причин  показало,  что  хотя  действительно  половина
вагонов в  поезде снабжена  туалетами, иногда  выходит так,  что все они
оказываются в одной  половине поезда. Чтобы  спасти дело, были  выпущены
инструкции, предписывающие чередовать вагоны с туалетами и без них.  Это
добавило работы сцепщикам, однако, поворчав, они и с этим справились.
     о проблема на этом  не кончилась. Поскольку туалеты  располагаются
в одном из концов вагона,  расстояние между двумя соседними туалетами  в
поезде могло  достигать трех  длин вагонов  и для  пассажиров с детьми -
особенно  если  коридоры  были  заставлены  багажом  -  это было слишком
далеко. Тогда вагоны с туалетами  были снабжены стрелкой, и были  изданы
новые инструкции,  предписывающие, чтобы  все стрелки  были направлены в
одну сторону.  ельзя сказать,  чтобы эти  инструкции были  встречены на
сортировочных  станциях  с  энтузиазмом  -  количество поворотных кругов
было недостаточным, но, напрягшись, сцепщики научились делать и это.
     Теперь,  когда  все  туалеты  находились  на  равных   расстояниях,
компания   была   уверена   в   успехе,   однако   пассажиры  продолжали
беспокоиться: хотя до ближайшего  туалета было не больше  одного вагона,
но  не  было  ясно,  с  какой  стороны  он находится. Чтобы решить и эту
проблему, внутри  вагонов были  нарисованы стрелки  с надписью "ТУАЛЕТ",
сделавшие необходимым правильно ориентировать и вагоны без туалетов.
     а  сортировочных  станциях  новая  инструкция вызвала шок: сделать
требуемое вовремя  было невозможным.  В критический  момент кто-то,  чье
имя  сейчас  невозможно  установить,  заметил  следующее. Если мы сцепим
вагон  с  туалетом  и  без  оного  так,  чтобы  туалет был посередине, и
никогда их  не будем  расцеплять, то  сортировочная станция  будет иметь
дело вместо N  ориентированных объектов с  N/2 объектами, которые  можно
во всех  отношениях и  со всех  точек зрения  считать симметричными. Это
наблюдение решило проблему ценой  двух уступок. Во-первых, поезда  могли
теперь  состоять  лишь  из  четного  числа  вагонов - недостающие вагоны
могли быть оплачены  за счет экономии  от сокращения числа  туалетов, и,
во-вторых, туалеты были  расположены на чуть-чуть  неравных расстояниях.
о кого беспокоит лишний метр?
     Хотя во времена, к которым относится наша история, человечество  не
знало  ЭВМ,  неизвестный,  нашедший  это  решение,  был  первым  в  мире
компетентным программистом.


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