pyalgovisualizer

0

Описание

Визуализация алгоритмов

Языки

  • Python100%
README.md

Package, for «magic» visualization of datastructures of compact algorithms written on Python (like leetcode-codechef-spojcode tasks) during debugging on vscode/pydev.

Pyalgovizualizer

Проблемы

По личному опыту — 25 лет преподавания (МФТИ, ИСПРАН), и 35 лет учеником (ВУЗЫ, курсы, MOOCи), преподавание алгоритмов, как у нас, так и по миру, не то, чтобы «полный отстой», но сильно не дотягивает до возможного сейчас технологического уровня.

Да, когда-то, в ветхозаветные времена — времен поклонению библиям алгоритмов — трехтомнику Кнута, «книжке с ослом» («Алгоритмы: построение и анализ»), которых правда обычно держали на полках, а реально читали плохонапечатанные методички ВУЗов, и только те, казалось — что все правильно и так и должно быть — хотя работало это только для тех, кто реально пытался все это как-то кодить.

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

Но надо признать очевидные «для 2024» факты: «бумажные книги — все».

По форме:

  • нельзя искать,
  • неудобно (для 2024) читать,
  • невозможно копировать и как-то взаимодействовать.
  • кирпич! не унести, не скопировать, не …
  • качественная печать — белая бумага, цветные иллюстрации — адски дорого, обычно на бумаге «стандарт Питер-пресс» с серой «туалетной бумагой».

Любители «запаха бумажных листов», «шелеста страниц», «разрезания упаковки» — мною не наблюдались уже давно.

Также по процессу издания:

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

Давайте не тратить кучу сил на верстку, впихивание слабовпихуемого в прокрутово ложе «листа бумаги», «чернобелой печати», когда это просто ненужно — читать будут с разных устройств, телефонов, планшетов, портретно и альбомно ориентированных мониторов разного разрешения, где нужна адаптивная верстка, нет ограничений на объем, но есть цвета и гиперссылки и возможность интерактивности, которые пропадают в книгах. Не нужны ни бумажные учебники, ни специализированные гибкие-негибкие e-ink устройства — это я говорю, как владелец нескольких десятков «электронных книг».

Так что проехали! Не говоря уж о том, что в РФ полезно бы вообще держатся подальше от издательского бизнеса учебников — там до сих пор мафия, перестрелки, бандиты с золотыми цепями (опыт хороших знакомых, общавшегося с).

Казалось бы — электронные PDF-книги, прекрасно написанные, адаптированные для чтения с планшетов, с правильными экранными шрифтами, мониторной версткой, с цветными картинками и гиперссылками, читаем на компьютерах и планшетах, публикуем-обновляем на сайте сами, используем цвет-поиск… — проблема решена?

Это действительно сильно лучше, но тут по-прежнему активны ограничения статики:

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

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

И главное — мир алгоритмов огромен, десятки тысяч статей ежегодно, непонятных, часто с кризисом воспроизводимости — их нельзя засовывать в книгу. Наоборот, пришло время вытаскивать все из книг, и превращать в некие «интерактивные лаборатории с нелинейной навигацией», как «структуры технологий» в популярных играх:

Сначала пройдемся по явно неудачным концептам, чтобы их избегать:

  • «Алгоритм словами» — полный отстой. Может создать иллюзию понимания, но скорее всего ложную.
  • «Псевдокод» — иллюзия понимания, но есть проблема воспроизводимости — при переходе к работающему алгоритму, может выяснится, даже при правильной реализации, что алгоритм вовсе не работал. Дилемма «Точность против Понятности» конечно очевидна, но псевдокод, каким бы понятным он был, за пределами правильного решения.
  • Проблемы подачи контента — как говорилось выше, статика типа книг-статей-слайдов не передают динамики алгоритма — что-то можно делать с автогенерацией слайдов или картинок, но это очень мучительно и ограничено.

Это решения с более интересны, но тоже имеют свои недостатки:

  • Процедурная видеоанимация (пакет
    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, а некая скрытая магия будет при этом визуализировать происходящее понятным образом.

Таким образом, обучающийся, используя коллаборативную среду в браузере, ни секунды не тратя на отладку. (см. доклад «Современные «интерактивные среды» и «живые лаборатории» — эффективное дистанционное образование по алгоритмам и математическим дисциплинам (Стас Фомин, OSEDUCONF-2023)»), может играться с алгоритмом и вместе с преподавателем на удаленном созвоне или в одной комнате («что будет если мы здесь сделаем так?»), и самостоятельно — просмотрев короткий сопровождающий каждый такой «живой квест-пример», ролик.

Пример, ну можно посмотреть Алгоритм Кристофидеса, разборы литкодовских задач, как выглядит сам код

Ну или заходите на

алгоритм.эвристика.рф
, сейчас там пароль ArthurFomin1729, открывайте
readme.md
и попробуйте поотлаживать любой из алгоритмов, открыв в отдельной панели редактора картинку
.visualization.png
, и просматривая объясняющие ролики в начале описания каждого алгоритма.