Словосочетание «rockstar developer» заставляет некоторых морщиться: «вот же глупый рекрутерский баззворд, среди самих разработчиков никто так себя не называет». В России оно встречается не так часто, а вот в англоговорящих странах многим уже надоело. И особенно остро ощущает его засилье британский .NET-разработчик Дилан Битти: он фанат рок-музыки, поэтому хорошо видит, насколько это «rockstar» далеко от настоящих rockstars.

В итоге Дилан затеял язык программирования Rockstar, код на котором должен быть похож на рок/метал-тексты. Во-первых, если получится сделать такой проект заметным, то можно отнять у рекрутеров слова «rockstar developer», дав им новое значение. А во-вторых, интересно же попробовать скомпилировать тексты любимых песен! Ну и делать наклейки на ноутбук «certified rockstar developer» тоже весело.

Конечно, всё это звучит как шутка, и изначально ей и было, но теперь становится всё реальнее. Подробности — под катом.

Началось всё с того, что разработчики стали иронично обыгрывать понятие «rockstar developer», вспоминая о настоящих рок-звёздах. Вы можете помнить эту картинку:



И подобные шуточки со временем дошли до такого твита:



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

Но Дилан Битти именно такой и есть. Он давно делает программистские пародии на рок-хиты — то есть как раз соединяет программирование, рок-музыку и юмор, затрачивая на это порядочно времени. Можете послушать, например, его версию «Another Brick in the Wall» Pink Floyd, которая на вечеринках IT-конференций заходит на ура:



Дилан вспомнил о уже существующих эзотерических языках, где не ставили цель «стать популярнее C++», а ставили цель «давайте реализуем интересную идею, просто потому что можем». Среди них есть такие, которые привносили в код лексику и стилистику из какой-то другой области: например, язык Shakespeare, стилизующий программы под шекспировские пьесы, и Lingua::Romana::Perligata, позиционирующийся как «Perl на латыни». Да, в продакшн на них никто не пишет, но сам факт их существования делает наш мир немного красочнее.

С такими мыслями он решил создать язык, где FizzBuzz может выглядеть так:

Midnight takes your heart and your soul
While your heart is as high as your soul
Put your heart without your soul into your heart

Give back your heart


Desire is a lovestruck ladykiller
My world is nothing 
Fire is ice
Hate is water
Until my world is Desire,
Build my world up
If Midnight taking my world, Fire is nothing and Midnight taking my world, Hate is nothing
Shout "FizzBuzz!"
Take it to the top

If Midnight taking my world, Fire is nothing
Shout "Fizz!"
Take it to the top

If Midnight taking my world, Hate is nothing
Say "Buzz!"
Take it to the top

Whisper my world


В августе Дилан завёл репозиторий на GitHub и написал о своей идее в Twitter, не ожидая никакой особенной реакции — и внезапно всё взорвалось ретвитами и гитхаб-звёздами. Круги разошлись вплоть до того, что у него взял интервью журнал Classic Rock.

В этом интервью Дилан заметил, что затевать подобный проект — это «как пытаться объехать Канаду на моноцикле: такое делают не для решения реальной задачи, а чтобы посмотреть, чего получится достичь, загнав самого себя в необычные рамки».

А ещё заметил, что при всей шумихе будущее проекта под вопросом: интернет очень быстро переключается на новые шутки, так что назавтра Rockstar может оказаться забыт, не успев оказаться реализованным.

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

«Использование комментариев не поощряется. Это рок-н-ролл, аудитория должна сама находить в тексте смысл!»

«Система типов похожа на ECMAScript, только undefined звучит недостаточно рок-н-ролльно, так что мы решили использовать слово mysterious».

«Поскольку Rockstar объединяет программирование, английский язык и рок-н-ролл, с апострофами всё сложно. В программировании их используют для строковых значений — 'вроде этого'. В английском для сокращённых форм — you're, he's. А в рок-н-ролле, похоже, используют вообще рандомно: sweet child o' mine, ain't talkin' 'bout love, guns n' roses».



Мы решили уточнить некоторые подробности у самого Дилана:

— Эта затея на первый взгляд выглядит «шуткой на один коммит», за которым не последует второго. Но сейчас коммитов в проекте уже 132 — правильно понимаем, что он жив?

— Да! Начался он как шутка — первый черновик спецификации языка я написал, сидя в баре за ноутбуком. Выложил на GitHub, опубликовал ссылки в Twitter… и получил больше тысячи звёзд на GitHub. А затем люди занялись реализациями. Кто-то создал транспайлер Rockstar-JavaScript, кто-то другой — подсветку синтаксиса для Sublime Text и VS Code. Люди создавали пулл-реквесты, открывали issue, делали собственные имплементации — это было потрясающе.

Теперь есть целая маленькая команда, занимающаяся референсной реализацией Rockstar; есть группа в Discord, где мы обсуждаем дизайн языка. Это всё ещё шуточный язык — но это шуточный язык с набором интеграционных тестов и рекурсивным нисходящим парсером, а в ноябре мы планируем релиз 1.0.

— А этот язык предназначен строго для рок-фанатов? Любителям поп-музыки или хип-хопа тут ловить нечего?

— Даже не знаю! Изначальная идея была в том, чтобы рекрутеры не могли больше говорить о «rockstar developers»… есть ли такая вещь, как хип-хоп-разработчик? Но язык спроектирован так, чтобы соответствовать текстам песен в целом, там нет каких-то вещей, строго требующих использовать именно рок-лексику. Я уверен, что можно написать такой хип-хоп-текст, который будет валидной программой.

— А хотите ли как-то совмещать Rockstar с пародиями, которыми вы известны?

— Написать такую пародию на рок-песню, которая одновременно с этим будет ещё и валидной Rockstar-программой? Звучит интересно… возможно, попробую после того, как мы финализируем спецификацию 1.0 :)

Напоследок небольшое объявление. Мы знаем Дилана благодаря тому, что он регулярно выступает на нашей .NET-конференции DotNext: его доклады каждый раз получают отличные отзывы, показывая, что он хорош не только в пародиях. И на ближайшем DotNext 2018 Moscow (22-23 ноября) он закроет конференцию докладом «Ctrl-Alt-Del: learning to love legacy code». А ещё он наверняка, как обычно, прихватит с собой гитару, чтобы на конференционной вечеринке исполнить свои пародии перед всеми желающими. В общем, если хотите обсудить с ним Rockstar, увидеть его в качестве докладчика или услышать его творчество вживую — вы знаете, где это можно сделать.

Комментарии (17)


  1. MaxVetrov
    26.10.2018 18:02
    +1

    Так и джаз девелоперы появятся =)


    1. halted
      26.10.2018 18:06
      +9

      а также 1С-шансонье


      1. phillennium Автор
        26.10.2018 18:09
        +9

        «Раз пошли физзбаззить
        Я и Рабинович
        Третьим будешь? Если да, то fizz»


        1. MaxVetrov
          26.10.2018 19:03
          +2

          function fizz(you){
            let i = 1;
            let rabinovich = 1;
            let we = i + rabinovich;
            we += you;
            if (we==3) {
              return true;
            } 
            return false;
          }


      1. Old_Chroft
        26.10.2018 22:58
        +1

        На самом деле 1С для этого и придуман (извиняюсь за многабукаф, но из песни слов не выкинешь):

        Код. Некоторые вещи упрощены
        Процедура ПриНаступленииУтра() 
        	Если Константы.ЯНаВоле.Получить() = Истина Тогда
        		Возврат;
        	Иначе
        		МотаюСрок();
        	КонецЕсли;
        КонецПроцедуры
        
        Процедура МотаюСрок()
        	МойСрок = Объект.Приговор.Срок;
        	Если СрокОтсидки >= МойСрок И Жена.Преданность = Ложь Тогда
        		ВероятностьОчереднойПередачки = Ложь;
        		Сообщить("Все плохо, жена " + Жена.Наименование + " сука!...");
        		Сообщить("Вы звоните кореша все будет путем!");
        	Иначе
        		ВероятностьОчереднойПередачки = Истина;
        		Сообщить("любимая " + Жена.Наименование + ", дождись и я вернусь");
        	КонецЕсли;
        	
        	СпетьПрипев(ВероятностьОчереднойПередачки);
        	
        	
        Конецпроцедуры
        
        Процедура СпетьПрипев(ПередачкаБудет)
        	
        	Посадка = РегистрыСведений.МоиХодки.СрезПоследних(ТекущаяДата(), Структура("Я", Объект));
        	Если ПередачкаБудет = Истина Тогда
        		Сообщить("Жду с нетерпением,любимая моя...");
        		Сообщить("Я не специально, менты суки меня поймали за очередным " + Посадка.ОписаниеСтатьи);
        	КонецЕсли;
        	Для Каждого Кореш Из Справочник.Кореша Цикл
        		КорешОтветил = ОбщиеПроцедурыОбщенияСКорешами(Кореш.НомерТелефона);
        		Если КорешОтветил = Истина Тогда
        			ВероятностьОчереднойПередачки = Истина;
        		Иначе
        			ВероятностьОчереднойПередачки = Ложь;
        		КонецЕсли;
        	КонецЦикла;
        	
        	Если ВероятностьОчереднойПередачки = Истина Тогда
        		Сообщить("Кореш " + Кореш.Наименование + " жди, бухнем");
        	КонецЕсли;
        	
        	Сообщить("я тут ни за што!");
        	
        КонецПроцедуры
        
        // эти функции применять по желанию:
        Функция ЯНеВиноват()
        	Возврат Истина;
        КонецФункции
        
        Функция СукиВсеВрут()
        	Возврат Истина;	
        КонецФункции
        
        Функция МеняНеТакПоняли()
        	Возврат Истина;	
        КонецФункции


  1. dark_ruby
    26.10.2018 18:18

    Хорошо что тексты Металлики на самом деле так не выглядят.


    1. phillennium Автор
      26.10.2018 18:23
      +3

      Конечно, на самом деле разница есть. Но, по-поему, тексты Металлики временами выглядят вполне как код:

      image


  1. nafgne
    26.10.2018 18:40
    +1

    FIM++ где-то рядом


  1. greabock
    26.10.2018 19:57

    А почему заголовок глючит?
    p.s Не глючит, но он странный )


    1. phillennium Автор
      26.10.2018 20:29

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


      1. Mairon
        26.10.2018 23:34
        +1

        человек с хабраголосом столкнулся)


        1. phillennium Автор
          27.10.2018 08:16

          А, теперь понял) Тогда для всех, у кого возникнет такой вопрос, объясняющая ссылка.


  1. dsapsan
    26.10.2018 23:59

    Простите, я наверное что-то не понимаю, но при чём здесь разработчики GTA?


  1. skaflock
    27.10.2018 00:36

    Нужен язык программирования Junior


    1. MaxVetrov
      27.10.2018 03:39

      Для Junior-oв уже есть язык Spaghetti :)


  1. astraleuro
    27.10.2018 08:56

    Пришел сюда чтобы увидеть это, не увидел - запостил
    image


    1. MaxVetrov
      27.10.2018 16:01

      Rama Developer