DRAKON.SU

Текущее время: Вторник, 19 Март, 2024 07:24

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 12 ] 
Автор Сообщение
СообщениеДобавлено: Суббота, 17 Февраль, 2018 09:27 

Зарегистрирован: Воскресенье, 24 Февраль, 2008 15:32
Сообщения: 5844
Откуда: Москва
Сообщения В.И. Шелехова
о структурном программировании


Владимир Иванович Шелехов высказал критические замечания о структурном программировании.

Эти сообщения меня очень заинтересовали.
Дело в том, что в научной литературе я много раз читал положительные отзывы о структурном программировании.

Отрицательные отзывы мне не встречались.
У меня вопрос к Владимиру Ивановичу: имеется ли в современной литературе критика в адрес структурного программирования?

Ниже я привожу цитаты из сообщений В.И. Шелехова.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 17 Февраль, 2018 09:30 

Зарегистрирован: Воскресенье, 24 Февраль, 2008 15:32
Сообщения: 5844
Откуда: Москва
viewtopic.php?p=100107#p100107
Владимир Шелехов писал(а):
Размышлял, как должно быть устроено программирование.
Перед этим понял, что структурное программирование -- это не решение.
Семь раз скрупулезно прочитал "Заметки о структурном программировании" в надежде изъять оттуда позитивное решение. Его не оказалось.


Я был немногим из счастливцев, кто узнал о структурном программировании от самого Дейкстры в кабинете Андрея Петровича Ершова.

Свои рукописи с новым подходом к программированию я приносил А.П. Ершову.
Он меня пинал. Конечно, вежливо и корректно.
Тогда мне недоставало квалификации.

Через три года я был окончательно истощен и понял, что нужно сделать перерыв.
Перерыв оказался в 25 лет.

Сейчас это предикатное программирование. Более 30 публикаций.
Часть видеокурса по формальным методам.

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 17 Февраль, 2018 09:38 

Зарегистрирован: Воскресенье, 24 Февраль, 2008 15:32
Сообщения: 5844
Откуда: Москва
viewtopic.php?p=100114#p100114
Владимир Шелехов писал(а):
Перед этим понял, что структурное программирование -- это не решение.
Семь раз скрупулезно прочитал "Заметки о структурном программировании" в надежде изъять оттуда позитивное решение. Его не оказалось.

Rifat писал(а):
Расскажите, пожалуйста, почему структурное программирование - это не решение?

Владимир Шелехов писал(а):
Структурное программирование объявляет оператор goto опасным и предлагает использовать только правильные операторы: последовательный, условный и цикл while. Больше ничего в структурном программировании по сути нет. Все остальное -- пустые декларации и спекуляции.

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

Структурное программирование - это религия. Она работает как религия.

Это очень коротко. Развернутый анализ будет позже. Есть и вред от структурного программирования.


Rifat писал(а):
Какие у структурного программирования есть недостатки по сравнению с предикатным программированием?

Владимир Шелехов писал(а):
Предикатное программирование противопоставляется с одной стороны императивному программированию, а с другой -- функциональному.
А структурное программирование тут ни при чем.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 17 Февраль, 2018 09:56 

Зарегистрирован: Воскресенье, 24 Февраль, 2008 15:32
Сообщения: 5844
Откуда: Москва
Для полноты картины излагаю мнение Рифата:
viewtopic.php?p=100214#p100214
Rifat писал(а):
По поводу структурного программирования. Ваше описание не полное:
Владимир Шелехов писал(а):
Структурное программирование объявляет оператор goto опасным и предлагает использовать только правильные операторы: последовательный, условный и цикл while. Больше ничего в структурном программировании по сути нет. Все остальное -- пустые декларации и спекуляции.

Дейкстра в одной из своих статей жаловался, что
Цитата:
Apparently, IBM did not like the popularity of my text; it stole the term "Structured Programming" and under its auspices Harlan D. Mills trivialized the original concept to the abolishment of the goto statement.


Опишу вам мое понимание текстов Дейкстры о структурном программировании.
"Сложность программ высока, а интелеллектуальные способности человека ограничены" --->
"Необходимо декомпозировать задачу на подзадачи, решать подзадачи, убеждаться (доказывать), что подзадача решена верно, если все подзадачи решены верно, то и вся задача будет решена верна (стандартная методика "разделяй и влавствуй", а также стандартная методика решения задач в математике)" --->
"При решении задач или подзадач может потребоваться цикл (так как цикл является воплощением математического метода индукция в программировании), необходимо уметь доказывать корректность программ с циклами" --->
"Для того, чтобы доказывать корректность циклов необходим инвариант цикла и может потребоваться определенный счетчик цикла" --->
"Goto позволяет создавать неявные циклы в программе и для того, чтобы доказывать такие программы, с каждым таким неявным циклом необходимо связать свой инвариант и свой счетчик (об это как раз написано в статье Goto considered harmful)" --->
"Чтобы не мучиться, определяя все неявные циклы в программе, лучше избегать использования оператора Goto, достаточно обычного цикла (к тому же, это доказано Бёмом и Якопини)" --->
"То что мы избегаем goto, не означает, что не нужно разделять задачу на подзадачи и доказывать корректность решения каждой подзадачи" --->
"Когда Дейкстра решал, на каком же языке программирования, попроще донести свои мысли о решении задач в программировании до читателей, он выбирал из существующих языков программирования, но они его не удовлетворили" --->
"Он решил спроектировать свой язык программирования, который называют guarded command language" --->
"В процессе проектирования языка программирования, на котором будет проще доказывать программы, он сделал несколько открытий" --->
"То, что недетерминированность упрощает решение задачи, хотя большинство языков программирования строго детерминированные" --->
"Недетерминированность также позволяет довольно легко анализировать параллельные процессы, которые протекают в реальном мире, и которые сложно моделируются на существующих языках программирования" --->
"При наличии языка программирования (guarded command language), на котором возможно доказывать корректность программ для всех случаев, отпадает необходимость в тестировании и отладке, которые проверяют только ничтожно малую часть всех возможных вариантов".


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 17 Февраль, 2018 10:29 

Зарегистрирован: Воскресенье, 24 Февраль, 2008 15:32
Сообщения: 5844
Откуда: Москва
Владимир Шелехов писал(а):
Структурное программирование объявляет оператор goto опасным и предлагает использовать только правильные операторы: последовательный, условный и цикл while. Больше ничего в структурном программировании по сути нет. Все остальное -- пустые декларации и спекуляции.

Rifat писал(а):
По поводу структурного программирования. Ваше описание не полное:

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

Владимир Шелехов писал(а):
Многие пытались реализовать стиль программирования Дейкстры в реальном производственном программировании.
Не получилось. Де факто. Никто не заявлял об успехе.

Rifat писал(а):
Опишу вам мое понимание текстов Дейкстры о структурном программировании.
"Сложность программ высока, а интелеллектуальные способности человека ограничены" --->
"Необходимо декомпозировать задачу на подзадачи, решать подзадачи, убеждаться (доказывать), что подзадача решена верно, если все подзадачи решены верно, то и вся задача будет решена верна (стандартная методика "разделяй и влавствуй", а также стандартная методика решения задач в математике)"

Владимир Шелехов писал(а):
Данный метод декомпозиции программ был еще до Дейкстры.

Rifat писал(а):
"При решении задач или подзадач может потребоваться цикл, необходимо уметь доказывать корректность программ с циклами" --->
"Для того, чтобы доказывать корректность циклов необходим инвариант цикла и может потребоваться определенный счетчик цикла"

Владимир Шелехов писал(а):
Вы знаете людей, которые писали инварианты циклов?
А я знаю. Их можно по пальцам пересчитать.
Инварианты не для простых программистов.


Rifat писал(а):
"Дейкстра .... решил спроектировать свой язык программирования, который называют guarded command language" --->
"В процессе проектирования языка программирования, на котором будет проще доказывать программы, он сделал несколько открытий" --->
"То, что недетерминированность упрощает решение задачи, хотя большинство языков программирования строго детерминированные" --->
"Недетерминированность также позволяет довольно легко анализировать параллельные процессы, которые протекают в реальном мире, и которые сложно моделируются на существующих языках программирования" --->
"При наличии языка программирования (guarded command language), на котором возможно доказывать корректность программ для всех случаев, отпадает необходимость в тестировании и отладке, которые проверяют только ничтожно малую часть всех возможных вариантов".

Владимир Шелехов писал(а):
Сейчас этот язык Дейкстры упоминается лишь в историческом контексте.
По большому счету в нем нет ничего нового и полезного.
Игра в недетерминированность ничего не дает, причем она ни имеет никакого отношения к реальной недетерминированности в автоматных программах.
Дейкстра разработал собственный подход дедуктивной верификации, который используется крайне редко.
Популярен метод Хоара, базирующийся на тройках Хоара.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 17 Февраль, 2018 10:41 

Зарегистрирован: Воскресенье, 24 Февраль, 2008 15:32
Сообщения: 5844
Откуда: Москва
Итак, у меня вопрос или, точнее, просьба.

Владимир Иванович, просьба дать ссылки на литературу, где структурное программирование подвергается критике (такой же или примерно такой же, как и ваша критика).


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 17 Февраль, 2018 11:58 

Зарегистрирован: Вторник, 22 Сентябрь, 2015 20:43
Сообщения: 76
Владимир Паронджанов писал(а):
Итак, у меня вопрос или, точнее, просьба дать ссылки на литературу, где структурное программирование подвергается критике (такой же или примерно такой же, как и ваша критика).
Во все времена критиков было предостаточно и самого разного плана.
Однако таких агрессивных, как я, возможно и не было.
Надо было мне собирать ссылки на критиков, но я этого не делал,
потому что этот вопрос для себя я уже решил.

Критиком был Дональд Кнут.
Впрочем здесь лучше начать с Википедии.
Но не русской, а английской версии.
Она шире и более объективна.

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

Андрей Петрович Ершов, наверное, был первым,
кто сказал, что структурное программирование -- это религия.

Месяца через два после приезда к нам Э.Дейкстры и Т.Хоара в 1973г. (?)
было решено рассказать о структурном программировании для широкой публики.
Во вступительном слове А.П. Ершов среди прочего сказал,
что структурное программирование стало мировой религией.
И свидетельство этому то, что появились апостолы.
Он назвал две фамилии известных миру ученых того времени.
"А сейчас с докладом выступит Игорь Васильевич Поттосин,
новый адепт структурного программирования."
Это подано как шутка. И воспринято как шутка. Все рассмеялись.
В последующие годы И.В. Поттосин был последовательным сторонником структурного программирования в нашей стране.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 18 Февраль, 2018 05:34 

Зарегистрирован: Пятница, 13 Март, 2009 16:36
Сообщения: 219
Откуда: Казань
Мне кажется, что не очень хорошо смешивать в одну кучу коней и людей (религию и структурное программирование). Это совершенно разные темы.

У нас в ВУЗ-е был предмет логика, там мы рассматривали разные силлогизмы, например: "все рыбы плавают, но не все кто плавает - это рыбы" и т.д.

Если кто-то прочитал какую-то книгу несколько раз и недопонял её (возможно, нужно было читать не только эту книгу, но и какие-то предыдущие статьи, книги этого же автора или других авторов, пишущих на аналогичную тему) не доказывает, что в этой книге нет никакой стоящей идеи, что это все это запудривание мозгов, мантры, постулаты данные свыше и новая религия.

Во времена Дейкстры еще не было анализа программирования, как науки. Он попытался сделать такой анализ. Он использовал понятия: динамический процесс выполнения программы (в котором могут выполняться миллиарды раз) и статическое представление программы, которое управляет вычислительной машиной (и может содержать всего лишь десятки команд) (Такое возможно, если программа содержит циклы, которые содержат мало команд, но выполняются много раз).

Как связать динамический процесс, который выполняется миллиарды раз, и статическое представление программы (из десятков или сотен команд)? Допустим, у нас есть произвольная программа с произвольными переходами. Для того, чтобы связать статическое представление и динамическое представление, нам нужно запоминать всю последовательность переходов из одного места программы в другое место. Таким образом, если, допустим, динамический процесс выполняется миллиарды раз, то для связи (то есть, для сохранения истории о том, как статическое представление привело к такому динамическому процессу) его со статическим представлением потребуется память пропорциональная количеству выполнений процесса, допустим, потребуется миллиард записей, каждый по несколько бит, которые описывают, какой переход выполнился, что может составить сотни мегабайт.

Так, а если не использовать произвольные переходы, а использовать только структурные элементы (условный оператор и цикл с предусловием), то для соответствия статического представления и динамического процесса потребуется по одному счетчику на каждый цикл. Если для каждого счетчика, который может выполняться миллиард раз, потребуется 4 байта, а всего циклов будет порядка десятка, то порядка 40 байт будет достаточно чтобы хранит историю о взаимооднозначном соответствие между статическим представлением и динамическим процессом.

Сравните сотни мегабайт и несколько байт. Гениально!
Критики, которые критикуют, не берут самое начало и не критикуют эту основу, которую я описал, а свою критику строят на каких-то второстепенных вещах. Я читал критику Кнута, если вкратце описать, вся его критика строится на том, что ему и еще кому-то нравится по-другому, что иногда если не соблюдать структурный стиль, то можно выиграть пару тактов машинного времени, что может быть очень важно для программ, для которых супер важно работать еще немного быстрее. То, есть нет другого анализа основ программирования, как у Дейкстры, нет даже попытки описать понятия динамического процесса и статического представления программы и их связать.

Так, в соответствие, с предметом логика, если Дейкстра делает анализ основ программирования, а кто-то другой анализ не делает, а критикует какие-то другие моменты, то нельзя сказать, что кто-то критикует анализ Дейкстры.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 12 Март, 2018 19:25 

Зарегистрирован: Воскресенье, 24 Февраль, 2008 15:32
Сообщения: 5844
Откуда: Москва
Rifat писал(а):
До конца своей жизни Дейкстра писал заметки с примерами правильного доказательного программирования небольших программ. А люди по своей серости почему-то не понимают.

Рифат, не могу с вами согласиться в части "серости людей".

1. Если люди чего-то не понимают, значит им трудно.
Задача слишком трудна для них.

2. Ваше выражение "люди по своей серости" некорректно и для многих оскорбительно. Людей нельзя оскорблять. Если люди чего-то не понимают, значит, им трудно. Значит, им нужно помочь. Разве не так?

3. Если какая-то идея на протяжении длительного времени не приживается (для некоторых людей), значит, автор идеи не сумел создать идею, приемлемую для всех. Возможен и другой вариант. Идея слишком трудна и на ее освоение требуется длительное время. Иногда сотни лет.

Дискуссия алгористов (сторонников позиционной системы счисления) и абацистов (сторонников абака) длилась почти тысячу лет.

4. Ссылки на "серость людей" далеки от научного анализа и, по-видимому, являются заключением так называемой "народной психологии".


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 12 Март, 2018 23:34 

Зарегистрирован: Пятница, 13 Март, 2009 16:36
Сообщения: 219
Откуда: Казань
Тут приводится, якобы моя цитата, и говориться, что я оскорбляю людей. Фразу "по своей серости" я не писал. Её написал Шелехов и написал эту фразу в якобы моей цитате (неправильное цитирование).


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 13 Март, 2018 08:59 

Зарегистрирован: Воскресенье, 24 Февраль, 2008 15:32
Сообщения: 5844
Откуда: Москва
Рифат, сожалею об этой ошибке с неправильным цитированием. Примите мои извинения


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 13 Март, 2018 09:40 

Зарегистрирован: Пятница, 13 Март, 2009 16:36
Сообщения: 219
Откуда: Казань
Ничего страшного :)


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 12 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2008-2024, участники конференции «DRAKON.SU», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB