Брет Виктор известен тем, что продвигает идею о том, что программирование можно сделать проще и естественнее, если предоставить правильные инструменты и среду. Однако создать такую среду непросто. 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.
Учитывая недавний интерес к отладке с путешествиями во времени, уже не кажется необоснованным, что этот подход можно было сделать достаточно сильным для решения реальных проблем. Это хороший способ двигаться вперед.