OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Пятница, 22 Ноябрь, 2019 16:54

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




Начать новую тему Ответить на тему  [ Сообщений: 12 ] 
Автор Сообщение
СообщениеДобавлено: Среда, 12 Сентябрь, 2012 11:00 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8196
Откуда: Троицк, Москва
Вчера в процессе жизни имел беседу с дежурным участковым, которая оказалась коррекционным психологом по образованию. Отсюда название темы.

А суть темы -- в следующем вопросе, который его автор (viewtopic.php?p=74639#p74639) не отрефлексировал как тему отдельной ветки, приходится, вот, за него это делать (не знаю, как поставить хмурый смайлик):

Валерий Лаптев писал(а):
Отметил у 2 курса (бывший 1-й) типичную программистскую установку: изучаем язык как некую интересную сущность, а не как средство решения возникающих задач.
Должен сказать, достаточна типичная установка - у самого такие были.
Как исправлять?
Есть подозрение, что самый лучший способ -- еще в школе разделить алгоритмику и изучение ошибок дизайна конкретных языков.

Начать с алгоритмики, растолковать базовые понятия, а потом -- где-то ближе к подготовке к ЕГЭ -- специально пройтись по старому паскалю, по Це -- трактуя их именно как наглядное пособие по ошибкам дизайна.
Только надо объяснять, почему это ошибки.

Возможно, и в университете это сработало бы.

И еще объяснять, что фокусы на уровне нотации ведут к брейнфаку и никуда больше.
Тут, правда, полезно, чтобы аудитория уже понимала, что на уровне железа всё устроено по сути примитивно. Иначе правильно про брейнфак не поймут.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 12 Сентябрь, 2012 11:06 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8196
Откуда: Троицк, Москва
Где-то упоминал, но надо собрать сюда (тему не стоит ограничивать одним узким вопросом).


Один крендель в продвинутой группе в Байтике 8 месяцев отучался начинать любоый цикл с FOR'а.
Решение было найдено на уровне кнопки F5 (можно сделать и на уронве трансляции русских-английских слов):

попытка набрать FOR завершается появлением на экране цитаты из Некрасова:

"Мужик -- что бык, втемяшится
в башку какая блажь,
колом ее оттудова
не выбьешь."

В том случае это сработало.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 12 Сентябрь, 2012 11:53 

Зарегистрирован: Суббота, 07 Март, 2009 15:39
Сообщения: 3109
Откуда: Астрахань
Info21 писал(а):
Валерий Лаптев писал(а):
Отметил у 2 курса (бывший 1-й) типичную программистскую установку: изучаем язык как некую интересную сущность, а не как средство решения возникающих задач.
Должен сказать, достаточна типичная установка - у самого такие были.
Как исправлять?
Есть подозрение, что самый лучший способ -- еще в школе разделить алгоритмику и изучение ошибок дизайна конкретных языков.
Только надо объяснять, почему это ошибки.

Возможно, и в университете это сработало бы.

И еще объяснять, что фокусы на уровне нотации ведут к брейнфаку и никуда больше.
Тут, правда, полезно, чтобы аудитория уже понимала, что на уровне железа всё устроено по сути примитивно. Иначе правильно про брейнфак не поймут.

Я ровно именно это пытаюсь делать на лекциях по ООП, поскольку более простой уровень (структурное программирование) имеет меньше разнообразия в дизайне.
Вот как раз сегодня буду рассказывать о конкретных конструкциях класса и буду приводить примеры из С++нутых языков и из Оберона-КП.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 12 Сентябрь, 2012 11:55 

Зарегистрирован: Суббота, 07 Март, 2009 15:39
Сообщения: 3109
Откуда: Астрахань
Info21 писал(а):
Где-то упоминал, но надо собрать сюда (тему не стоит ограничивать одним узким вопросом).

Один крендель в продвинутой группе в Байтике 8 месяцев отучался начинать любоый цикл с FOR'а.
Решение было найдено на уровне кнопки F5 (можно сделать и на уронве трансляции русских-английских слов):

попытка набрать FOR завершается появлением на экране цитаты из Некрасова:

"Мужик -- что бык, втемяшится
в башку какая блажь,
колом ее оттудова
не выбьешь."

В том случае это сработало.

О!!!! Спасибо! В среде сделать подобный текст - нефиг делать... :)
Еще один момент: студни очень часто дают бессмысленные имена переменным-константам-функциям.
Как боретесь?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 12 Сентябрь, 2012 13:41 

Зарегистрирован: Воскресенье, 01 Ноябрь, 2009 05:13
Сообщения: 2046
Вообще такой путь - сначала человек ставит задачу. В постановке заодно даёт имена разным сущностям (предметам, операциям, исполнителям). Вроде как здесь. Затем в программе и прочем (тех же утверждениях) проверяется наличие этих имён (как полных, так и сокращённых). Так примерно...

Очевидно, в среде это реализовать - тоже нефиг делать... :) При некоторых условиях. Прежде всего д.б. каноническая структура проекта - чтобы встроенный тестер знал, где искать предметное описание и математические формализации (откуда берёт образцы, полагаемые осмысленными). Допустим, что-то вроде данного реферата задачи (но в перспективе - реферата системы с учётом сказанного здесь: viewtopic.php?p=74644#p74644). Некий канон неформальных рассуждений о задаче устанавливает Виталий Валерьевич в "Решении сложных задач". Ещё надо задать правила перебора сокращений (со слитностью/без, на какую глубину от длины слова)...
    Далее, неплохо, чтобы в неформальном тексте документа среды имена тоже были полями, как уже у Вас в исходниках. Тогда они идут в реестр сущностей (тезаурус проекта), где и ишшем... :) Совсем хорошо - если неформальные имена категорированы (на императивные, декларативные и исполнительские). Вроде как в такой форме, как таблица здесь. Тогда тестер проверяет раздельно по категориям.

Фактически при наличии такой таблицы он только в её именных столбцах и шарит (перебирая все языки).
Ну и результат понятен - выдаётся процент полных/частичных совпадений имён в постановке и последующих формализациях. Ну, там можно придумать списки диффов в той или иной форме... :)

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 12 Сентябрь, 2012 14:35 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8196
Откуда: Троицк, Москва
Валерий Лаптев писал(а):
студни очень часто дают бессмысленные имена переменным-константам-функциям.
Как боретесь?
Незачетом задачи.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 12 Сентябрь, 2012 14:37 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8196
Откуда: Троицк, Москва
Вообще это тоже пунктик важный:

Трудно втемяшивать, что программа, проходящая тесты, это еще не всё.

Нужно с самого начала объявлять про evolvability и, соответственно, качество текста как обязательный фактор зачетности программы.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 27 Февраль, 2013 16:42 

Зарегистрирован: Вторник, 05 Январь, 2010 21:31
Сообщения: 1101
Откуда: Харків, Данилівка
Info21 писал(а):
И еще объяснять, что фокусы на уровне нотации ведут к брейнфаку и никуда больше.
Тут, правда, полезно, чтобы аудитория уже понимала, что на уровне железа всё устроено по сути примитивно. Иначе правильно про брейнфак не поймут.

Это? :mrgreen:
Цитата:
TabName:"tblt"
FldNum:6
RowCnt:100000
/ fncreate создает таблицу формата: ([]id:`int$();f0:`int$();f1:`int$()....fN:`int$())
fncreate:{[tn;fn] .(tn,(-1_,/((,":([]id"),"f",'$!fn),\:":`int$();"),")")}
fncreate[TabName;FldNum]
TstData:(,!RowCnt),(FldNum,RowCnt)#(FldNum*RowCnt) ? 100
.("`",TabName," insert (TstData) ")


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

Зарегистрирован: Суббота, 07 Март, 2009 15:39
Сообщения: 3109
Откуда: Астрахань
Вот сегодня только возвращались с коллегами к обсуждению проблем обучения программированию... :)
Человек обучается всегда от частного к общему.
Беда в том, что многие (да что там - большинство!) не стремятся к общему. И застревают на частном.
В программировании это означает, что начинают изучать язык программирования и "застревают" в нем.
В конкретных технологиях, в конкретных средах...
Вот даже наш семантический редактор делался по принципу: давайте сделаем что-нибудь, посмотрим, что получится.
И сегодня я второму курсу объяснял, что у программеров никогда не находится времени подумать,
зато всегда находится время на переделку... :(
Всего, что накосячили, не размышляя предварительно ни о пользователях, ни об архитектуре.


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

Зарегистрирован: Суббота, 07 Март, 2009 15:39
Сообщения: 3109
Откуда: Астрахань
Еще один момент.
После нашей среды преподы отметили. что как-то уж очень быстро начали продвигаться в студии и основах Си.
Буквально на 2-3 лабе уже делали циклы, чего в прежние годы не наблюдалось.
Возможно, мы их сильно напугали, и они просто стали делать .

Но преподы отмечают и такой эффект: некоторые студенты, почуяв "ветер свободы", стали в Студии писать выкрутасные конструкции... :) Чего в нашей среде нельзя было в принципе.

И второе: замечены копипастные лабы - этого тоже было невозможно в нашей среде.

Текстовый редактор в IDE - при обучении однозначно зло.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 10 Март, 2015 20:26 

Зарегистрирован: Вторник, 05 Январь, 2010 21:31
Сообщения: 1101
Откуда: Харків, Данилівка
Info21 писал(а):
Где-то упоминал, но надо собрать сюда (тему не стоит ограничивать одним узким вопросом).


Один крендель в продвинутой группе в Байтике 8 месяцев отучался начинать любоый цикл с FOR'а.
Решение было найдено на уровне кнопки F5 (можно сделать и на уронве трансляции русских-английских слов):

попытка набрать FOR завершается появлением на экране цитаты из Некрасова:

"Мужик -- что бык, втемяшится
в башку какая блажь,
колом ее оттудова
не выбьешь."

В том случае это сработало.

Это все Дейкстра виноват. Это он не дал людям доизучить Бейсик. Набрехал чего-то там про макароны, а сам бревно в глазу и не заметил. Поднял сам себя за уши. В то время иначе было невозможно - не надуешь не взлетишь. Даже цикл собственного имени в Бейсике проворонил:
10...
20 P1:S1: GOTO 10
30 P2:S2: GOTO 10
40 P3:S3: GOTO 10
50 ...

:mrgreen:


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 10 Март, 2015 21:12 

Зарегистрирован: Вторник, 05 Январь, 2010 21:31
Сообщения: 1101
Откуда: Харків, Данилівка
Вот два эквивалентных отрывка кода.
1)
input type, amount
if type="вклад"
then balance=balance+amount
print "принят вклад в размере: ", amount
print "благодарим вас за пользование услугами нашего банка!"
else if type="снятие"
then if amount<= balance
then balance=balance-amount
print "сумма снятия: ", amount
else print "недостаточная сумма на счете"
end if
else print "неопознанная операция"
end if
end if

2)
100 DEFSTR T
110 INPUT TYPE, AMOUNT
120 IF TYPE<>"ВКЛАД" THEN GOTO 170
130 BALANCE=BALANCE+AMOUNT
140 PRINT "ПРИНЯТ ВКЛАД В РАЗМЕРЕ: ", AMOUNT
150 PRINT "БЛАГОДАРИМ ВАС ЗА ПОЛЬЗОВАНИЕ УСЛУГАМИ НАШЕГО БАНКА!"
160 GOTO 250
170 IF TYPE<>"СНЯТИЕ" THEN GOTO 220
180 IF AMOUNT<=BALANCE
THEN BALANCE=BALANCE-AMOUNT : PRINT "СУММА СНЯТИЯ: ",AMOUNT
ELSE PRINT "НЕДОСТАТОЧНАЯ СУММА НА СЧЕТЕ"
210 GOTO 240
220 '
230 PRINT "НЕОПОЗНАННАЯ ОПЕРАЦИЯ"
240 '
250 '
260 '
260 END

Каждому, кто хоть немного знаком с Бейсиком, ясно, что строки 120 и 170 образуют ветвление, а строка 160 - обход. Этому учат в учебниках по Бейсику. И знающие язык люди сразу же обнаруживают такие конструкции в контексте. Научиться этому намного проще, чем выучить премудрости Паскаля. Ежу понятно, что второй вариант дает фору запутанной макаронине с тремя вложенными циклами из первого.
При глубокой вложенности условий в Паскале только и остается, что корпеть над тем какой именно end if к какому именно if относится. Это можно делать до тех пор, пока рак на горе свистнет. Не так в Бейсике. Тут все просто - увидел GOTO в конце IF - значит все, что до этой метки - true, а после нее false (в старых версиях можно было вообще опустить GOTO и просто указать метку). Конец уровня вложенности прослеживается буквально. Увидал переход назад значит ищи LOOP или WHILE... А в Паскале решили, что и так сойдет. :mrgreen: Очень интересное решение имеется в Фокале, там метка может быть сложной, например: 10.1, 10.2 или вовсе 33.44.11... :lol: В Бейсике очень просто отличить хороший код от плохого. Если типические конструкции не дают ключа к пониманию смысла - значит код хренов. Все что понаписал Дейкстра относительно GOTO и Бейсика относится именно к хреновому коду. В Паскале же хороший код зачастую неотличим от хренового. Поэтому Дейкстра не создал условий для написания хорошего кода, он просто окончательно запутал вопрос, предоставив теоретикам разбираться в том, какая из его сомнительных идей более правильная. :mrgreen: Кроме того, использование GOTO гораздо более провокативно в хорошем смысле - оно заставляет нормального программиста оставлять между переходами не слишком много места и все повторяющиеся простыни выносить под GOSUB, а значит - по факту подталкивает к использованию идей структурного программирования. А вообще, Эсперанто учить нужно. Говорят, на нем можно любую мысль в два счета выразить. :roll:


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

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


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

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


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

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