OberonCore
https://forum.oberoncore.ru/

Техника программирования - техника декомпозиции?
https://forum.oberoncore.ru/viewtopic.php?f=27&t=2550
Страница 1 из 3

Автор:  Валерий Лаптев [ Вторник, 13 Апрель, 2010 07:56 ]
Заголовок сообщения:  Техника программирования - техника декомпозиции?

Пришла в голову мысль.
Вот мы говорим о необходимости постановки техники в программировании. Согласились с тем, что должны быть шаблоны-образцы использования языковых конструкций, которые надо "вбивать" в мозги программистов.
Но ИМХО гораздо важнее научить декомпозиции - без этого никакие шаблоны использования не помогут. А вот научить декомпозиции бывает значительно сложнее. Во всяком случае я постоянно сталкиваюсь с тем, что начинающие программеры не в состоянии разложить большое действие на ряд простых и поставить их в нужном порядке.
Как учить ТЕХНИКЕ ДЕКОМПОЗИЦИИ?
На черепашках?
У меня такие вопросы возникают потому, что у самого почему-то проблем не возникает,
и мне часто не понятно, а что может быть студиозу непонятно?

Автор:  Евгений Темиргалеев [ Вторник, 13 Апрель, 2010 09:22 ]
Заголовок сообщения:  Re: Техника программирования - техника декомпозиции?

Валерий Лаптев писал(а):
Как учить ТЕХНИКЕ ДЕКОМПОЗИЦИИ?
На черепашках?
http://www.inr.ac.ru/~info21/troitsklic ... jetap6.htm

http://www.inr.ac.ru/~info21/
Цитата:
Проект Информатика-21 ставит целью пропаганду и внедрение в систему образования Оберона/Компонентного Паскаля как практически идеальной единой платформы для обучения программированию и информатике.
На такой платформе учащихся можно провести от самых первых шагов (5й класс; см. репортаж) ....

Автор:  Валерий Лаптев [ Вторник, 13 Апрель, 2010 09:36 ]
Заголовок сообщения:  Re: Техника программирования - техника декомпозиции?

У меня одна большая сложность по сравнению с ФВ. У него - школьники-пятиклашки. А у меня - студенты 1-го курса. И в учебном плане просто нет места для черепашек. Если только менять программу одной-двух дисциплин.
И еще преподов научить этому подходу.
Но действительно, получается неплохо.
Правда нас учили в кодах Минска-22 писать вычисление формул. Тоже сильно помогает понимать декомпозицию.

Автор:  Info21 [ Вторник, 13 Апрель, 2010 09:45 ]
Заголовок сообщения:  Re: Техника программирования - техника декомпозиции?

Валерий Лаптев писал(а):
У меня одна большая сложность по сравнению с ФВ. У него - школьники-пятиклашки. А у меня - студенты 1-го курса.
Во-первых, 5-клашек учить гораздо труднее. Во-вторых, у меня есть весь спектр по аспирантов включительно.

Автор:  Info21 [ Вторник, 13 Апрель, 2010 09:47 ]
Заголовок сообщения:  Re: Техника программирования - техника декомпозиции?

Валерий Лаптев писал(а):
Как учить ТЕХНИКЕ ДЕКОМПОЗИЦИИ?
Чтобы начинать говорить о декомпозиции, нужно иметь К ЧЕМУ декомпоновать.

Автор:  Валерий Лаптев [ Вторник, 13 Апрель, 2010 10:24 ]
Заголовок сообщения:  Re: Техника программирования - техника декомпозиции?

Info21 писал(а):
Валерий Лаптев писал(а):
Как учить ТЕХНИКЕ ДЕКОМПОЗИЦИИ?
Чтобы начинать говорить о декомпозиции, нужно иметь К ЧЕМУ декомпоновать.

Ну правильно! Формула - к последовательности команд Минска-22...
Но аспирантов вы же не на черепашках учите? Я так понимаю, что их декомпозиции вообще учить не требуется...
Кстати, а чем вы сайт пополняете? С помощью какого инструмента? Или ручками в html?

Автор:  ==== [ Вторник, 13 Апрель, 2010 20:08 ]
Заголовок сообщения:  Re: Техника программирования - техника декомпозиции?

Info21 писал(а):
Во-первых, 5-клашек учить гораздо труднее.

Info21, Каждый год слышим о 5-клашках, куда они деваются, чем они заняты перейдя в 6, 7, 8, 9 класс?

Автор:  ==== [ Вторник, 13 Апрель, 2010 20:44 ]
Заголовок сообщения:  Re: Техника программирования - техника декомпозиции?

Валерий Лаптев писал(а):
Как учить ТЕХНИКЕ ДЕКОМПОЗИЦИИ?
Учить ТЕХНИКЕ ДЕКОМПОЗИЦИИ не надо, это ведь одна из операций алгоритмизации задачи. Следовательно надо научить алгоритмизации.

Алгоритмизация нужна не только перед программированием, но и при организации любой деятельности.

В теме: Культурология языка Дракон 02 Июнь, 2008 http://forum.oberoncore.ru/viewtopic.php?p=15870#p15870
Владимир Паронджанов писал(а):
НЕДОСТАТОК ПОЗИЦИИ АКАДЕМИКА ЕРШОВА

Ершов смотрел на проблему по-крупному, порою не различая деталей (в ту пору это было вполне извинительно).
Однако есть деталь, которую следует признать важной. Это различие между
ПРОГРАММИРОВАНИЕМ И АЛГОРИТМИЗАЦИЕЙ.

Моя мысль состоит в следующем.

1. Обучение программированию является важной задачей. Но эта задача касается сравнительно небольшого числа людей. Обучение программированию не может и не должно быть массовым.

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


АЛГОРИТМИЗАЦИЯ — ВТОРАЯ ГРАМОТНОСТЬ?

Развивая идеи академика Ершова, учитывая его ошибки и реалии сегодняшнего дня, можно сделать следующие замечания:

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

АЛГОРИТМИЗАЦИЯ ТРУДНА. МОЖНО ЛИ СДЕЛАТЬ ЕЕ ЛЕГКОЙ?

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

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

Автор:  Илья Ермаков [ Вторник, 13 Апрель, 2010 21:14 ]
Заголовок сообщения:  Re: Техника программирования - техника декомпозиции?

У меня в этом году в курсе несколько начальных занятий посвящено чисто алгоритмам, рисуемым на доске (ДРАКОН-схемой и рядом на КП), по разным жизненным примерам.
Впечатления - удачно. Сразу надо вводить понятие вспомогательного алгоритма - процедуры. Житейские примеры имеют то преимущество, что там можно показать эту "бесконечную декомпозицию": т.е. что любое действие можно рассматривать или как элементарное, или как реализованное процедурой, состоящее из поддействий.

Удалось даже понятие инварианта цикла понятно проиллюстрировать уже на этом этапе.

Автор:  Валерий Лаптев [ Среда, 14 Апрель, 2010 07:01 ]
Заголовок сообщения:  Re: Техника программирования - техника декомпозиции?

Илья Ермаков писал(а):
У меня в этом году в курсе несколько начальных занятий посвящено чисто алгоритмам, рисуемым на доске (ДРАКОН-схемой и рядом на КП), по разным жизненным примерам.
Впечатления - удачно. Сразу надо вводить понятие вспомогательного алгоритма - процедуры. Житейские примеры имеют то преимущество, что там можно показать эту "бесконечную декомпозицию": т.е. что любое действие можно рассматривать или как элементарное, или как реализованное процедурой, состоящее из поддействий.

Удалось даже понятие инварианта цикла понятно проиллюстрировать уже на этом этапе.

Ценно! Совпадает с практикой ФВ у пятиклашек - там тоже получилось, что процедуры надо вводить раньше циклов.

Автор:  Valery Solovey [ Среда, 14 Апрель, 2010 10:50 ]
Заголовок сообщения:  Re: Техника программирования - техника декомпозиции?

Валерий Лаптев писал(а):
... нас учили в кодах Минска-22 писать вычисление формул. Тоже сильно помогает понимать декомпозицию.
Не помогает, а стимулирует в желании понять, что это такое. Потому что Вы своим примером можете показать скорость разработки и уменьшение количества ошибок по сравнению с аналогичной программой у студентов. А затем сказать, что причина тому - правильная декомпозиция. Поскольку на практических занятиях времени мало, то большинству очень захочется уметь правильно выполнять декомпозицию уже только по этой причине.

Автор:  Info21 [ Среда, 14 Апрель, 2010 10:59 ]
Заголовок сообщения:  Re: Техника программирования - техника декомпозиции?

Геннадий Тышов писал(а):
Info21 писал(а):
Во-первых, 5-клашек учить гораздо труднее.

Info21, Каждый год слышим о 5-клашках, куда они деваются, чем они заняты перейдя в 6, 7, 8, 9 класс?
Они приходят в Байтик. Некоторые.

Автор:  Valery Solovey [ Среда, 14 Апрель, 2010 11:42 ]
Заголовок сообщения:  Re: Техника программирования - техника декомпозиции?

Валерий Лаптев писал(а):
А вот научить декомпозиции бывает значительно сложнее. Во всяком случае я постоянно сталкиваюсь с тем, что начинающие программеры не в состоянии разложить большое действие на ряд простых и поставить их в нужном порядке.
Как учить ТЕХНИКЕ ДЕКОМПОЗИЦИИ?
На черепашках?
Черепашки тут не помогут. Лучше всего тут поможет опыт. Но опыт не в программировании.

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

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

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

Грубо говоря - так.

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

А черепашка здесь не поможет.

Вот такой макет. Пусть педагоги его рассмотрят и подкорректируют.

Автор:  Евгений Темиргалеев [ Среда, 14 Апрель, 2010 12:11 ]
Заголовок сообщения:  Re: Техника программирования - техника декомпозиции?

Valery Solovey писал(а):
Процесс декомпозиции заключается в нахождении определения понятия.
...
А черепашка здесь не поможет.
Погрешу, сдеру определение из википедии:
Цитата:
Декомпози́ция — научный метод, использующий структуру задачи и позволяющий заменить решение одной большой задачи решением серии меньших задач.
Задача рисования черепашкой дома спокойно делится на рисование стен, окон, двери и т.п.

Автор:  Евгений Темиргалеев [ Среда, 14 Апрель, 2010 12:19 ]
Заголовок сообщения:  Re: Техника программирования - техника декомпозиции?

Гм... а если ввести возможность установить ограничения на уровень вложенности для составных операторов и длину последовательности операторов?

Под курс/набор задач можно подобрать величину опытным путём, и... пусть компилятор принуждает к декомпозиции...

Автор:  Valery Solovey [ Среда, 14 Апрель, 2010 12:23 ]
Заголовок сообщения:  Re: Техника программирования - техника декомпозиции?

Я дал более узкое понятие, соответствующее контексту.

А к определению из википедии у меня претензии. Почему научный метод? Им не учёные не пользуются? Что значит "серия задач"? Может, ситема для них - это набор элементов?

Подозреваю, там тоже дано частное определение.

Автор:  Valery Solovey [ Среда, 14 Апрель, 2010 12:25 ]
Заголовок сообщения:  Re: Техника программирования - техника декомпозиции?

Евгений Темиргалеев писал(а):
Гм... а если ввести возможность установить ограничения на уровень вложенности для составных операторов и длину последовательности операторов?

Под курс/набор задач можно подобрать величину опытным путём, и... пусть компилятор принуждает к декомпозиции...
Но компилятор отвечает за синтаксическую составляющую. А декомпозиция лежит на семантическом уровне.

Автор:  Info21 [ Среда, 14 Апрель, 2010 12:32 ]
Заголовок сообщения:  Re: Техника программирования - техника декомпозиции?

Valery Solovey писал(а):
А к определению из википедии у меня претензии.
Да, недодуманное определение.

А про тетрадь вместо клавы -- это тонко подмечено. Одна проблема: комп их прям как магнит притягивает. Очень трудно приучать к карандашу и бумаге.

Автор:  Евгений Темиргалеев [ Среда, 14 Апрель, 2010 17:20 ]
Заголовок сообщения:  Re: Техника программирования - техника декомпозиции?

Valery Solovey писал(а):
Евгений Темиргалеев писал(а):
Гм... а если ввести возможность установить ограничения на уровень вложенности для составных операторов и длину последовательности операторов?

Под курс/набор задач можно подобрать величину опытным путём, и... пусть компилятор принуждает к декомпозиции...
Но компилятор отвечает за синтаксическую составляющую. А декомпозиция лежит на семантическом уровне.
В предложении говорилось об учебном компиляторе и специально подобранном наборе задач.

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

Автор:  igor [ Среда, 14 Апрель, 2010 17:35 ]
Заголовок сообщения:  Re: Техника программирования - техника декомпозиции?

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

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