PyAlgovizualizer — эффективное преподавание алгоритмов (Стас Фомин, OSEDUCONF-2024) — различия между версиями
Материал из 0x1.tv
StasFomin (обсуждение | вклад) (Новая страница: «;{{SpeakerInfo}}: {{Speaker|Стас Фомин}} <blockquote> </blockquote> {{VideoSection}} {{vimeoembed||800|450}} {{youtubelink|}} {{SlidesSection}} File…») |
StasFomin (обсуждение | вклад) |
||
(не показаны 4 промежуточные версии этого же участника) | |||
;{{SpeakerInfo}}: {{Speaker|Стас Фомин}} <blockquote> Преподавание алгоритмов через книги-слайды — устарело и неэффективно. С другой стороны, путь постижения хакера — реальная отладка на промышленных языках — тяжела и не для всех. Оптимальный вариант — максимально компактный и читаемый алгоритм, который можно выполнять, отлаживать, исследовать, и при этом — магически визуализируется то, что происходит внутри — структуры данных и т.п. Причём чтобы обучающемуся ничего не нужно было настраивать. <tt>PyAlgovizualizer</tt> — это как раз такой модуль и подход, как готовить «живые» самовизуализурующиеся, компактные алгоритмы на Python, по которым преподаватель может провести занятие вживую, или записать видеоролик, и которых студенты могут вполне изучать самостоятельно, имея только браузер. </blockquote> {{VideoSection}} {{vimeoembed|990136047|800|450}} {{youtubelink|}} {{SlidesSection}} [[File:PyAlgovizualizer — эффективное преподавание алгоритмов (Стас Фомин, OSEDUCONF-2024).pdf|left|page=-|300px]] {{----}} |WpbWSEAzW4k}} == Thesis == По личному опыту — 25 лет преподавания (МФТИ, ИСПРАН), и 35 лет учеником (ВУЗЫ, курсы, MOOCи), преподавание алгоритмов, как у нас, так и по миру, сильно не дотягивает до возможного технологического уровня. Да, когда-то, в ветхозаветные времена — времён поклонению библиям алгоритмов — трёхтомнику Кнута, «книжке с ослом» («Алгоритмы: построение и анализ»), которых правда обычно держали на полках, а реально читали плохонапечатанные методички ВУЗов, казалось — что так и должно быть, хотя работало это только для тех, кто реально пытался всё это как-то кодить. Но надо признать очевидные «для 2024» факты: «бумажные книги — всё». По форме: * нельзя искать, * неудобно (для 2024) читать, * невозможно копировать и как-то взаимодействовать. * кирпич! не унести, не скопировать, не … * качественная печать — белая бумага, цветные иллюстрации — адски дорого, обычно на бумаге «стандарт Питер-пресс» с серой «туалетной бумагой». Любители «запаха бумажных листов», «шелеста страниц», «разрезания упаковки», «читать про алгоритмы в метро» — мною не наблюдались уже давно. Также бумага неудобна по процессу издания: * «вотерфолл»-процесс, с фиксированным дедлайном и невозможностью правок. * куча дополнительных печатных ограничений хорошей вёрстки (совпадение строчек на прямой и обратной стороне листа и т.п.), которой правда уже много кто не заморачивается. Давайте не тратить кучу сил на вёрстку, впихивание слабовпихуемого в прокрутово ложе «листа бумаги», «чернобелой печати», когда это просто ненужно — читать будут с разных устройств, телефонов, планшетов, портретно и альбомно ориентированных мониторов разного разрешения, где нужна адаптивная вёрстка, нет ограничений на объём, но есть цвета и гиперссылки и возможность интерактивности, которые пропадают в книгах. Не нужны ни бумажные учебники, ни специализированные гибкие-негибкие e-ink устройства — это я говорю, как владелец нескольких десятков «электронных книг». Так что проехали! Не говоря уж о том, что в РФ полезно бы вообще держатся подальше от издательского бизнеса учебников — там до сих пор мафия, перестрелки, бандиты с золотыми цепями (опыт личных знакомых «в теме»). Казалось бы — электронные PDF-книги, прекрасно написанные, адаптированные для чтения с планшетов, с правильными экранными шрифтами, мониторной вёрсткой, с цветными картинками и гиперссылками, читаем на компьютерах и планшетах, публикуем-обновляем на сайте сами, используем цвет-поиск… — проблема решена? Это действительно сильно лучше, но тут по-прежнему активны ограничения статики: * страничная вёрстка — с кучей проблем автору по вёрстке с учётом разбиения, переносов, ссылок на изображения и картинки; * проблема как показать работу алгоритма в динамике — серия иллюстраций, логи работы, и надежда, что где-то в голове читающего это соединится правильным образом. Мы так делали пару десятков лет, с автогенерацией иллюстраций-логов и читаемого алгоритма по реально работающему алгоритму, но даже у нас сложилось понимание ограниченности этого подхода. Более того, галопирует инфляция статического контента — часто бесполезно и даже вредно писать книги — скорее всего по большей части темы — нужные книги уже написаны, получится или хуже, или толще, а с ростом толщины читаемости книги автоматически падает, а то, что вы хотите добавить, надо делать как-то максимально компактным и гибким, и дешёвым для разработки. И главное — мир алгоритмов огромен, десятки тысяч статей ежегодно, непонятных, часто с кризисом воспроизводимости<ref name="stas-1">«Transparency and reproducibility in artificial intelligence», Nature, [https://www.nature.com/articles/s41586-020-2766-y]</ref> — их нельзя засовывать в книгу. Наоборот, пришло время вытаскивать всё из книг, и превращать в некие «интерактивные лаборатории с нелинейной навигацией», как «структуры технологий» в популярных играх. Сначала пройдёмся по явно неудачным концептам, чтобы их избегать: * «Алгоритм словами» — полный отстой. Может создать иллюзию понимания, но скорее всего ложную. * «Псевдокод» — иллюзия понимания, но есть проблема воспроизводимости — при переходе к работающему алгоритму, может выяснится, даже при правильной реализации, что алгоритм вовсе не работал. Дилемма «Точность против Понятности» конечно очевидна, но псевдокод, каким бы понятным он был, за пределами правильного решения. * Проблемы подачи контента — как говорилось выше, статика типа книг-статей-слайдов не передают динамики алгоритма — что-то можно делать с автогенерацией слайдов или картинок, но это очень мучительно и ограничено. Это решения с более интересны, но тоже имеют свои недостатки: * Процедурная видеоанимация (пакет <tt>manim</tt>) — красиво, но непонятно, что выполняется, сложно исследовать, нет синхронизации между роликами и выполняемым кодом. * «Literate programming» — что-то подобное я делал ранее в книге и слайдах — генерация из питон кода, компактного описания алгоритма картинок и слайдов, но явно вижу пределы, и это сильно мучительно. [[File:osseduconf-2024-stas-stas-stas-00.png|center|640px|thumb|]] [[File:osseduconf-2024-stas-stas-stas-01.png|center|640px|thumb|]] * Jupyter-ноутбуки. Хороши для представления однонаправленных процессов (пайплайнов ML), постановок ЦЛП/SAT-задач, но не для самих алгоритмов, где происходят нетривиальные манипуляции — хотя в принципе, что-то достаточно неплохо можно показывать с поддержкой отладки в VSCode. [[File:osseduconf-2024-stas-stas-stas-02.png|center|640px|thumb|]] В идеале ожидается «живой» алгоритм, с которым можно играться, изучать=эспериментировать, анализировать каждый шаг, но при этом чтобы было понятно и быстро. «Talks is cheap, show me the code»© — казалось бы надо просто написать очень понятный код, в видеоролике разбирать его работу, и дать возможность легко обучающемуся повторить всё это, поэкспериментировать с каждой строчкой, покачать разные «что-если». Так в общем, уже и делает «весь интернетный мир», при эффективном изучении всего связанного с IT и это хорошо. Но есть проблемы такого подхода, по отношению к преподаванию сложных алгоритмов: * Алгоритмы на индустриальных языках (С/C++/Java/Rust…) — чудовищная перегрузка ненужными подробностями. * проблема с визуализацией изменения состояния — просто тыкать в отладочные описания структур — неэффективно — чуть помогает расширение VSCode «Debug Visualizer» — но там долго перерисовывается, очень нетривиально описывать визуализацию (JSON-программирование). Итак, наконец, представляем решение, которое мы используем несколько лет, при преподавании алгоритмов — от основ и тренировки решения «задач на собеседовании», до сложных алгоритмов комбинаторной оптимизации. Решение — разработанный питон-модуль <tt>[https://github.com/belonesox/pyalgovisualizer pyalgovisualizer]</tt>, использующий * скрытый код визуализации структур данных на питоне (код не сложный, и его пишет преподаватель-публикатор) — таблицы значений структур, графы и графики — рисуются на специальной «визуализирующей картинке». * максимально компактный код алгоритма на Python, работа которого показывается прямо обычной отладкой; * получается алгоритм, очищенный от всего лишнего, который можно обычным образом отлаживать, даже в броузерной версии VSCode, а некая скрытая магия будет при этом визуализировать происходящее понятным образом. Таким образом, обучающийся, используя коллаборативную среду в браузере, ни секунды не тратя на отладку (см. <ref name="stas-2">Фомин С. А. <i>Современные «интерактивные среды» и «живые лаборатории» — эффективное дистанционное образование по алгоритмам и математическим дисциплинам</i> / С. А. Фомин // Восемнадцатая конференция. Свободное программное обеспечение в высшей школе: Тезисы докладов материалов конференции, Переславль-Залесский, 27—29 января 2023 года / Отв. редактор В. Л. Чёрный. — Москва: ООО «МАКС Пресс», 2023. — c. 63—64. — EDN GIZTTL., <tt>https://0x1.tv/20230128F</tt></ref>), может играться с алгоритмом и вместе с преподавателем на удалённом созвоне или в одной комнате («что будет если мы здесь сделаем так?»), и самостоятельно — просмотрев короткий сопровождающий каждый такой «живой квест-пример», ролик. Как пример, можно посмотреть <ref name="stas-3,stas-4"> * Видеоразборы решений задач с собеседований с применением PyAlgovisualizer [https://vimeo.com/showcase/10185384] * Изложение темы про алгоритм Кристофидеса с использованием PyAlgovisualizer, https://discopal.ispras.ru/Crystofides</ref>, или заходите на сайт: <tt>алгоритм.эвристика.рф</tt>, сейчас там пароль <tt>ArthurFomin1729</tt>, открывайте <tt>readme.md</tt> и попробуйте поотлаживать любой из алгоритмов, открыв в отдельной панели редактора картинку <tt>.visualization.png</tt>, и просматривая объясняющие ролики в начале описания каждого алгоритма. {{----}} [[File:{{#setmainimage:PyAlgovizualizer — эффективное преподавание алгоритмов (Стас Фомин, OSEDUCONF-2024)!.jpg}}|center|640px]] {{LinksSection}} <!-- <blockquote>[©]</blockquote> --> <references/> [[Категория:OSEDUCONF-2024]] [[Категория:Draft]] [[Категория:СПО в образовании]] |
Текущая версия на 08:53, 3 августа 2024
- Докладчик
- Стас Фомин
Преподавание алгоритмов через книги-слайды — устарело и неэффективно. С другой стороны, путь постижения хакера — реальная отладка на промышленных языках — тяжела и не для всех.
Оптимальный вариант — максимально компактный и читаемый алгоритм, который можно выполнять, отлаживать, исследовать, и при этом — магически визуализируется то, что происходит внутри — структуры данных и т.п. Причём чтобы обучающемуся ничего не нужно было настраивать.
PyAlgovizualizer — это как раз такой модуль и подход, как готовить «живые» самовизуализурующиеся, компактные алгоритмы на Python, по которым преподаватель может провести занятие вживую, или записать видеоролик, и которых студенты могут вполне изучать самостоятельно, имея только браузер.
Видео
Thesis
По личному опыту — 25 лет преподавания (МФТИ, ИСПРАН), и 35 лет учеником (ВУЗЫ, курсы, MOOCи), преподавание алгоритмов, как у нас, так и по миру, сильно не дотягивает до возможного технологического уровня.
Да, когда-то, в ветхозаветные времена — времён поклонению библиям алгоритмов — трёхтомнику Кнута, «книжке с ослом» («Алгоритмы: построение и анализ»), которых правда обычно держали на полках, а реально читали плохонапечатанные методички ВУЗов, казалось — что так и должно быть, хотя работало это только для тех, кто реально пытался всё это как-то кодить.
Но надо признать очевидные «для 2024» факты: «бумажные книги — всё».
По форме:
- нельзя искать,
- неудобно (для 2024) читать,
- невозможно копировать и как-то взаимодействовать.
- кирпич! не унести, не скопировать, не …
- качественная печать — белая бумага, цветные иллюстрации — адски дорого, обычно на бумаге «стандарт Питер-пресс» с серой «туалетной бумагой».
Любители «запаха бумажных листов», «шелеста страниц», «разрезания упаковки», «читать про алгоритмы в метро» — мною не наблюдались уже давно.
Также бумага неудобна по процессу издания:
- «вотерфолл»-процесс, с фиксированным дедлайном и невозможностью правок.
- куча дополнительных печатных ограничений хорошей вёрстки (совпадение строчек на прямой и обратной стороне листа и
т.п.), которой правда уже много кто не заморачивается.
Давайте не тратить кучу сил на вёрстку, впихивание слабовпихуемого в прокрутово ложе «листа бумаги», «чернобелой
печати», когда это просто ненужно — читать будут с разных устройств, телефонов, планшетов, портретно и альбомно
ориентированных мониторов разного разрешения, где нужна адаптивная вёрстка, нет ограничений на объём, но есть цвета и
гиперссылки и возможность интерактивности, которые пропадают в книгах. Не нужны ни бумажные учебники, ни
специализированные гибкие-негибкие e-ink устройства — это я говорю, как владелец нескольких десятков «электронных
книг».
Так что проехали! Не говоря уж о том, что в РФ полезно бы вообще держатся подальше от издательского бизнеса учебников — там до сих пор мафия, перестрелки, бандиты с золотыми цепями (опыт личных знакомых «в теме»).
Казалось бы — электронные PDF-книги, прекрасно написанные, адаптированные для чтения с планшетов, с правильными экранными шрифтами, мониторной вёрсткой, с цветными картинками и гиперссылками, читаем на компьютерах и планшетах, публикуем-обновляем на сайте сами, используем цвет-поиск… — проблема решена?
Это действительно сильно лучше, но тут по-прежнему активны ограничения статики:
- страничная вёрстка — с кучей проблем автору по вёрстке с учётом разбиения, переносов, ссылок на изображения и
картинки;
- проблема как показать работу алгоритма в динамике — серия иллюстраций, логи работы, и надежда, что где-то в голове читающего это соединится правильным образом. Мы так делали пару десятков лет, с автогенерацией иллюстраций-логов и читаемого алгоритма по реально работающему алгоритму, но даже у нас сложилось понимание ограниченности этого подхода.
Более того, галопирует инфляция статического контента — часто бесполезно и даже вредно писать книги — скорее всего по большей части темы — нужные книги уже написаны, получится или хуже, или толще, а с ростом толщины читаемости книги
автоматически падает, а то, что вы хотите добавить, надо делать как-то максимально компактным и гибким, и дешёвым для
разработки.
И главное — мир алгоритмов огромен, десятки тысяч статей ежегодно, непонятных, часто с кризисом воспроизводимости[1] — их нельзя засовывать в книгу. Наоборот, пришло время вытаскивать всё из книг, и превращать в некие «интерактивные лаборатории с нелинейной навигацией», как «структуры технологий» в популярных играх.
Сначала пройдёмся по явно неудачным концептам, чтобы их избегать:
- «Алгоритм словами» — полный отстой. Может создать иллюзию понимания, но скорее всего ложную.
- «Псевдокод» — иллюзия понимания, но есть проблема воспроизводимости — при переходе к работающему алгоритму, может выяснится, даже при правильной реализации, что алгоритм вовсе не работал. Дилемма «Точность против Понятности» конечно очевидна, но псевдокод, каким бы понятным он был, за пределами правильного решения.
- Проблемы подачи контента — как говорилось выше, статика типа книг-статей-слайдов не передают динамики алгоритма — что-то можно делать с автогенерацией слайдов или картинок, но это очень мучительно и ограничено.
Это решения с более интересны, но тоже имеют свои недостатки:
- Процедурная видеоанимация (пакет manim) — красиво, но непонятно, что выполняется, сложно
исследовать, нет синхронизации между роликами и выполняемым кодом.
- «Literate programming» — что-то подобное я делал ранее в книге и слайдах — генерация из питон кода, компактного описания алгоритма картинок и слайдов, но явно вижу пределы, и это сильно мучительно.
- Jupyter-ноутбуки. Хороши для представления однонаправленных процессов (пайплайнов ML), постановок ЦЛП/SAT-задач, но не для самих алгоритмов, где происходят нетривиальные манипуляции — хотя в принципе, что-то достаточно неплохо можно показывать с поддержкой отладки в VSCode.
В идеале ожидается «живой» алгоритм, с которым можно играться, изучать=эспериментировать, анализировать каждый шаг, но
при этом чтобы было понятно и быстро. «Talks is cheap, show me the code»© — казалось бы надо просто написать очень
понятный код, в видеоролике разбирать его работу, и дать возможность легко обучающемуся повторить всё это,
поэкспериментировать с каждой строчкой, покачать разные «что-если». Так в общем, уже и делает «весь интернетный мир»,
при эффективном изучении всего связанного с IT и это хорошо.
Но есть проблемы такого подхода, по отношению к преподаванию сложных алгоритмов:
- Алгоритмы на индустриальных языках (С/C++/Java/Rust…) — чудовищная перегрузка ненужными подробностями.
- проблема с визуализацией изменения состояния — просто тыкать в отладочные описания структур — неэффективно — чуть помогает расширение VSCode «Debug Visualizer» — но там долго перерисовывается, очень нетривиально описывать визуализацию (JSON-программирование).
Итак, наконец, представляем решение, которое мы используем несколько лет, при преподавании алгоритмов — от основ и
тренировки решения «задач на собеседовании», до сложных алгоритмов комбинаторной оптимизации.
Решение — разработанный питон-модуль pyalgovisualizer, использующий
- скрытый код визуализации структур данных на питоне (код не сложный, и его пишет преподаватель-публикатор) — таблицы значений структур, графы и графики — рисуются на специальной «визуализирующей картинке».
- максимально компактный код алгоритма на Python, работа которого показывается прямо обычной отладкой;
- получается алгоритм, очищенный от всего лишнего, который можно обычным образом отлаживать, даже в броузерной версии VSCode, а некая скрытая магия будет при этом визуализировать происходящее понятным образом.
Таким образом, обучающийся, используя коллаборативную среду в браузере, ни секунды не тратя на отладку
(см. [2]), может
играться с алгоритмом и вместе с преподавателем на удалённом созвоне или в одной комнате («что будет если мы здесь сделаем так?»), и самостоятельно — просмотрев короткий сопровождающий каждый такой «живой квест-пример», ролик.
Как пример, можно посмотреть [3], или заходите на сайт: алгоритм.эвристика.рф, сейчас там пароль ArthurFomin1729, открывайте readme.md и попробуйте поотлаживать любой из алгоритмов, открыв в отдельной панели редактора картинку .visualization.png, и просматривая объясняющие ролики в начале описания каждого алгоритма.
Примечания и ссылки
- ↑ «Transparency and reproducibility in artificial intelligence», Nature, [1]
- ↑ Фомин С. А. Современные «интерактивные среды» и «живые лаборатории» — эффективное дистанционное образование по алгоритмам и математическим дисциплинам / С. А. Фомин // Восемнадцатая конференция. Свободное программное обеспечение в высшей школе: Тезисы докладов материалов конференции, Переславль-Залесский, 27—29 января 2023 года / Отв. редактор В. Л. Чёрный. — Москва: ООО «МАКС Пресс», 2023. — c. 63—64. — EDN GIZTTL., https://0x1.tv/20230128F
- ↑
- Видеоразборы решений задач с собеседований с применением PyAlgovisualizer [2]
- Изложение темы про алгоритм Кристофидеса с использованием PyAlgovisualizer, https://discopal.ispras.ru/Crystofides