?

Log in

No account? Create an account

Вс, 4 мар, 2012, 16:18
Книги: февраль

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

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

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

Очередная древность (год издания оригинала — 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 из Фортрана и Бейсика в Паскаль и Си. За такое программирование следовало бы отрывать руки.

Вс, 4 мар, 2012 15:13 (UTC)
18cc

Я вот недавно заказал себе "Введение в кибернетику" Росса Эшби.
Начну как только закончу читать "Programmer's Stone".

Вс, 4 мар, 2012 21:13 (UTC)
egorius

Программистский камень, занятно. Надо будет посмотреть.

Вс, 4 мар, 2012 15:22 (UTC)
n1919

настоящие программисты научились вместо goto использовать raise/throw

Вс, 4 мар, 2012 21:14 (UTC)
egorius

Употребление операторов перехода не является единственным способом написания плохих программ (:

Пн, 5 мар, 2012 08:57 (UTC)
hardsign

Единственным способом программирования на Бейсике является извращение (ъ)

Вт, 6 мар, 2012 21:32 (UTC)
egorius

Три слова лишние, ага.

Вс, 4 мар, 2012 17:34 (UTC)
pigdeon

Кибернетика, в исходном определении Н.Винера, - это "наука об управлении и взаимодействии (частей) в живой природе и машинах".
CYBERNETICS••• Cybernetics, in its purest definition, is the science of control and communication in the animal and the machine. The word was devised by Norbert Wiener in the 1940s and is derived from the Greek word kybernetes , meaning "steersman." In his book The Human Use of Human Beings (1950)

Вс, 4 мар, 2012 21:16 (UTC)
egorius

Ну, мало что в исходном. Исходное определение как раз и не отвечает на вопрос о названии факультета.

Вс, 4 мар, 2012 18:21 (UTC)
mr_parson

по легенде, Кибернетика в ВМК появилась, когда Тихонов захотел добавить "красивое слово, значение которого все равно никому не известно".

А Каплан у меня семинары по паскалю в школе вел. Не напомнишь его полное имя-отчество? к стыду своему забыл.

Вс, 4 мар, 2012 21:05 (UTC)
egorius

О как!
Лев Исаакович.