"Беседы о программировании" -- это книга скорее не о том, как
надо программировать, а о том, как развивалось программирование
в нашей стране.
Если взглянуть на "Беседы" с современной точки зрения, то их,
очевидно, следует отнести к разделу: "История развития
программирования". Дело в том, что когда у нас стали появляться
ЭВМ, многие не поняли, какое место в жизни людей займут
компьютеры. А те, кто понял, разделились на две части: идти
своим путем или копировать заграницу. Между этими группами людей
шла ожесточенная борьба. Она-то и отображена в "Беседах
о программировании". Скорее даже -- "Беседы" являются элементом
этой борьбы.
За кадрами книги остались бесконечные обращения автора "Бесед"
в высокие инстанции -- буквально крики души о том, что надо у НАС
развивать строительство своих машин, надо привлекать сильных
конструкторов и математиков -- а они у нас есть -- к разработке
новых компьютеров. Было продемонстрировано не на словах, а на деле, что мы это можем, что мы сильнее. Например, наша машина
М-20 обыграла в шахматы со счетом 3:1 машину из Стэнфорда.
Но победили те, которые решили копировать заграницу. Теперь все
компьютеры иностранные, все "говорят" по-английски. И даже
теорему Адельсон-Вельского и Ландиса, которую у нас коротко
называют АВЛ, теперь читают АБЛ.
Но в "Беседах о программировании" рассказано не только
о борьбе разных направлений. И даже это не главное. Мы упомянули
об этой борьбе, пожалуй, только для того, чтобы читателю был
понятен тон или стиль, которым написана книга.
На наш взгляд, главное в "Беседах" -- это задачи, о которых
говорил А.С.Кронрод. Книга была написана в 1963 году. Теперь уже
видно, по какому пути пошло программирование -- по предложенному
Кронродом или нет. А называл А.С. эти задачи -- ИГРАМИ.
"Беседы о программировании" были посланы на рецензии разным
людям. Рецензии было бы тоже интересно прочитать. Сторонники
А.С., естественно, хвалили эту книгу. Противники -- полемизировали.
Но надо сказать, что все, даже разгромные,
рецензии кончались словами: "Тем не менее, книгу надо
напечатать!"
"Беседы о программировании" прошли обязательную тогда цензуру,
и было напечатано 10 сигнальных экземпляров. И вдруг книга была
запрещена. Кем? Математиками! Как говорил Кронрод "Иногда такие
люди занимали должности даже и довольно высокие". Похоже было,
что они не выдержали полемики, поднятой в этой книге. Но они
не запрещали всю книгу: кто-то требовал уничтожить какой-нибудь
параграф в "Беседе", кто-то -- написать слово не с большой, а с маленькой буквы, и т.п.
Кронрод отказался им подчиниться. Книга издана не была.
Теперь -- по прошествии более 30 лет с момента написания этой
книги -- многое будет в ней непонятно. Чтобы избежать этого,
можно было бы в конце "Бесед" к каждой странице дать
пояснения. Но, скорее всего, можно обойтись и без них. Просто:
"Имеющий уши слышать -- да слышит".
Теперь можно переходить к чтению "Бесед о программировании"
Александра Семеновича Кронрода.
| Предисловие (Кронрод Л. А.) |
| Беседа первая: Как А. Л. Брудно придумал программирование в содержательных обозначениях |
| | § 1. | Что было сперва |
| | § 2. | Что было потом |
| Беседа вторая: Что такое блочное программирование, которое велел нам придумать Брудно |
| | § 1. | Структура больших программ |
| | § 2. | Что мы на этом потеряли? |
| | § 3. | Что мы при этом выиграли? |
| | § 4. | Как обращаться к блокам. |
| Беседа третья: Кое-что об отладке программ |
| | § 1. | Зачем программисту барабан? |
| | § 2. | О росписи памяти и о контрольном суммировании |
| | | Задачи |
| | § 3. | Программы для работы с пульта |
| | § 4. | Какими должны быть программы печати |
| | § 5. | Об организации контрольных просчетов |
| | § 6. | Один пример организации контрольного счета |
| Беседа четвертая: Еще кое-что об отладке программ |
| | § 1. | Об отладочных программах |
| | § 2. | Стандартизация обозначений |
| | § 3. | Ячейка омега при отладке |
| | § 4. | Немножко о кодировке |
| Беседа пятая: Про библиотеку стандартных программ |
| | § 1. | Что должно быть в библиотеке |
| | § 2. | Стандартные ячейки |
| | § 3. | Что случится с программами, если мы изменим библиотечные подпрограммы?/ |
| | § 4. | Библиотечное ДЗУ |
| | § 5. | Вызов библиотек |
| | § 6. | Вызов со сдвигом |
| | § 7. | Библиотечные карты |
| Беседа шестая: Про библиотеку стандартных программ (продолжение) |
| | § 1. | Программы с информацией |
| | § 2. | Система ИНФО-ГФК |
| | § 3. | Про программу ИНТЕГРАЛ. Зачем эта программа должна быть совершенно стандартной |
| | § 4. | Работа со случайными числами |
| Беседа седьмая: Что нужно переделать в трехадресной машине, чтобы было хорошо |
| | § 1. | Машинно-выделенные ячейки |
| | § 2. | Адреса для регистров |
| | § 3. | Стоп при попытке передать управление |
| | § 4. | Больше ДЗУ! |
| | § 5. | Больше разрядов в коде команды! |
| | § 6. | Какие команды нужно добавить и какие -- убрать |
| | § 7. | Обращение к функциям |
| | § 8. | ФА и ФК |
| | § 9. | Дополнительные логические команды |
| | § 10. | Смешанная арифметика |
| | § 11. | Передачи управления |
| | § 12. | Тройная арифметика |
| | § 13. | Запятая сверхдальнего плавания |
| | § 14. | Специально про машину с регистром адреса |
| Беседа восьмая: Как в трехадресной машине устроить длинную память |
| | § 1. | Как это, по-моему, нужно сделать |
| | § 2. | Как это сделано на М-2 |
| | § 3. | Стоит ли все же применять блочную память? |
| | § 4. | Какие изменения вносит длинная память в библиотеку |
| Беседа девятая: Пофантазируем о машинах нашего завтра или переменная адресность и микропрограммирование |
| | § 1. | Как быть с памятью? |
| | § 2. | А как же быть с разрядностью ячейки?/ |
| | § 3. | Об адресности машины |
| | § 4. | Откуда взять столько кодов? |
| | § 5. | Задание микропрограммы |
| | § 6. | Распределение кодов у машины с микропрограммированием |
| | § 7. | Еще о пользе микропрограмм |
| | § 8. | Об этом же |
| | § 9. | Чего не знал автор, когда писал первые 8 параграфов этой главы или как (и можно ли) обойтись без микропрограммирования |
| Беседа десятая: О работах Н. И. Бессонова |
| | § 1. | Зачем написана эта беседа |
| | § 2. | РВМ. Каскадный принцип |
| | § 3. | РВМ. Система управления |
| | § 4. | РВМ. Несколько слов о памяти |
| | § 5. | Коммутатор Бессонова |
| | § 6. | О стиле |
| Беседа одиннадцатая: Человек и машина |
| | § 1. | Может ли машина думать? |
| | § 2. | Кто работает скорее -- машина или мозг? |
| | § 3. | Два способа думания |
| | § 4. | Как связаны сознание и подсознание |
| | § 5. | Почему так медленно обучается человек |
| | § 6. | Как же быть машинам? |
| | § 7. | Можно ли заглянуть в подсознание? |
| | § 8. | Что мы там увидим? |
| | § 9. | Две точки зрения на неизвестное |
| | § 10. | Главные задачи программирования |
| | § 11. | О бессмертии |
| Беседа двенадцатая: Невычислительные задачи |
| | § 1. | Шахматы Г. М. Адельсона-Вельского, В. Арлазарова и А. Ускова |
| | § 2. | Борьба за время. Предварительная оценка. УХУДУ И ПУП |
| | § 3. | Борьба за время. Технические приемы |
| | § 4. | Ватерлоо АВАУ. Уроки Ватерлоо |
| | § 5. | Общая переборная схема |
| | § 6. | Ускорение по Брудно |
| | § 7. | Переборная схема. Обобщения. Векторная оценка |
| | § 8. | ОБЩИЙ РЕШАТЕЛЬ американцев. Слово в защиту бюрократии |
| | § 9. | Шахматы и народное хозяйство |
| Беседа тринадцатая: О взвешивании монеток |
| | § 1. | Постановка задачи |
| | § 2. | А как это можно осуществить в программе? Что значит получить ответ? |
| | § 3. | Возражения по форме (ответа) |
| | § 4. | Перебор возможностей. Молекулы |
| | § 5. | Перебор возможностей. Молекулярный вес. Ранги гипотез |
| | § 6. | Решение задачи человеком |
| | § 7. | Вернемся к программе |
| | § 8. | Да, именно так |
| | § 9. | Удастся ли все-таки создать программу? |
| | § 10. | Зачем все это нужно? Нужно ли это вообще? Не лучше ли заняться чем-нибудь другим? |
| Беседа четырнадцатая: Вычислительные задачи с точки зрения невычислительных |
| | § 1. | Издержки автоматизации |
| | § 2. | Почему вдруг понадобилось экономить? |
| | § 3. | Как выглядела раньше программа СОВЕРШЕННО СТАНДАРТНЫЙ ИНТЕГРАЛ и как выглядит она теперь |
| | § 4. | Как программа ИНТЕГРАЛ будет выглядеть завтра |
| | § 5. | Про внешнее интегрирование |
| | § 6. | А должна ли вообще программа ИНТЕГРАЛ быть совершенно стандартной? |
| | § 7. | Решение системы двух уравнений с двумя неизвестными |
| Беседа пятнадцатая и последняя: Кибернетика или математика? Кто такие программисты? |
| | § 1. | Что такое наука кибернетика? |
| | § 2. | Еще одна аналогия |
| | § 3. | Как должна развиваться наука-кибернетика? |
| | § 4. | Кто такие программисты |
| | § 5. | Нужно ли каждому математику самому программировать? |
| | § 6. | Взаимоотношение программирования и математики |
| | § 7. | Наука для науки? |
| | § 8. | Наука. Прикладная Наука. Наука для Науки |
| | § 9. | О критериях/ |
| | § 10. | Предлагает ли автор запретить чистую математику? |
| | § 11. | Не исключить ли зато программирование из математики? |
| Послесловие |
| Приложение 1 (Адельсон-Вельский Г. М., Арлазаров В. Л., Леферов Е. В., Резниковский П. Т., Хабарова С. А.) |
| Приложение 2 |
| Несколько слов об авторе (Арлазаров В. Л.) |
Александр Семенович Кронрод (1921--1986) -- человек
примечательный. Со студенческой скамьи он ушел добровольцем
на фронт. Через три года, после тяжелого ранения, вернулся,
сложил в стол награды и снова стал студентом. А еще через пять
лет -- он уже доктор наук, создатель теории функций двух
переменных, лауреат Сталинской премии, руководитель (хочется
сказать -- предводитель) семинара молодых, честолюбивых,
талантливых ученых.
И вдруг... (хотя ничего у него, конечно, не вдруг. Просто
характер, талант и вера в себя), вдруг он кладет в стол уже
готовые к публикации математические работы и полностью
переключается на программирование на ЭВМ. Кстати, через двадцать
лет А.С.Кронрод точно так же покончит с программированием
и займется лечением рака. Стоит ли удивляться, но опять -- с успехом.
Итак, вычислительные машины. Он знает, что за ними будущее. Он
создает настоящий конвейер решения физических задач. Он
придумывает, как сделать работу математика за пультом удобной,
какие смены должны быть у операторов, как добиться безошибочной
кодировки и набивки программ -- тысяча мелочей, которые отнюдь
не кажутся ему мелочами. Следы этого вы, наверное, заметили при
чтении книги.
Но его настоящая цель -- создание машин, решающих сложные,
"человеческие" задачи. И Кронрод организует новый семинар, где
занимаются программированием игр, задачами узнавания,
придумываются новые вычислительные и невычислительные алгоритмы.
С ним рядом друзья и соратники. Я не называю их, Кронрод никогда
не забывает сделать это сам, обычно слегка притушевывая
собственную роль. Однако именно благодаря А.С.Кронроду этот
семинар вырос в целую школу программирования, и множество ученых
успешно представляют ее и в Европе, и в Америке, и даже
в Австралии.
Главной чертой школы Кронрода являются методы решения задачи,
при которых на каждом этапе четко просматривается связь с ее
физическим смыслом. Ибо тогда легче следить за тем, что
выбранный метод ведет к цели, уверенно вести отладку, да и,
вообще, эпиграф к каждой главе этой книги есть жизненное кредо
автора.
В этом смысле "Беседы" и сегодня прекрасный учебник для
знакомства с некоторыми идеями искусственного интеллекта
и "интеллектуальными" подходами к вычислительным проблемам.
Эта книга написана почти сорок лет назад. Разумеется, сегодня
что-то в ней покажется банальностью, а что-то глупостью. Автор
не виноват: сорок лет назад банальностей не было. Зато есть
и плюсы: за сорок лет глупостей стало заметно меньше.
Вы обратили внимание, с чего начинается книга? Конечно, сейчас
все программируют "структурно". Но Кронрод излагает это как
очевидный способ написания программ за много лет до "открытия"
этого метода Дейкстрой. И ему ясно, что сделать программу
понятной можно только на плоскости, рисуя не только команды
и блоки, но и связи между ними. Ах, как не хватает ему сегодняшних
цветных графических мониторов, хотя бы для того, чтобы рисовать
стрелки! Он-то всегда программирует визуально, да вот только
на листах бумаги. Отсюда и его неприятие АЛГОЛА, явно тяготеющего
к тому, чтобы вытянуть программу в линейку.
Еще пример. Помните, зачем программисту барабан? Тривиальность?
Но этот вопрос был предметом насмешек многих рецензентов. Да что
говорить, еще в 1990 году очень серьезный специалист
по трансляторам, ныне уважаемый профессор, всерьез доказывал, что
отладочная информация не должна храниться в рабочее время, так
как отнимает память. Понадобилась мощь и "наглость"
Микрософта, чтобы все привыкли, что эта информация абсолютно
необходима.
Впрочем, я думаю, что и еще через 40 лет можно будет
наслаждаться и пониманием программирования и неординарностью
мышления, блестками истинной мудрости щедро разбросанными
по страницам этой книги.
Арлазаров В.Л.