OberonCore https://forum.oberoncore.ru/ |
|
В 101-й раз о грамотной алгоритмизации https://forum.oberoncore.ru/viewtopic.php?f=82&t=1483 |
Страница 3 из 3 |
Автор: | Vlad [ Пятница, 17 Апрель, 2009 17:41 ] |
Заголовок сообщения: | Re: В 101-й раз о грамотной алгоритмизации |
igor писал(а): Не знал, что sia пишет ядра для Линуксов (именно ему предназначалось моё сообщение). Он может и goto не пишет (как и я). Дело не в этом, не надо навешивать ярлыки типа "крупная система не может существовать, если там есть goto". igor писал(а): А что, правда что ядро Линукс кишит операторами GOTO? goto там рекомендовано к использованию для обработки ошибок. Чтобы не городить "структурный" огород в виде кучи вложенных if/else. |
Автор: | igor [ Пятница, 17 Апрель, 2009 17:55 ] |
Заголовок сообщения: | Re: В 101-й раз о грамотной алгоритмизации |
Vlad писал(а): У принципиальных электрических схем, между прочим, тоже есть определенные эргономические правила, никак не связанные с сутью того, что там происходит с точки зрения электроники. Чего стоит один только значок заземления - чем не goto? Падла... падла... подловил! (С) "Дети лейтенанта Шмидта"УГО "общий провод" (заземление -- это обычно в электрике, а не в электронике) обозначает на схеме лишь узел с нулевым потенциалом, а в тракте самого сигнала (в информационной магистрали, так сказать) не ставится. Вот почему на функциональных электрических схемах его часто не изображают. Так что Ваша аналогия "значок заземления -- оператор goto" совершенно неудачна! PS. УГО -- условное графическое обозначение |
Автор: | igor [ Пятница, 17 Апрель, 2009 18:02 ] |
Заголовок сообщения: | Re: В 101-й раз о грамотной алгоритмизации |
Vlad писал(а): Дело не в этом, не надо навешивать ярлыки типа "крупная система не может существовать, если там есть goto". Вы мне прямо льстите На самом деле умные люди разобрались с этим вопросом без моего участия, в то время, когда я без задержки проходил под столом.
|
Автор: | Vlad [ Пятница, 17 Апрель, 2009 18:13 ] |
Заголовок сообщения: | Re: В 101-й раз о грамотной алгоритмизации |
igor писал(а): Так что Ваша аналогия "значок заземления -- оператор goto" совершенно неудачна! Как вам будет угодно Я его привел как пример несоответствия "практики" (на бумаге имеет место неструктурный разрыв) и "теории" (в железе никакого разрыва нет) в угоду эргономике (простоте восприятия). |
Автор: | Madzi [ Пятница, 17 Апрель, 2009 18:31 ] |
Заголовок сообщения: | Re: В 101-й раз о грамотной алгоритмизации |
Я надеюсь что вы сами понимаете, что сильно утрируете. Потому что принципиальные электрические схемы и структурное программирование - это всё равно что "в огороде бузина, а в Киеве дядька". |
Автор: | Vlad [ Пятница, 17 Апрель, 2009 18:34 ] |
Заголовок сообщения: | Re: В 101-й раз о грамотной алгоритмизации |
Madzi писал(а): Я надеюсь что вы сами понимаете, что сильно утрируете. Потому что принципиальные электрические схемы и структурное программирование - это всё равно что "в огороде бузина, а в Киеве дядька". Да, я понимаю. Возможно электрические схемы еще ждут своего Дейкстру (Паронджанова?) |
Автор: | sia [ Пятница, 17 Апрель, 2009 19:05 ] |
Заголовок сообщения: | Re: В 101-й раз о грамотной алгоритмизации |
igor писал(а): 2 sia: Я мог бы поспорить с Вами по поводу WHILE и GOTO, но видя безрезультатные попытки своих более опытных коллег, решил зайти с другой стороны. Судя по Вашим сообщениям в этой ветке, я делаю осторожный вывод, что Вы новичок в программировании. Или, по крайней мере, не реализовали пока достаточно сложные проекты. Конечно, я могу ошибаться, но думаю, что в любом случае Вам интересно будет меня послушать. Ситуация может развиваться таким образом: ... Igor, у меня не было желания спорить, я лишь высказал, какие средства хотел бы иметь в Обероне. Мне "вежливо" дали понять, что я не математик, т.к. не умею вычислять инвариант, использовать предикаты и доказывать сходимость. На что я ответил, что в общем случае этот аппарат не работает, а в конкретном случае - когда доказывать нечего (из-за простоты) - это и не нужно... Ранее я высказывал - что излишнее обрезание языка вредно, т.к. труднее становится говорить. На что мне возразили, что можно без этого обойтись. Согласен что можно, но ... неудобно. Например - предлагали убрать FOR, Loop, Repeat. Наверно и это не предел - можно пойти ещё дальше, убрать - Return, Case, While, Do, If, Объекты, подрезать типы, выкинуть встроенные функции, присвоить - тоже убрать... Язык станет ещё меньше, но и желающих его использать, боюсь, станет тоже меньше. 1. Вы начинаете разрабатывать по настоящему крупные и сложные программные проекты, ничем не ограничивая полёт своей алгоритмической мысли. --- Это какие, в какой области? Пример можно? (участвовал в небольших проектах до ~3-5 человеко-лет) --- Ну почему же ничем? Ограничения во всём, постоянный поиск компромиса. Нехватка ресурсов - времени, --- производительности бортового компьютера, памяти, толковой документации, нужных библиотек (компонент)... 2. Постепенно Вы сталкиваетесь с "кризисом жанра", который выражается в том, что новые ошибки появляются быстрее, чем обнаруживаются и исправляются старые. --- не совсем так. Я привык использовать в работе набор отлаженных компонент. Для новой задачи сначала --- прописываю набор базовых функций, которые с небольшим запасом перекрывают потребности задачи. --- Потом делаю минимальный вариант главного модуля, и начинаю работать с ним как с тестом. Ошибки бывают, но не так много --- (чаще если базовые функции слабо проверены). Постепенно дорабатываю первоначальный вариант. 3. Вы пытаетесь найти выход из кризиса и "открываете" для себя структурное программирование. --- Я имею некоторый опыт программирования, как на "неструктурных" языках, так и "структурных". --- Последние раздражают чаще и сильнее, т.к. требуют больше приседаний и действий через pop --- там, где даже в фортране делалось без усилий. Вот тут СТОП. Путь, который я нарисовал, человечество уже давно прошло. Если каждый будет снова и снова наступать на одни и те же грабли, то прогресс остановится. Хотелось бы Вам посоветовать поизучать ошибки и достижения прошлых лет и учесть их когда будете выстраивать свои собственные представления о грамотной алгоритмизации. И я искренне желаю Вам в этом успехов! --- Спасибо за пожелания. Эээ, пояснили бы что вы имеете здесь в виду? --- К счастью я не математик, и мне не нужно придумывать доказательства там, где они мне не нужны. --- Моя сегодняшняя задача - это попытаться перевести небольшие (готовые) программы на Оберон с --- Клиппера, Фокса, Делфи, ТурбоПаскаля, MS Access, причесать кучку SQL запросов (к Оракле). --- Если что-то не получится - это меня сильно не расстроит. Просто поднадоел этот зверинец. --- Основная деятельность - инфраструктура, поддержка, ~10 серверов, небольшая организация. --- Попробовал ББ, сейчас более склоняюсь к XDS, т.к. лучше приспособлен для утилит, и есть версия --- для Линукса, можно попытаться использовать вместо некоторых дебильных скриптов. --- Начал делать свою тонкую прослойку 0 уровня, после прочтения от Назад к основам Дж.Спольски. --- Это - работа с файлами, строки, логи, кодировки, даты, ... что использовал раньше и к чему привык. |
Автор: | Сергей Оборотов [ Пятница, 17 Апрель, 2009 19:09 ] |
Заголовок сообщения: | Re: В 101-й раз о грамотной алгоритмизации |
Илья Ермаков писал(а): В этом смысле дейкстровское понимание программирования как-то гораздо ближе к "непрерывной", "естественнонаучной" математике, к матану тому же. В анализе такого разделения не наблюдается. Точнее, в логическом отношении наблюдается единство. Дейкстровское же понимание мне кажется близким к пониманию программирования как педагогической задачи. Извиняюсь за сумбур.
|
Автор: | sia [ Пятница, 17 Апрель, 2009 21:16 ] |
Заголовок сообщения: | Re: В 101-й раз о грамотной алгоритмизации |
Algo писал(а): Ох уж этот могучий и не убиваемый GOTO! (Он сказал "I'll be back") Даже если смотреть с позиций чисто практического удобства (некоторые ставят его превыше всего), и малые и большие программы легко пишутся без goto, ЛЕГКО!!! Если совсем чуть чуть напрячься, или сразу изучать и использовать правильные шаблоны и даже не знать break и continue, то и без них можно легко обойтись. ИМХО, пока учебники, построенныех по принципу "от конструкции яззыка к задаче" будут существовать в природе, будет воскресать и Goto . GOTO я включил в список "пожеланий" для полноты, как вырожденный базовый примитив. Я не ставлю его выше LOOP или REPEAT. Мне в некоторых случаях для упрощения и большей выразительности - нравится его использовать. Например - цикл в цикле. Хочу выйти раньше, делаю Break, попадаю снова в цикл, и там нужно обработать преждевременный выход. Неудобно, некрасиво. Код: .... FOR j := .... FOR k := .... .... IF (условие_ошибки_2) THEN GOTO 102; END; .... END; END; /// 100: RETURN 0; 101: RETURN -1; 102: RETURN -2; END func; Насчёт "правильности" и шаблонов - вы какой критерий правильности обычно используете? - Вам понравилось, удобно, не напрягает, эффективно, повышает читабельность, проверен, сказали в книжке что правильный, структурней, привычка, реже ошибки, ...? Я стараюсь принимать во внимание - эффективность, меньше ошибок, гибкость, конкретику... Обратил внимание, что редко использую REPEAT, понял, чем он мне не нравится - использует условие для выхода, а не выполнения (как в WHILE), из-за этого чаще ошибки! пример1: j := 0; REPEAT .... INC(j); UNTIL (j<10); print j; //что выдаст ? И сомнения, напрягает. Выдаст 1, ошибка! пример2: j := 0; REPEAT .... INC(j); UNTIL (j=10); print j; //выдаст 10, т.к. по FALSE - повторяет, а по TRUE - выходит из цикла. Если бы было так: (так мне больше нравится) пример3: j := 0; REPEAT .... INC(j); NEXT (j<10); print j; //что выдаст? сразу ясно, как в WHILE. Индекс пробегает 10 элементов [0..9], выйдет j=10. или вот такой вариант расширения WHILE, с условием для входа и для выхода. Пример3: Код: WHILE f.Get(s) DO //читаем строку
.... //что-то делаем NEXT (s # "END"); //крутим, пока не конец // или тот же WHILE(s # "END"); |
Автор: | sia [ Пятница, 17 Апрель, 2009 21:45 ] |
Заголовок сообщения: | Re: В 101-й раз о грамотной алгоритмизации |
Valery Solovey писал(а): Постоянно коллапсается. Я дома на своей машине не мог видео смотреть - после нескольких первых минут фильма ядро падало. Разные причины могут быть. У меня дома под Виндой Pinnacle Studio частенько зависает. Я не имею претензий к Винде, под большим подозрением Пиннакл. А на работе Юниксы под нагрузкой иногда целый год без перезагрузки... |
Автор: | Илья Ермаков [ Пятница, 17 Апрель, 2009 22:58 ] |
Заголовок сообщения: | Re: В 101-й раз о грамотной алгоритмизации |
sia писал(а): На что я ответил, что в общем случае этот аппарат не работает, У плохого танцора... не работает Что такое "общий случай"? Есть как раз обычные - процентов 80 и даже более в чисто технических задачах - случаи циклов, которые не требуют никакого изобретения велосипедов сводятся к базовым схемам прохода и линейного поиска (получаются из постановок "задачи" - для конкр. цикла - вида "выполнить для всех" и из "показать, что существует..." соответственно; задача "для всех ситуаций истинно A" также сводится к "не существует такого, что не ~A", т.е. к "опровергающему" линейному поиску). Достаточно просто знать эти схемы - и составление цикла оказывается шаблонной задачей. Есть "необычные" циклы, в которых изменяющиеся переменные (или "скрытые переменные", за фасадом вызываемых процедур-объектов-сообщений - но они есть, эти состояния) связаны хитрым соотношением. И здесь нет более простого способа построить правильный цикл, чем явно проговорить все эти соотношения. Суждения о состояниях до, после, и в процессе. С такой степенью формальности, которая достаточна (можно иногда и просто словами). |
Автор: | Илья Ермаков [ Пятница, 17 Апрель, 2009 23:03 ] |
Заголовок сообщения: | Re: В 101-й раз о грамотной алгоритмизации |
sia писал(а): или вот такой вариант расширения WHILE, с условием для входа и для выхода. Пример3: Код: WHILE f.Get(s) DO //читаем строку .... //что-то делаем NEXT (s # "END"); //крутим, пока не конец // или тот же WHILE(s # "END"); Вы просто боитесь логики, видимо, и конъюнкцию поставить для Вас - это насилие над мозгом Отсюда все проблемы. |
Автор: | sia [ Пятница, 17 Апрель, 2009 23:52 ] |
Заголовок сообщения: | Re: В 101-й раз о грамотной алгоритмизации |
Madzi писал(а): При чтении этого форума у меня сложилось чёткое убеждение что люди говорят об одном и том же с разных позиций в силу своего жизненного опыта (не уровня знаний) ... --- Да, похоже что так, полностью согласен. Madzi писал(а): К сожалению я ни разу не встречал, чтобы на занятиях по информатике/программированию давали математических подход. И книжек таких тоже видел очень мало (хватит пальцев одной руки и то не всех). --- Когда я учился (радиофизика), всё обучение программирование завершилось в 2 семестра - с десяток --- лабораторных занятий, и курсовая - решение уравнения в частных производных на плоскости, --- граничные условия, расчёт в единичном кубе. БЭСМ-6, АЛЬФА (русские идентификаторы), --- перфокарты, коммерческое время ~1 сек! (на всё, включая компиляцию). Madzi писал(а): Это причины разногласий. И вы будете спорить до посинения, каждый отстаивая свою - верную точку зрения. "Здравомыслящий" человек (я не хочу никого обидеть, просто пользуюсь определённым выше термином) не может понять "математической конструкции алгоритма". Она ему чужда и неудобна, потому что, скорее всего, определённым разделам математики (например теории графов) не уделялось достаточно внимания и отсутствует умение "накинуть" граф на алгоритм и привести к простому (изоморфному) виду. --- я бы высказал предположение - не востребована. Разработчику не требуется, математику - ни к чему, т.к. уже встроили --- диалог-транслятор, заказчику - незачем, есть приёмо-сдаточные испытания, есть поддержка, --- есть опытная эксплуатация, и всё равно не поймёт; для сопровожденцев - лишняя нагрузка, --- т.к. код запутанней и больше; остаются специальные особые случаи (не сталкивался). Madzi писал(а): Я думаю что никто не будет спорить о том, что нужно повышать общий математических уровень программистов (путь и в далёкой перспективе) и стремиться прийти к "математическому" программированию. А математика не любит вольностей. Структурный подход это первый шаг навстречу математике, но к сожалению это почти всё, что у нас пока имеется. --- Не густо. А функциональное программирование, численные методы, моделирование, --- теория языков и компиляторы, задачи реального времени - сейчас преподают? Madzi писал(а): Я предлагаю участникам переосмыслить свое отношение к программированию в целом и к обсуждаемым здесь вопросам в частности и быть более лояльными друг к другу и попытаться понять друг друга попробывав мыслить как опонент. И тогда станет понятно почему вас не понимают, и где вы правы, а где и нет. --- Выскажу свои предположения, возникшие вчера, после переосмысления, - почему Декстра, --- почему против выходов из FOR, и непропорционально за структурное программирование? --- Дейкстра - это знамя, бастион, краеугольный камень, символ научности, --- проторенный путь для тех, кто под него встал (или им прикрылся); --- на выходе поплывут постусловия, GOTO трудно обставить условиями, ветвистость алгоритма --- может значительно повыситься, не будут работать предположения о линейности участков и сведение к ней, ---"доказательство" - подгонка к результату (сходимость) - затруднится; "доказательный" код --- станет больше основного; --- нужно чему-то "теоретическому, алгоритмически правильному" учить студентов (компостировать --- им мозги, отучать думать, приучать автоматически отвечать заученными фразами); --- нужно на чём-то защищаться (не всегда же на 101 обучающей системе); --- Хочу подчеркнуть, что это лично мои предположения, домыслы, ни на чём не основанные, --- ни чем не подкреплённые, ни к кому лично не относящиеся. Просто мысли вслух. --- Конечно я заблуждаюсь, т.к. у Дейкстры не учился, всего лишь пару раз послушал Ершова и --- прочитал пару другую книжек - по методам оптимизации и конструированию компиляторов, давно. --- |
Автор: | Владислав Жаринов [ Пятница, 06 Июль, 2012 09:42 ] |
Заголовок сообщения: | В 101-й раз... - что говорят в сети об Оберонах :) |
При обсуждении графпрограммирования на РСДН где-то с этого поста пошёл топик такой же. Причём, как видно, не обошлось без обсуждения Оберонов и их сторонников... |
Автор: | Рыжий [ Пятница, 14 Декабрь, 2012 01:40 ] |
Заголовок сообщения: | Re: В 101-й раз о грамотной алгоритмизации |
Опять эта галиматья...пока у процессора есть реальный режим - goto не умрет. |
Автор: | igor [ Пятница, 14 Декабрь, 2012 17:41 ] |
Заголовок сообщения: | Re: В 101-й раз о грамотной алгоритмизации |
Рыжий писал(а): пока у процессора есть реальный режим - goto не умрет. А при чём тут процессор? ЯВУ абстрагирует программиста от целевой машины. По крайней мере, замысел был такой.
|
Автор: | Рыжий [ Суббота, 15 Декабрь, 2012 10:47 ] |
Заголовок сообщения: | Re: В 101-й раз о грамотной алгоритмизации |
goto позволяет абстрагироваться от ряда высокоуровневых конструкций и стека , это дает нам новый уровень качества кода. goto - универсальный инструмент реализации динамических структур данных. Но, для его использования в этом качестве, необходимо научится видоизменять сознание. |
Автор: | Владимир Паронджанов [ Суббота, 30 Июль, 2016 10:54 ] |
Заголовок сообщения: | Re: В 101-й раз о грамотной алгоритмизации |
С интересом прочитал тему с начала до конца. Мне кажется, дискуссия была бы более наглядной, если в каждый пост добавить эквивалентный графический алгоритм на языке ДРАКОН (картинку в формате .png). |
Страница 3 из 3 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |