Algojammer – редактор Python в стиле Брета Виктора


Брет Виктор известен тем, что продвигает идею о том, что программирование можно сделать проще и естественнее, если предоставить правильные инструменты и среду. Однако создать такую среду непросто. Algojammer – это постоянная попытка сделать это, и ему нужна ваша помощь.

Мы освещали работу Брета Виктора еще в 2012 году – «Лучший способ программирования» – и проследили за некоторыми попытками создать то, о чем он говорил. Почему его идеи не имели большего влияния, остается загадкой, поскольку почти каждый, кто сталкивается с ними впервые, испытывает «вау» реакцию.

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

Крис Нотт работал над Algojammer на GitHub:

Algojammer – экспериментальный редактор кода, проверенный на правильность концепции, для написания алгоритмов на Python. В основном он был написан для помощи в решении проблем алгоритмов, которые встречаются на соревнованиях, таких как Google Code Jam, Topcoder и HackerRank.

Принцип такой:

По умолчанию ваш код немедленно запускается повторно при любых изменениях. Algojammer – это «путешествующий во времени» или «всеведущий» отладчик, в котором можно произвольно переходить к этапам выполнения. На самом деле нет никакой концепции «отладки» в смысле управления выполнением кода через точки останова или «пошаговое выполнение». Выполнение вашего кода следует рассматривать как просто физический факт о строках текста, которые вы написали. Таким же образом мы могли бы рассматривать «Количество символов ‘e’» в коде или «Среднюю длину строки» кода, «Выполнение» кода, это просто статический факт, который полностью определяется код.

Возможно, лучший способ понять, что все это означает, – увидеть это в действии:

Если вам этот подход интересен, вы можете загрузить его и попробовать – он с открытым исходным кодом под лицензией Apache 2.0. Однако нужно иметь в виду, что:

– Текущая реализация Algojammer чрезвычайно хакерская и хрупкая.

– Он * будет * вылетать, делать странные вещи и пропускать память, как решето

Это очень большая работа, и что более важно:

– Хочу переписать с нуля, чтобы было стабильнее, но борюсь

– Если у вас есть опыт участия в CPython и вы хотите помочь, дайте мне знать.

Это возможность принять участие в проекте с открытым исходным кодом, который потенциально может быть очень важным. Нам все еще нужны более эффективные способы научить новичков, что такое код, и как он соотносится с тем, что происходит при его запуске. Вы можете подумать, что самая сложная часть программирования – это поставить точку с запятой в нужном месте или запомнить синтаксис какой-то нечасто используемой конструкции – но это не так. Если вас беспокоят детали такого рода, значит, вы уже стали программистом. Непрограммисты просто не понимают связи между статическим текстом и динамической системой, которую он создает, когда вы ее запускаете. Algojammer и подобные ему среды пытаются сделать связь очевидной.

Но этот подход может быть важен не только в образовании – как мы можем продолжать игнорировать потенциальные преимущества, которые программное обеспечение может дать кодированию. Это как если бы мы могли видеть, что программное обеспечение привносит в другие дисциплины, но не понимаем, как оно может помочь нашим собственным.

Однако у некоторых есть сомнения:

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

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

Вне моего контроля

Действительно сложно

Измеримый

Я думаю, что это важно, потому что это придает определенную степень опровержения некоторым претенциозным и претенциозным вздорам, которые я написал выше. В конце концов, когда время в Code Jam тикает, и мне действительно нужно решить эту проблему, могу ли я использовать такой инструмент, как Algojammer? Этот тест нельзя подделать. Настоящий «велосипед для ума» – это не что-то революционное в выступлениях на конференции. Настоящий велосипед – это то, что позволяет мне легко побеждать в гонке людей, которые лучше меня.

Итак, это текущая цель проекта: создать инструмент, который оказывает положительное влияние на производительность людей в Code Jam.

Учитывая недавний интерес к отладке с путешествиями во времени, уже не кажется необоснованным, что этот подход можно было сделать достаточно сильным для решения реальных проблем. Это хороший способ двигаться вперед.


Добавить комментарий