Новости партнеров

Программирование наперегонки

Британский программист создал игру для отладки кода

В начале марта 2006 года в программистском сообществе произошла тихая революция. Ее совершил британский программист Мэтт Уэбб (Matt Webb), который при помощи своей программы playsh (Playful Shell), написанной на популярном языке Python, впервые создал игровую вселенную, предназначенную для проведения сеансов совместного программирования. Когда же о программе написали сайты Slashdot и Wired, тихая революция превратилась в громкую.

До начала описываемой истории Мэтт Уэбб был известен в основном в двух ипостасях – в качестве партнера консалтинговой компании Schulze & Webb Ltd и в качестве соавтора книги Mind Hacks, где в популярной форме рассказывается о принципах работы человеческого мозга.

Для того чтобы разобраться, что придумал Мэтт, нам надо немного окунуться в историю вопроса.

Вы стоите на дороге...

В семидесятых годах прошлого века, когда вычислительные мощности стоили дорого, программисты в университетах США и Европы использовали ночное машинное время для многопользовательских текстовых игр. Этот вид развлечений получил название MUD (Multi User Dungeon, "многопользовательские подземелья") и оказался чрезвычайно популярен.

Десятки программистов и лаборантов собирались в группы, которые шли походом на драконов, орков, кобольдов и гоблинов, или блуждали по подземным лабиринтам. В однопользовательском варианте это выглядело примерно так:

«Вы стоите на дороге перед небольшим кирпичным зданием. > войти в здание
Вы находитесь в здании. Перед вами лежит рюкзак. Выходы: юг.
> взять рюкзак
Взят.
> юг
Вы стоите на дороге перед небольшим кирпичным зданием».

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

Войти в здание

Университетские программисты использовали MUD для развлечения. Новизна идеи британца Мэтта Уэбба заключалась в том, чтобы использовать текстовые игры для работы.

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

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

Так или иначе, на свет появилась playsh, позволяющая воспринимать пишущуюся программу как лабиринт. Игрок ходит из комнаты в комнату, создавая новые выходы, закрывая старые, перемещая предметы и обсуждая все это с другими игроками.

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

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

В-третьих, playsh позволяет проводить обучение программистов прямо «на поле боя», выгодно отличаясь от традиционных методов тем, что ученики постоянно работают с текстом программы, не отвлекаясь на то, чтобы превратить схемы и диаграммы в реальный код.

Убить ошибку

Похоже, пока филологи рассуждали о тексте как лабиринте, программисты создали такой лабиринт. Мир в представлении playsh схож с нашим – вы можете идти на север, запад, юг, восток. Предметы, с которыми вы работаете, имеют свою структуру и свойства.

За основу для перемещений и работы с объектами в playsh был взят стоящий особняком среди MUD проект LambdaMOO. В «лямбде» нет фантастического мира как такового – скорее она представляет собой набор комнат, где встречаются игроки, пришедшие просто пообщаться. Социальная направленность LambdaMOO и является тем стержнем, на котором держится весь проект, состоящий из более чем 15 тысяч комнат.

Создаваемая playsh-вселенная полностью динамична – по утверждению автора, игрок А может наблюдать за тем, как игрок Б меняет одну из функций препарируемой программы и тут же использовать эту функцию.

Кроме того, программа позволяет то, о чем и не мечтали вышеупомянутые филологи – управлять компьютером игрока из виртуального мира. Таким образом, созданный ради удобства представления текстовый лабиринт становится мощным средством управления реальным миром.

Но самое интересное даже не в этом. По словам Мэтта Уэбба, каждый игрок может видеть мир по-своему благодаря набору "актуализаторов". Это неуклюжее слово означает очень простую вещь – к примеру, один программист может видеть только двери, а другой – только окна в комнатах. Таким образом, они смогут настроить систему под себя и не будут мешать друг другу в процессе блуждания по свежесозданному подземелью. Естественно, что и набор действий с объектами у них будет различным.

Открыть браузер

Мэтт говорит, что на этом концепция playsh себя не исчерпывает. По его словам, ничто не мешает заставить эту программу работать с веб, связывая при помощи уже знакомого нам лабиринта различные источники данных.

В своем блоге он пишет, что, например, rss-поток можно представить в виде комнаты со множеством дверей. При этом заголовки новостей будут написаны на дверных табличках. Можно пойти и дальше – например, программа телепередач будет оформлена в виде телевизора. Все это легко оформляется в виде веб-страницы.

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

Особую гибкость playsh придает реализованная идея определяемых пользователями глаголов. Предполагается, что каждый пользователь выберет те, которые ему понравятся, и сможет создать собственный мирок с любимыми источниками информации.

Just for fun

Не стоит думать, что это первая попытка превратить программирование в развлечение. Например, книга Линуса Торвальдса, отца ядра операционной системы Linux, так и называлась – Just for fun ("По приколу").

Программисты вообще часто занимаются тем, что придумывают различного рода лингвистические забавы. Достаточно, например, упомянуть о существовании понятия literate programming, которое подразумевает написание программы таким образом, чтобы ее исходный текст можно было читать как литературное произведение. Есть и противоположное течение – на сайте ioccc.org уже не первый год проводится конкурс на написание самой непонятной программы. Если же говорить об играх, то для понимания духа вольного программистского сообщества достаточно упомянуть Progress Quest – программу, которая проходит ролевую игру за пользователя.

Если же говорить серьезно, то модная среди интернет-программистов концепция Semantic web подразумевает создание некоторого языка, который могли бы читать как машины, так и пользователи. Таким образом, закладывается почва для создания социально-ориентированных систем, стимулирующих пользователей к добавлению новых возможностей.

Playsh в перспективе и является той программой, которая не только может оформить информационные потоки в понятной пользователю форме, но и воспринимать язык, достаточно близкий к естественному.

Ближе всех к playsh в этом плане подошел сайт YubNub, который создатели позиционируют как "командную строку для веба". Любой желающий может создать свою команду для YubNub, чтобы облегчить себе блуждание по интернету.

Например, чтобы найти фотографии кошек, достаточно написать "gim cat", чтобы открылось окно Google Images с результатами поиска по запросу "cat". Playsh – это просто следующий шаг, позволяющий оформить каждую команду в виде отдельной программы на Python, который активно используют веб-разработчики, и получить результаты в заданной пользователем форме.

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

Похоже, в лабиринте Мэтта скоро заведутся монстры.

Интернет и СМИ00:0414 сентября

«Посылка в Америку из России от Вована»

Американцы слушают российскую музыку и едят шашлык. Русские на них зарабатывают