В первой части нашего рассказа об эзотерических языках мы попытались классифицировать их по разным параметрам — от литературных и кинематографических «отсылок», заложенных в синтаксис, до полноты по Тьюрингу. Сегодня о предназначении эзотерических языков программирования.
В конце концов, понимание целей, которые ставит перед собой создатель того или иного языка, как минимум может дать почву для размышлений тем из программистов, кто сам захочет в будущем сделать нечто подобное и разработать свой уникальный язык.
Фото hackNY.org CC BY
Существует мнение, что одной из причин появления эзотерических языков стала сама история программирования. С момента появления эта сфера прошла путь своего рода «десакрализации»: разработка постепенно перестала быть закрытой и очень специфической областью знаний.
Более того, появлось все больше «смежных областей», в рамках которых программирование перестало быть самоцелью и стало способом решения той или иной профильной задачи.
В этом случае программирование превращается в сугубо прикладной инструмент, а эзотерические языки в некотором роде возвращают программированию ореол «тайного знания»: с первого взгляда большинство из них выглядит совершенно нечитабельно.
Здесь, пожалуй, особенно примечателен Malbolge и другие языки «черные ящики» — пожалуй, они решают эту «культурологическую» задачу наилучшим образом.
Еще одна задача (которую чаще всего ставят перед собой создатели эзотерических языков) — стимуляция нестандартного мышления, попытка решить те или иные вопросы нетривиальным способом. По сути, создание эзотерического языка и написание программ на нем может быть просто «головоломкой», однако это — еще и отличная возможность лучше понять, как «работает» машина Тьюринга, на практике разобраться в теории вычислимости и теории алгоритмов.
Кроме того, это — хороший способ ненадолго отвлечься от «серьезного» программирования. Именно с такой целью обычно создаются шуточные эзотерические языки. В конце концов, как говорит Арне Мартин Аурлин (Arne Martin Aurlien), разработчик из Норвегии, выступавший (видео) с этой темой на JSConf EU, «во многих из нас сидит befunge-программист, который ждет момента вырваться на свободу».
Эзотерические языки программирования часто сравниваются с произведениями искусства — как литература или музыка, они в меньшей степени связаны с «чистой функциональностью» и намного больше — с выражением мыслей и оригинальных идей их авторов. Точно так же, как «традиционное искусство» они непрактичны, поэтому несут в себе другую ценность — например, служат иллюстрацией существенных различий между человеческим мышлением и «машинной» логикой или же, наоборот, предлагают уникальные способы коммуникации с машиной. То есть, как выразились в Apifonica, «представляют собой программирование в его наиболее абстрактной форме», позволяя разработчикам проявить творческое начало вне рамок и условностей.
Существуют прямо противоположные мнения относительно целей и «применимости» эзотерических языков программирования. Кто-то считает, что «практическая применимость» и «эзотерические языки» — понятия несовместимые. В этом случае эзотерические языки программирования — не более, чем «эксперименты», которые существуют по той же причине, по которой выпускаются кроссворды и паззлы — чтобы «размять мозги».
С другой стороны, эзотерические языки, несмотря на сложность практического применения, все же могут быть полезными. Например, несут в себе обучающие и иллюстративные функции. Они позволяют представить ту или иную идею в гипертрофированном виде — и при этом максимально наглядно. Например, помогают проиллюстрировать, как полноте по Тьюрингу могут сопутствовать слабые «выразительные возможности ЯП» — на примере любой тьюринговской трясины.
Однако существуют и кейсы вполне реального практического использования эзотерических языков. Например, мини-игра Lost Kingdom на Brainfuck. По словам ее автора, Джона Рипли (Jon Ripley), Lost Kingdom, скорее всего, самая большая программа, написанная на этом языке.
Случай, конечно, редкий, но не уникальный. В тематическом треде на Quora пользователи делятся кейсами работы с эзотерическими языками. Иногда их, к примеру, используют в образовательных целях. В этих случаях полезными качествами оказываются «головоломность» и определенная степень абстракции, позволяющая выделить те или иные характеристики.
Конечно, сталкиваться с «настоящими» эзотерическими языками программирования «по профессии» не приходится практически никому. Когда речь идет о работе, под эзотерическими языками понимаются скорее редкие и необычные, синтаксис которых сильно отличается от популярных ЯП — речь точно не идет о наиболее известных эзотерических ЯП, созданных для развлечения.
Тихон Джелвис (Tikhon Jelvis), ведущий специалист по данным в Target, рассказывает, что использовал среду разработки ArrayForth — и опыт работы с ней кажется ему наиболее «эзотерическим» в его практике. Например, цвет в ArrayForth — это тоже элемент синтаксиса.
Правда, ArrayForth действительно используется во вполне серьезных целях — как среда разработки для процессоров GreenArrays. Это, однако, не лишает его массы особенностей, свойственных более необычным собратьям. У него, кстати, есть даже «официальный эзотерический» родственник — язык BogusForth.
«Программирование в ArrayForth — словно попадание в другое измерение. Это технология, которая отделилась от «обычных» языков лет 40 назад. С тех пор развивается по собственному пути вокруг своего маленького — но на удивление преданного — сообщества»
Зачем нужны такие языки, и почему это не всегда «упражнение ради упражнения»? Если рассматривать язык как ограниченную систему, обеспечивающую взаимодействие между человеком и машиной, можно утверждать, что эзотерический язык — это, своего рода, возможность расширить наше понимание свойств и потенциальных возможностей такого взаимодействия. Странный синтаксис, «безумная» логика просто дают нам еще один пример того, как может строиться работа с машиной.
Часть из таких языков может служить не просто иллюстрацией, но и примером того, что будет, если ту или иную концепцию довести до абсурда, другая часть реализует вполне конкретные, пусть и не всегда практически полезные (для большинства) цели и задачи, еще некоторое количество эзотерических языков — это чистое искусство. Которое (как и любое произведение искусства) можно и нужно изучать — в том числе для того, чтобы попробовать выйти за рамки привычного программирования.
Список на вики-портале Esolang насчитывает 1236 существующих эзотерических языков — и новые продолжают появляться каждый год. Возможно, как пишет Митчелл Джонсон (Mitchell Johnson) из Atomic Object в своем эссе, нам стоит меньше задаваться вопросом «Почему появляются эзотерические языки программирования?». Ответ на него, чаще всего, звучит так: «Потому что…почему бы и нет».
О чем еще мы пишем на Хабре:
В конце концов, понимание целей, которые ставит перед собой создатель того или иного языка, как минимум может дать почву для размышлений тем из программистов, кто сам захочет в будущем сделать нечто подобное и разработать свой уникальный язык.
Фото hackNY.org CC BY
Немного философии
Существует мнение, что одной из причин появления эзотерических языков стала сама история программирования. С момента появления эта сфера прошла путь своего рода «десакрализации»: разработка постепенно перестала быть закрытой и очень специфической областью знаний.
Более того, появлось все больше «смежных областей», в рамках которых программирование перестало быть самоцелью и стало способом решения той или иной профильной задачи.
В этом случае программирование превращается в сугубо прикладной инструмент, а эзотерические языки в некотором роде возвращают программированию ореол «тайного знания»: с первого взгляда большинство из них выглядит совершенно нечитабельно.
Здесь, пожалуй, особенно примечателен Malbolge и другие языки «черные ящики» — пожалуй, они решают эту «культурологическую» задачу наилучшим образом.
Зарядка для ума
Еще одна задача (которую чаще всего ставят перед собой создатели эзотерических языков) — стимуляция нестандартного мышления, попытка решить те или иные вопросы нетривиальным способом. По сути, создание эзотерического языка и написание программ на нем может быть просто «головоломкой», однако это — еще и отличная возможность лучше понять, как «работает» машина Тьюринга, на практике разобраться в теории вычислимости и теории алгоритмов.
Кроме того, это — хороший способ ненадолго отвлечься от «серьезного» программирования. Именно с такой целью обычно создаются шуточные эзотерические языки. В конце концов, как говорит Арне Мартин Аурлин (Arne Martin Aurlien), разработчик из Норвегии, выступавший (видео) с этой темой на JSConf EU, «во многих из нас сидит befunge-программист, который ждет момента вырваться на свободу».
Код как искусство
Эзотерические языки программирования часто сравниваются с произведениями искусства — как литература или музыка, они в меньшей степени связаны с «чистой функциональностью» и намного больше — с выражением мыслей и оригинальных идей их авторов. Точно так же, как «традиционное искусство» они непрактичны, поэтому несут в себе другую ценность — например, служат иллюстрацией существенных различий между человеческим мышлением и «машинной» логикой или же, наоборот, предлагают уникальные способы коммуникации с машиной. То есть, как выразились в Apifonica, «представляют собой программирование в его наиболее абстрактной форме», позволяя разработчикам проявить творческое начало вне рамок и условностей.
Это хорошо, но используются ли эзотерические языки на практике?
Существуют прямо противоположные мнения относительно целей и «применимости» эзотерических языков программирования. Кто-то считает, что «практическая применимость» и «эзотерические языки» — понятия несовместимые. В этом случае эзотерические языки программирования — не более, чем «эксперименты», которые существуют по той же причине, по которой выпускаются кроссворды и паззлы — чтобы «размять мозги».
С другой стороны, эзотерические языки, несмотря на сложность практического применения, все же могут быть полезными. Например, несут в себе обучающие и иллюстративные функции. Они позволяют представить ту или иную идею в гипертрофированном виде — и при этом максимально наглядно. Например, помогают проиллюстрировать, как полноте по Тьюрингу могут сопутствовать слабые «выразительные возможности ЯП» — на примере любой тьюринговской трясины.
Однако существуют и кейсы вполне реального практического использования эзотерических языков. Например, мини-игра Lost Kingdom на Brainfuck. По словам ее автора, Джона Рипли (Jon Ripley), Lost Kingdom, скорее всего, самая большая программа, написанная на этом языке.
Случай, конечно, редкий, но не уникальный. В тематическом треде на Quora пользователи делятся кейсами работы с эзотерическими языками. Иногда их, к примеру, используют в образовательных целях. В этих случаях полезными качествами оказываются «головоломность» и определенная степень абстракции, позволяющая выделить те или иные характеристики.
Конечно, сталкиваться с «настоящими» эзотерическими языками программирования «по профессии» не приходится практически никому. Когда речь идет о работе, под эзотерическими языками понимаются скорее редкие и необычные, синтаксис которых сильно отличается от популярных ЯП — речь точно не идет о наиболее известных эзотерических ЯП, созданных для развлечения.
Тихон Джелвис (Tikhon Jelvis), ведущий специалист по данным в Target, рассказывает, что использовал среду разработки ArrayForth — и опыт работы с ней кажется ему наиболее «эзотерическим» в его практике. Например, цвет в ArrayForth — это тоже элемент синтаксиса.
Правда, ArrayForth действительно используется во вполне серьезных целях — как среда разработки для процессоров GreenArrays. Это, однако, не лишает его массы особенностей, свойственных более необычным собратьям. У него, кстати, есть даже «официальный эзотерический» родственник — язык BogusForth.
«Программирование в ArrayForth — словно попадание в другое измерение. Это технология, которая отделилась от «обычных» языков лет 40 назад. С тех пор развивается по собственному пути вокруг своего маленького — но на удивление преданного — сообщества»
Зачем нужны такие языки, и почему это не всегда «упражнение ради упражнения»? Если рассматривать язык как ограниченную систему, обеспечивающую взаимодействие между человеком и машиной, можно утверждать, что эзотерический язык — это, своего рода, возможность расширить наше понимание свойств и потенциальных возможностей такого взаимодействия. Странный синтаксис, «безумная» логика просто дают нам еще один пример того, как может строиться работа с машиной.
Часть из таких языков может служить не просто иллюстрацией, но и примером того, что будет, если ту или иную концепцию довести до абсурда, другая часть реализует вполне конкретные, пусть и не всегда практически полезные (для большинства) цели и задачи, еще некоторое количество эзотерических языков — это чистое искусство. Которое (как и любое произведение искусства) можно и нужно изучать — в том числе для того, чтобы попробовать выйти за рамки привычного программирования.
Список на вики-портале Esolang насчитывает 1236 существующих эзотерических языков — и новые продолжают появляться каждый год. Возможно, как пишет Митчелл Джонсон (Mitchell Johnson) из Atomic Object в своем эссе, нам стоит меньше задаваться вопросом «Почему появляются эзотерические языки программирования?». Ответ на него, чаще всего, звучит так: «Потому что…почему бы и нет».
О чем еще мы пишем на Хабре:
Комментарии (2)
Bookvarenko
06.01.2018 08:51Могу только набросить язык «Штурман» для программирования грузового НЛО в квадратном космосе.
instead-games.ru/game.php?ID=268
third112
А когда программирование было самоцелью? Можно пару примеров?
В отношении традиционного искусства (ТИ) – спорное утверждение. ТИ практично, начиная с наскальной живописи: все мужики в племени идут с дубинами на мамонта, кроме одного – тот их подвиги на стенке пещеры изобразит. За это получит лучший кусок мяса, т.к. героям-охотникам приятно видеть себя увековеченными, а женщины и дети, которые не были на охоте, проникаются к героям уважением. Очень практично. Позже короли и полководцы за большие деньги свои портреты заказывали…
А зачем статью на таком эзотерическом языке писать? Можно ведь выразится и круче: Хавевер экзистентны и кейсы риал-практикал юзинга. Трушная жесть!
По применению esolang уже спрашивал в предыдущей части статьи:
Ответа там не получил – интересно, ответит ли автор здесь?