OberonCore
https://forum.oberoncore.ru/

В 101-й раз о грамотной алгоритмизации
https://forum.oberoncore.ru/viewtopic.php?f=82&t=1483
Страница 2 из 3

Автор:  Geniepro [ Пятница, 17 Апрель, 2009 07:47 ]
Заголовок сообщения:  Re: Нужны ли Оберону шаблоны(дженерики) и перегрузка операторов

Илья Ермаков писал(а):
Вы даже не знаете, что такое предусловие. Я так понял, что за предусловие Вами принято "условие цикла WHILE".
Вообще-то, если он имел в виду бесконечный цикл ("Например цикл, который управляет подачей топлива в двигатель, в зависимости от нагрузки..."), то там неважно какое предусловие, а постусловия и вовсе нет, так как нет условия завершения этого цикла...

Автор:  Geniepro [ Пятница, 17 Апрель, 2009 08:07 ]
Заголовок сообщения:  Re: Нужны ли Оберону шаблоны(дженерики) и перегрузка операторов

sia писал(а):
Говоря о циклах я имел в виду самый общий случай, безотносительно навешиваемого
или подразумеваемого контекста, то есть: WHILE any_func() DO any_action() END;
Где any_func() и any_action() - произвольные функции, которые в общем случае имеют
свой контекст, но он может быть закрыт или неизвестен. Это могут быть системные вызовы,
какие-то библиотечные функции...

Строить какие-то предположения относительно них в общем случае - нельзя. Поэтому все
рассуждения о доказательности или сходимости или конечности - неправомерны в общем случае.

Для этого язык должен предусматривать какие-то контракты или просто запрещать побочные эффекты в невинных на первый взгляд функциях и доступ к изменяемым глобальным переменных из этих функций. Рассуждать об инвариантах в этом случае станет горзадо проще...

sia писал(а):
GOTO start;
WHILE any_func() DO start: any_action(); END;

// если any_action делает контекст для any_func, то так пожалуй лучше, чем

any_action(); //Если код строк 50 и не вынесен в процедуру, то дублирование.
WHILE any_func() DO any_action(); END;

Легко переписывается в
repeat any_action() until not any_func();

Автор:  Илья Ермаков [ Пятница, 17 Апрель, 2009 08:17 ]
Заголовок сообщения:  Re: Нужны ли Оберону шаблоны(дженерики) и перегрузка операторов

sia писал(а):
Не имел удовольствия читать. Преподаватели часто выражаются цветасто, с расчётом на внимание.

Не имели удовольствие вообще учиться в направлении программирования, как видно.
А Кушниренко и его соавторы - люди с яснейшим пониманием сути программирования; развивавшие идеи Ершова - и уж на порядок больше вас программировавшие. Одна реализация образовательных комплексов и офисных пакетов на всех моделях ПЭВМ чего стоит (а при 64к памяти писать приходилось именно на ассемблере, столь вами, видимо, уважаемом).

Автор:  Илья Ермаков [ Пятница, 17 Апрель, 2009 08:26 ]
Заголовок сообщения:  Re: Нужны ли Оберону шаблоны(дженерики) и перегрузка операторов

Geniepro писал(а):
Вообще-то, если он имел в виду бесконечный цикл ("Например цикл, который управляет подачей топлива в двигатель, в зависимости от нагрузки..."), то там неважно какое предусловие, а постусловия и вовсе нет, так как нет условия завершения этого цикла...

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

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

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

Автор:  Илья Ермаков [ Пятница, 17 Апрель, 2009 08:31 ]
Заголовок сообщения:  Re: Нужны ли Оберону шаблоны(дженерики) и перегрузка операторов

Geniepro писал(а):
sia писал(а):
GOTO start;
WHILE any_func() DO start: any_action(); END;

// если any_action делает контекст для any_func, то так пожалуй лучше, чем

any_action(); //Если код строк 50 и не вынесен в процедуру, то дублирование.
WHILE any_func() DO any_action(); END;

Легко переписывается в
repeat any_action() until not any_func();


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

Автор:  GeoVit [ Пятница, 17 Апрель, 2009 09:17 ]
Заголовок сообщения:  Re: Нужны ли Оберону шаблоны(дженерики) и перегрузка операторов

Geniepro писал(а):
Илья Ермаков писал(а):
Вы даже не знаете, что такое предусловие. Я так понял, что за предусловие Вами принято "условие цикла WHILE".
Вообще-то, если он имел в виду бесконечный цикл ("Например цикл, который управляет подачей топлива в двигатель, в зависимости от нагрузки..."), то там неважно какое предусловие, а постусловия и вовсе нет, так как нет условия завершения этого цикла...


Кхм... Уважаемый Geniepro, Вам доводилось автомобилем управлять?

Автор:  Geniepro [ Пятница, 17 Апрель, 2009 10:52 ]
Заголовок сообщения:  Re: В 101-й раз о грамотной алгоритмизации

Если цикл заканчивается при выключении бортового компьютера, то это малоинтересно с точки зрения программирования.
В других случаях в этом цикле просто перекрывается топливная заслонка, а сам цикл остаётся работать...

Автор:  Madzi [ Пятница, 17 Апрель, 2009 11:25 ]
Заголовок сообщения:  Re: В 101-й раз о грамотной алгоритмизации

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

Чётко наметилось несколько подходов:
Программирование - это математика.
Программирование - это логика.
Программирование - это ... ясного термина мне подобрать не удаётся, но в целом можно свести к умению "здаво мыслить".
Естественно, что каждый из этих подходов складывался по мере того как человек приходил в программирование. Кто-то купил книжку "Освой С++ за 21 день" (здравомыслящие люди). Кому-то на занятиях по информатике/программированию рассказывали про безусловные и условные операторы, или даже про дискретную матиематику (логика). А кто-то самостоятельно понял, что определённым программным конструкциям соответствуют определённые математические операции (математика).
К сожалению я ни разу не встречал, чтобы на занятиях по информатике/программированию давали математических подход. И книжек таких тоже видел очень мало (хватит пальцев одной руки и то не всех).

Это причины разногласий. И вы будете спорить до посинения, каждый отстаивая свою - верную точку зрения. "Здравомыслящий" человек (я не хочу никого обидеть, просто пользуюсь определённым выше термином) не может понять "математической конструкции алгоритма". Она ему чужда и неудобна, потому что, скорее всего, определённым разделам математики (например теории графов) не уделялось достаточно внимания и отсутствует умение "накинуть" граф на алгоритм и привести к простому (изоморфному) виду.

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

Я предлагаю участникам переосмыслить свое отношение к программированию в целом и к обсуждаемым здесь вопросам в частности и быть более лояльными друг к другу и попытаться понять друг друга попробывав мыслить как опонент. И тогда станет понятно почему вас не понимают, и где вы правы, а где и нет.

Автор:  Geniepro [ Пятница, 17 Апрель, 2009 12:10 ]
Заголовок сообщения:  Re: В 101-й раз о грамотной алгоритмизации

Madzi писал(а):
Кто-то купил книжку "Освой С++ за 21 день" (здравомыслящие люди).

На эту тему хорош эпиграф к учебнику "How to Design Programs, Second Edition" (Matthias Felleisen, Robert Bruce Findler, Matthew Flatt, Shriram Krishnamurthi):
Цитата:
Bad programming is easy. Idiots can learn it in 21 days, even if they are dummies.

Good programming requires thought, but everyone can do it and everyone can experience the satisfaction that comes with it. The price is worth paying for the sheer joy of the discovery process, the elegance of the result, and the commercial benefits with which a systematic program design process comes.

Автор:  Info21 [ Пятница, 17 Апрель, 2009 12:32 ]
Заголовок сообщения:  Re: В 101-й раз о грамотной алгоритмизации

Madzi писал(а):
Чётко наметилось несколько подходов:
Программирование - это математика.
Программирование - это логика.
Программирование - это ... ясного термина мне подобрать не удаётся, но в целом можно свести к умению "здаво мыслить"...
Предлагаю термин: оптимистическое рукосуйство. По-моему, очень ясно передает, так сказать, самую суть.

Автор:  Alexey_Donskoy [ Пятница, 17 Апрель, 2009 12:37 ]
Заголовок сообщения:  Re: В 101-й раз о грамотной алгоритмизации

Madzi писал(а):
Кто-то купил книжку "Освой С++ за 21 день" (здравомыслящие люди).
Кавычки пропущены. Сам такой "здравомыслящий", горький опыт до сих пор не изжит...

Автор:  Info21 [ Пятница, 17 Апрель, 2009 12:38 ]
Заголовок сообщения:  Re: В 101-й раз о грамотной алгоритмизации

Madzi писал(а):
Я предлагаю участникам переосмыслить свое отношение к программированию ...
Надо просто базовую технику поставить, как в любом виде спорта и в любом ремесле.

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

Автор:  Илья Ермаков [ Пятница, 17 Апрель, 2009 16:01 ]
Заголовок сообщения:  Re: В 101-й раз о грамотной алгоритмизации

А касательно математики... У меня какое-то смутное наблюдение, что многим даже подкованным в ней программистам упор исключительно на дискретку (и теоретико-множественные разделы, особенно у ФП-шников) как-то "сушит мозги", что ли... Теряется "живость", ощущение связи моделей с реальностью; того, что естественно, а что нет.

В этом смысле дейкстровское понимание программирования как-то гораздо ближе к "непрерывной", "естественнонаучной" математике, к матану тому же.

Прошу понимать это моё сообщение как просто смутные соображения.

Автор:  Vlad [ Пятница, 17 Апрель, 2009 16:40 ]
Заголовок сообщения:  Re: В 101-й раз о грамотной алгоритмизации

igor писал(а):
Судя по Вашим сообщениям в этой ветке, я делаю осторожный вывод, что Вы новичок в программировании. Или, по крайней мере, не реализовали пока достаточно сложные проекты.


Ядро линукса - достаточно крупный проект? И когда оно коллапснется под грузом goto? :)

Автор:  Vlad [ Пятница, 17 Апрель, 2009 16:51 ]
Заголовок сообщения:  Re: В 101-й раз о грамотной алгоритмизации

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


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

Автор:  Valery Solovey [ Пятница, 17 Апрель, 2009 16:53 ]
Заголовок сообщения:  Re: В 101-й раз о грамотной алгоритмизации

Постоянно коллапсается. Я дома на своей машине не мог видео смотреть - после нескольких первых минут фильма ядро падало.

Автор:  Vlad [ Пятница, 17 Апрель, 2009 16:56 ]
Заголовок сообщения:  Re: В 101-й раз о грамотной алгоритмизации

Valery Solovey писал(а):
Постоянно коллапсается. Я дома на своей машине не мог видео смотреть - после нескольких первых минут фильма ядро падало.


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

P.S. Напомню старый анекдот:
- Твоя программа неправильно написана!
- Зато она работает, а твоя - нет.

Автор:  Илья Ермаков [ Пятница, 17 Апрель, 2009 17:23 ]
Заголовок сообщения:  Re: В 101-й раз о грамотной алгоритмизации

Vlad писал(а):
Или он просто видит, что "математическая конструкция" преобразованная известным методом в код, нечитабельна и провоцирует ошибки при сопровождении. Я бы назвал таких людей "прагматичными".

Конечно, нечитабельна. Если не знать правил, по которым построена - как она может быть читабельна?
Это как человеку, не знающему электроники, дать читать принципиальную схему.
Но он может вполне знать практическую электрику и успешно этак кабели тянуть. И даже попытаться смастрячить что-то самопальное на реле, обходясь без электроники :)

Автор:  igor [ Пятница, 17 Апрель, 2009 17:35 ]
Заголовок сообщения:  Re: В 101-й раз о грамотной алгоритмизации

Vlad писал(а):
igor писал(а):
Судя по Вашим сообщениям в этой ветке, я делаю осторожный вывод, что Вы новичок в программировании. Или, по крайней мере, не реализовали пока достаточно сложные проекты.

Ядро линукса - достаточно крупный проект? И когда оно коллапснется под грузом goto? :)
Не знал, что sia пишет ядра для Линуксов :) (именно ему предназначалось моё сообщение).

А что, правда что ядро Линукс кишит операторами GOTO?

Автор:  Vlad [ Пятница, 17 Апрель, 2009 17:36 ]
Заголовок сообщения:  Re: В 101-й раз о грамотной алгоритмизации

Илья Ермаков писал(а):
Конечно, нечитабельна. Если не знать правил, по которым построена - как она может быть читабельна?


Если она построена не по правилам эргономики - как она может быть читабельна?

Илья Ермаков писал(а):
Это как человеку, не знающему электроники, дать читать принципиальную схему.


У принципиальных электрических схем, между прочим, тоже есть определенные эргономические правила, никак не связанные с сутью того, что там происходит с точки зрения электроники. Чего стоит один только значок заземления - чем не goto? ;)

Страница 2 из 3 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/