Имею отрицательный опыт написания больших программ в таком стиле.
Для себя понял, что начиная с некоторого объёма, перестаю воспринимать программу.
При этом текстом воспринимается намного бОльший объём. Возможно это лично моё ограничение.
Сам преподаю программирование в школе. Имею набитые болячки и натёртые мозоли.
Хотел ответить кратко, но это уже лонгрид. Может кому будет интересно.
Самая важная мысль: определитесь, вы хотите чему-то научить или заинтересовать? От ответа на этот вопрос зависит … всё! Это две совершенно разные цели с совершенно разными дорогами и сложностями.
Вы в статье часто употребляете слово «обучение», я исходил из этого.
Общие мысли.
Вы хотите за очень короткое время научить чему-то осознанному – это довольно трудная задача, причём здесь есть как минимум 3 больших подводных камня:
1) Вы пишете «дети 10-15 лет» — как раз в этом месте ОЧЕНЬ большая разница между детьми: и в восприятии материала, и в понимании, и в самостоятельности и тд.тп. (причём, это никак не исключает частного случая, что кто-то в 10 мыслит лучше, чем другой в 15. – но тогда нужен отбор или нечто подобное. Вести разноуровневую группу ещё более сложно.)
2) Цели и мотивация. Зачем они пришли к вам? Опыт из жизни: однажды на кружок робототехники привели мальчика со словами «он бредит роботами, вы должны его взять». Взял. Действительно бредит. Рисует очень детальные красивейшие рисунки всевозможных роботов. Ни одной инженерной задачи в кружке не решил, но ходил долго и упорно.
Вывод: они все приходят с разными целями, и эти цели, зачастую, весьма далеки от вашей. Сейчас практически у всех детей цель — это хайп: я хочу быстрый и красивый результат. Заметьте, это сильно отличается от слов «я хочу уметь сделать быстрый и красивый результат». Встречаются дети, которые в чём-то хотят разобраться, а не просто «сделал и забыл», но это большая редкость. Это «хочу уметь сделать» появляется позже в более осознанном возрасте. (это ещё не упоминаю мотивацию «родители заставили» — отдельная песня)
В итоге: вы находитесь на вражеской территории. Они идут к хайпу, а вы их тайно ведёте к знаниям. :) Методы соответствующие: маскируем одно под другое, устраиваем соревнования «кто хайповее» но через знания и тдтп.
3) Очень важно понимать, что за ограниченный срок у вас не получится научить всех. Будут откровенно тормознутые дети (даже среди тех кто пришёл осознанно!), которым вы можете хоть 100 раз разными словами объяснять – бесполезно. И тут важно соблюсти некую «общую скорость группы» чтобы те, кто идёт вперёд не сильно тормозили. А кого-то придётся тащить как бесполезный балласт.
Основное правило урока: каждый ребёнок должен быть занят делом. А задача препода создать массу различных дел в едином русле обучения, и выдавать их детям в зависимости от уровня и текущих успехов. Классические ситуации: очень трудная задача = нечего делать, очень лёгкая задача – лень = нечего делать. Лучше всего иметь отдельные задачки тем, кто бежит вперёд – посильнее и поинтереснее, а тем, кто отстаёт – попроще. Причём задачки могут быть и «в бок» — не в основном русле программы.
Ещё из общего: очень понимаю вас с созданием собственного инструмента без заморочек, так как нет ничего хуже, чем тратить время урока на решение технических проблем с компами и тдтп. Но есть и обратная сторона медали – какова для них ценность освоения именно этого инструмента? Вопрос, наверное, не первого плана, но он есть.
«Для первого занятия я подготовил 80 строк кода на JavaScript, распечатал их и раздал каждому. Каждый ученик должен был набрать распечатанный код в инструменте.»
Занятие, кажущееся полезным, но сталкивающееся с суровой реальностью: они НЕ набирают текст (в обычной жизни), соответственно не знакомы с этим _типом деятельности_. С поиском опечаток – тем более. Новый тип деятельности требует тренировки. Тренировки довольно быстро убивают современную мотивацию «хочу быстрый и яркий результат». Общие мысли тут простые: делим на мелкие куски, причём после каждого куска желателен визуальный результат – «конфетка». Тогда это более-менее сработает. Но и не перебарщивать в целом. Кому-то можно выдавать частично готовый код.
«За шесть занятий мы — два преподавателя — осознали, что подход к каждому и погружение в частные опечатки/ошибки занимает времени больше, чем объяснение нового материала.»
Тоже сталкиваемся с этими проблемами. Опечатки – это мелочи, по сравнению с логикой работы программы. Опечатки – это то, что дети в состоянии найти и сами. Тратить время занятия на поиск опечаток преподами – очень расточительно. Я бы посоветовал делить на куски, и отдавать на самостоятельную проработку дома.
Про «события, реакции, функции, проверки условий и тдтп». Большинство программистов (и я в том числе) забывают о том, сколько бесконечных лет в наших головах счастливо и плодотворно живут названные и ещё десятки неназванных абстракций. Причём живут в чётком понимании как именно они функционируют, какие с какими можно соединить для получения сложных конструкций и тдтптдтп. Это огромный объём материала. Начинать сразу с таких понятий (событие, реакция) можно, но какова цель? С моей тз объяснять это надо после понимания обычного «потока исполнения программы». Причём объяснения строятся на осознании отличий от предыдущего более простого уровня.
Мы в нашей программе чётко разделяем, и явно задаём «парадигмы написания кода». Опыт из жизни: приходилось сталкиваться с интересным явлением: дети считали, что программа это _цельный текст_ и робот/компьютер «читает его целиком на своём языке, и пытается понять, что ты от него хочешь». Понимания, что программа выполняется по шагам и можно это проверить-увидеть не было. (теперь это исправлено) При переходе на новую парадигму программирования тратится значительное время на объяснения и перестроение мышления.
Парадигмы: Лапша код, Лапша-код с ветвлениями/циклами, Функции и процедуры, Событийно ориентированные программы(+ ООП), Многозвенные приложения.
ИМХО. Сюда же отнесу бесполезность GitHub на данном этапе. Нужно сосредотачиваться и учить чему-то одному с контролем результата. Тратить время на правильные логины в гитхаб мне кажется расточительным.
А как сменить культуру?
Насколько я это вижу и чувствую вокруг — процесс то обоюдный. Не только верхи красные, но и низы зачастую хотят красного управления.
Как мне кажется, здесь либо должно пройти время (все последовательные этапы развития с кризисами и новыми инструментами) — по сути нужно внутри созреть для более высоких ступеней. В рамках страны это весьма длительный процесс.
Есть ли ещё какие-то варианты?
Исключительно личное восприятие: Лунтик очень примитивно нарисован (также как и многие современные мультики, в том числе и 3Д) хотя, казалось бы, технологии совершенствуются и качество может быть достигнуто меньшими усилиями. Вызывает отторжение, и своим детям показывать его категорически не стал бы.
Здесь можно было бы говорить о «примитивизации мышления» вслед за «примитивизацией восприятия», но это ещё бОльшее ИМХО, к сожалению никаких научных данных по этому поводу не встречал, да и вряд ли они могут быть, тк трудно измерить «примитивизацию» в цифрах. Хотя, вот такая статья из НиЖ перекликается с моей мыслью: .
С мыслью о дурдоме и именно белом списке согласен, поэтому лучше составить собственное мнение.
Имею отрицательный опыт написания больших программ в таком стиле.
Для себя понял, что начиная с некоторого объёма, перестаю воспринимать программу.
При этом текстом воспринимается намного бОльший объём. Возможно это лично моё ограничение.
Хотел ответить кратко, но это уже лонгрид. Может кому будет интересно.
Самая важная мысль: определитесь, вы хотите чему-то научить или заинтересовать? От ответа на этот вопрос зависит … всё! Это две совершенно разные цели с совершенно разными дорогами и сложностями.
Вы в статье часто употребляете слово «обучение», я исходил из этого.
Общие мысли.
Вы хотите за очень короткое время научить чему-то осознанному – это довольно трудная задача, причём здесь есть как минимум 3 больших подводных камня:
1) Вы пишете «дети 10-15 лет» — как раз в этом месте ОЧЕНЬ большая разница между детьми: и в восприятии материала, и в понимании, и в самостоятельности и тд.тп. (причём, это никак не исключает частного случая, что кто-то в 10 мыслит лучше, чем другой в 15. – но тогда нужен отбор или нечто подобное. Вести разноуровневую группу ещё более сложно.)
2) Цели и мотивация. Зачем они пришли к вам?
Опыт из жизни: однажды на кружок робототехники привели мальчика со словами «он бредит роботами, вы должны его взять». Взял. Действительно бредит. Рисует очень детальные красивейшие рисунки всевозможных роботов. Ни одной инженерной задачи в кружке не решил, но ходил долго и упорно.
Вывод: они все приходят с разными целями, и эти цели, зачастую, весьма далеки от вашей. Сейчас практически у всех детей цель — это хайп: я хочу быстрый и красивый результат. Заметьте, это сильно отличается от слов «я хочу уметь сделать быстрый и красивый результат». Встречаются дети, которые в чём-то хотят разобраться, а не просто «сделал и забыл», но это большая редкость. Это «хочу уметь сделать» появляется позже в более осознанном возрасте. (это ещё не упоминаю мотивацию «родители заставили» — отдельная песня)
В итоге: вы находитесь на вражеской территории. Они идут к хайпу, а вы их тайно ведёте к знаниям. :) Методы соответствующие: маскируем одно под другое, устраиваем соревнования «кто хайповее» но через знания и тдтп.
3) Очень важно понимать, что за ограниченный срок у вас не получится научить всех. Будут откровенно тормознутые дети (даже среди тех кто пришёл осознанно!), которым вы можете хоть 100 раз разными словами объяснять – бесполезно. И тут важно соблюсти некую «общую скорость группы» чтобы те, кто идёт вперёд не сильно тормозили. А кого-то придётся тащить как бесполезный балласт.
Основное правило урока: каждый ребёнок должен быть занят делом. А задача препода создать массу различных дел в едином русле обучения, и выдавать их детям в зависимости от уровня и текущих успехов. Классические ситуации: очень трудная задача = нечего делать, очень лёгкая задача – лень = нечего делать. Лучше всего иметь отдельные задачки тем, кто бежит вперёд – посильнее и поинтереснее, а тем, кто отстаёт – попроще. Причём задачки могут быть и «в бок» — не в основном русле программы.
Ещё из общего: очень понимаю вас с созданием собственного инструмента без заморочек, так как нет ничего хуже, чем тратить время урока на решение технических проблем с компами и тдтп. Но есть и обратная сторона медали – какова для них ценность освоения именно этого инструмента? Вопрос, наверное, не первого плана, но он есть.
Занятие, кажущееся полезным, но сталкивающееся с суровой реальностью: они НЕ набирают текст (в обычной жизни), соответственно не знакомы с этим _типом деятельности_. С поиском опечаток – тем более. Новый тип деятельности требует тренировки. Тренировки довольно быстро убивают современную мотивацию «хочу быстрый и яркий результат». Общие мысли тут простые: делим на мелкие куски, причём после каждого куска желателен визуальный результат – «конфетка». Тогда это более-менее сработает. Но и не перебарщивать в целом. Кому-то можно выдавать частично готовый код.
Тоже сталкиваемся с этими проблемами. Опечатки – это мелочи, по сравнению с логикой работы программы. Опечатки – это то, что дети в состоянии найти и сами. Тратить время занятия на поиск опечаток преподами – очень расточительно. Я бы посоветовал делить на куски, и отдавать на самостоятельную проработку дома.
Про «события, реакции, функции, проверки условий и тдтп». Большинство программистов (и я в том числе) забывают о том, сколько бесконечных лет в наших головах счастливо и плодотворно живут названные и ещё десятки неназванных абстракций. Причём живут в чётком понимании как именно они функционируют, какие с какими можно соединить для получения сложных конструкций и тдтптдтп. Это огромный объём материала. Начинать сразу с таких понятий (событие, реакция) можно, но какова цель? С моей тз объяснять это надо после понимания обычного «потока исполнения программы». Причём объяснения строятся на осознании отличий от предыдущего более простого уровня.
Мы в нашей программе чётко разделяем, и явно задаём «парадигмы написания кода».
Опыт из жизни: приходилось сталкиваться с интересным явлением: дети считали, что программа это _цельный текст_ и робот/компьютер «читает его целиком на своём языке, и пытается понять, что ты от него хочешь». Понимания, что программа выполняется по шагам и можно это проверить-увидеть не было. (теперь это исправлено) При переходе на новую парадигму программирования тратится значительное время на объяснения и перестроение мышления.
Парадигмы: Лапша код, Лапша-код с ветвлениями/циклами, Функции и процедуры, Событийно ориентированные программы(+ ООП), Многозвенные приложения.
ИМХО. Сюда же отнесу бесполезность GitHub на данном этапе. Нужно сосредотачиваться и учить чему-то одному с контролем результата. Тратить время на правильные логины в гитхаб мне кажется расточительным.
Насколько я это вижу и чувствую вокруг — процесс то обоюдный. Не только верхи красные, но и низы зачастую хотят красного управления.
Как мне кажется, здесь либо должно пройти время (все последовательные этапы развития с кризисами и новыми инструментами) — по сути нужно внутри созреть для более высоких ступеней. В рамках страны это весьма длительный процесс.
Есть ли ещё какие-то варианты?
Здесь можно было бы говорить о «примитивизации мышления» вслед за «примитивизацией восприятия», но это ещё бОльшее ИМХО, к сожалению никаких научных данных по этому поводу не встречал, да и вряд ли они могут быть, тк трудно измерить «примитивизацию» в цифрах. Хотя, вот такая статья из НиЖ перекликается с моей мыслью:
С мыслью о дурдоме и именно белом списке согласен, поэтому лучше составить собственное мнение.