egorius: (Default)

Г. М. Адельсон-Вельский, В. Л. Арлазаров, А. Р. Битман, М. В. Донской, «Машина играет в шахматы» (1983 г.)

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

Любопытно, что про альфа-бета-отсечение нам на ВМК рассказывали, но имя Александра Брудно при этом не упоминалось, хотя авторы утверждают, что это его изобретение (есть мнение, что к нему причастны многие). Ну или взять программирование в содержательных обозначениях того же Брудно: не помню, чтобы об этом хоть что-то говорилось, хотя идея сугубо практичная и полезная. Зато говорили про операторный метод Ляпунова, а кто применял его на практике? Говорили про историю вычислительной техники, но не затрагивали Бессонова с его релейной машиной. Такое ощущение, что разные школы и разные миры, и железный занавес между ними. А может, мне просто кажется.

Пара вырезок на память:

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

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

...

Наш опыт показывает, как часто поиск ошибок в программе приводит к признанию ее правоты: просто то, что на первый взгляд кажется ошибкой, при внимательном изучении оказывается необходимым следствием установок программистов, которые они собирались реализовать. Известным примером служит партия «Дачесс»—«Каисса»... «Каисса» сыграла..., отдавая ладью, после чего, естественно, проиграла партию. После часа исследования в поисках ошибки она сумела доказать, что была права, показав в ответ на другие ходы мат при помощи красивой комбинации...

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

Если не ошибаюсь, Кайт писал, что всевозможные средства трассировки Оракла съедают чуть не 10 % времени его работы. Но без них «последняя была бы невозможной».

Александр Марков, «Рождение сложности»

Берем картину мироздания, да! И тупо смотрим, что к чему. (вместо эпиграфа)

Книга про реалии современной биологии. Без знаний в органической химии и генетике читать сложно, но все равно безумно интересно. Все оказалась намного хитрее и забавнее, чем мне дилетантски представлялось. Вот и автор признается:

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

...

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

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

egorius: (Default)

Robert Glass, «In the Beginning: Recollections of Software Pioneers»

Воспоминания людей, стоявших у истоков вычислительной техники, собранные Робертом Глассом. Книга получилась очень интересная, позволяет заглянуть в эпоху пионеров программирования (примерно 1955-65 года) под совершенно разными углами глазами совершенно разных людей.

Как обычно, выясняется, что все новое — хорошо забытое старое.

I remember one man who held a master’s degree in aeronautical engineering; he had written his masters thesis on wing tip design. ... Since aircraft were on the wane (at that time) and missiles on the rise, no one needed better wing tips designed. He sought technical employment in the computer field. Since no computer classes were available, he was as well prepared as anyone. As to accounting, he would often muse, «Some day I just have to take some accounting classes.»

Вот еще кусочек. Пишет человек, рассказывавший всем, как использование инвариантов позволяет писать безошибочные программы:

At our first meeting, the director of this company and I discussed the seminar, its contents, and its relationship with and possible implications for the company’s business. He pointed out that although reducing the error rate in their software output was in principle of interest, their goal was not to reduce it to zero. The presence of a few residual errors ensured the opportunity to remain in contact with the customer and, in addition to correcting the errors, to add desirable new features to the programs and to develop new software, that is, to sell follow-on business.

А. Г. Абинов, «Человек или машина?» (1989 г.)

Я размышлял. Тощие брошюрки общества «Знание» приучили меня к мысли, что разговаривать животные не способны. Сказки с детства убеждали в обратном.
— А. и Б. Стругацкие, «Понедельник начинается в субботу»

Попалась в руки одна из тех самых брошюрок общества «Знание». Действительно тощая и такая, научно-популярненькая. Местами забавная:

Вместе с компьютерными «вирусами» в настоящее время получили распространение и некоторые виды программ-разрушителей. Условно их можно подразделить на три основные категории: «троянские кони» — т. е. такие, которые под видом доброкачественных программ на самом деле разрушают заложенную в ЭВМ информацию; «черви» — программы, которые медленно, но верно подтачивают память ЭВМ, вызывая в один не очень прекрасный день полную парализацию компьютера, и наконец, «бомбы замедленного действия» — программы, ждущие своего часа, чтобы стереть записанные на диске данные.

Страшно жить. Зато картинки тоже хорошие.

Александр Брудно, «Программирование в содержательных обозначениях» (1968 г.)

Рассказывает о методе программирования, придуманном и применявшемся с середины 50-х в Институте электронных управляющих машин и Институте теоретической физики (это такие люди, как Брудно, Кронрод, Адельсон-Вельский, Арлазаров и другие; они, помимо прочего, причастны к созданию знаменитой шахматной программы Каисса).

Метод, между прочим, весьма и весьма грамотный. Вот только как же мучились люди, не имея аппаратного стека и индексных регистров! Они, конечно, справлялись, но для этого приходилось писать самомодифицирующиеся программы. Более того, это вынуждено считалось одним из основным принципов программирования.

egorius: (Default)

Эдмонд Николау, «Введение в кибернетику»

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

— Виталий Кауфман, «Языки программирования»

Очередная древность (год издания оригинала — 1964), извлеченная на свет божий из пыльных недр Дальней Книжной Полки. Книга написана в стиле, суть которого ясно характеризует эпиграф; в очень сжатый объем автор постарался уложить основные положения областей науки, на которые распространялся интерес современной ему кибернетики. Результат неизбежен: известные вещи кажутся пройденными по верхам, неизвестные — остаются непонятными.

Зато теперь я лучше понимаю название своего факультета. С вычислительной математикой все было ясно, но где потерялась кибернетика (опять-таки см. эпиграф)? Так вот, чуть ли не все дисциплины — теория множеств, математическая логика, построение моделей, теория вероятностей, теория игр, собственно программирование, вычислительные методы, распознавание образов и нейронные сети на АСВК, лингвистические опыты АЯ... — все это в широком смысле и есть кибернетика.

А. Л. Брудно, Л. И. Каплан, «Московские олимпиады по программированию»

Довольно скоро все заметили, что удержать в голове схему достаточно сложной программы трудно. Поэтому стали рисовать блок-схему программы. ... Но программы становились все сложнее, а блок-схемы все больше и непонятнее. Разобраться во всех стрелках и линиях было уже почти невозможно. Однако мучились и разбирались. ... Последней надеждой были цветные карандаши. Но когда кончились цвета, мы пришли к Брудно. И он сказал:
— Не рисуйте больше блок-схем. Пишите блок-программы.
...
Блочная программа — это такая программа, где каждая самостоятельная ее часть выделена в отдельную подпрограмму. ... Сравните эту программу с блок-схемой... Между ними только одна разница: блок-схема состоит из нарисованных прямоугольников, а блок-программа из команд. То есть ее можно закодировать и ввести в машину.

— А. С. Кронрод, «Беседы о программировании»

Случайно заметил, что автором сборника является тот самый Александр Брудно, о котором я читал в «Беседах...» — он, как я понимаю, уже в конце 50-х нащупал идею структурного программирования. Книжка интересна не столько задачами (о, ностальгия: составьте программу), сколько сопровождающими их лекциями о программировании для школьников: перебор вариантов, случайные числа, рекурсия (рекурсий следует избегать: они замедляют выполнение программы), структурное программирование, история вычислительной техники.

Занятное суждение о структурном программировании, никогда не думал о нем с такой стороны:

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

Но старую закалку-то не спрячешь. Вот приводится программа для алгоритма Евклида:

10 input m, n
20 goto 40
30 if m<n then n=n-m else m=m-n
40 if m<>n goto 30
50 print m
60 end

Только программист в машинных кодах может такое написать, не вывихнув мозг.

Некоторые считают, что структурированная программа, и даже язык программирования ... не должны содержать операторов перехода (подобных goto). ... Мы этого не считаем. Признавая, что излишние операторы переходов служат указанием на неряшливость или низкую квалификацию программиста и затрудняют проверку программы, мы, тем не менее, не запрещаем операторов перехода. Причина этого в том, что нарочитое избегание операторов перехода отдаляет программу от естественного алгоритма решения задачи, а употребление операторов перехода не является единственным способом написания плохих программ.

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

Profile

egorius: (Default)
egorius

July 2025

M T W T F S S
  123456
78910111213
14151617181920
21222324252627
28293031   

Syndicate

RSS Atom

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jul. 1st, 2025 01:56 pm
Powered by Dreamwidth Studios