Mar. 4th, 2012

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   

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jul. 3rd, 2025 08:04 am
Powered by Dreamwidth Studios