Мини-интервью: Егор Бугаенко

У нас уже всё готово к JPoint 2018, и мы завершаем серию «вспоминаем интервью с JPoint 2017» (в предыдущих выпусках: Евгений Борисов, Олег Анастасьев, Алексей Шипилёв и Сергей Куксенко, Барух Садогурский, Андрей Бреслав, Олег Чирухин, Виктор Гамов).

Егор Бугаенко известен холиварными докладами: нередко зрители начинают бурно возражать ему на пятой минуте выступления. И на прошлогоднем JPoint для такого были созданы все условия — презентационная часть была сведена к минимуму, а основное время отведено под дискуссию.

Что произошло за прошедший год? Если раньше идеи Егора обсуждали преимущественно внутри Java-сообщества, то теперь они всё активнее выходят за его пределы. Полгода назад Егор побывал гостем в подкасте Podlodka, посвящённого мобильной разработке — и этот выпуск многим запомнился. Его неделя в проекте backendsecret стала рекордной как по числу возмущённых читателей, так и по числу новых подписчиков. А в ноябре он выступил на нашей конференции DotNext перед дотнетчиками. Останется ли к концу этого года в IT хоть одно неохваченное сообщество?

Руслан: Сейчас мы будет говорить с Егором Бугаенко, CTO компании Teamed.io и самым известным борцом за чистоту ООП в мире программирования на Java.

Евгений: У вашего доклада в программе стоит значок «готовьтесь, будет подгорать», и для ваших докладов подобное типично. А если вдруг завтра люди переосмыслят свое отношение к Java и ООП, примут вашу позицию, и у них перестанет подгорать, то вы будете радоваться «добился цели», или станет скучно?

Егор: Сначала было бы приятно, но потом я начал бы искать новые недостатки, которых в индустрии много. ООП — не единственная проблема, которую я предлагаю решать. У меня много других направлений, по которым я тоже докладываю на других конференциях. На JPoint разговор идет о Java, но есть проблемы и в тестировании, и в организации программирования, менеджмента, чистоте кода. Независимо от того, объектно-ориентированный код или нет, его нужно контролировать, нужен статический анализ.

У меня такой подход, что моя публичная деятельность должна быть направлена на то, чтобы критиковать то, что имеет смысл критиковать. Я не занимаюсь документированием продуктов, не описываю технологии, я в этом не большой специалист. Я не тренер, и не коуч, и не писатель о чём-то существующем. Я нахожу проблемы, выявляю, показываю, критикую — это то, что моя аудитория ждем от меня. Поэтому я не собираюсь менять направления деятельности. Даже если ООП мы починим, и весь мир станет лучше, я переключусь на что-то другое. Свою миссию я вижу в этом.

Евгений: Вы единственный в программе JPoint со значком про «подгорать» — а вам стало бы интереснее, если бы в программе были единомышленники? Или нравится быть единственным в своем роде?

Егор: Я буду рад появлению единомышленников. Есть люди, которые не спикеры, но подходят ко мне на конференции и рассказывают, как мои доклады за последние годы пошатнули их понимание ООП, и теперь они мыслят иначе. Но они не стали докладчиками. Я надеюсь, появятся люди, которые и поменяют свой стиль программирования, перейдя на ООП, о котором я говорю, и при этом станут докладчиками. Это будет очень здорово, я буду очень рад этому.

Одно дело — рассказывать и получать поддержку аудитории в виде аплодисментов, а другое — видеть, как твои мысли попали в благодатную почву и трансформировались во что-то, в результате чего появились новые доклады, концепции и идеи. Я же не один, кто про это ООП рассказывает. У нас есть чат в Gitter, где около 250 участников (прим. JUG.ru: теперь ему на смену пришёл Telegram-чат с 500+ участников), и есть масса людей, которые давно сами мыслят так, как было предложено какое-то время назад. Я сейчас принимаю не такое активное участие в жизни этого комьюнити, как когда начинал. Но есть много людей, которые не просто читатели, а активные контрибьюторы. Сообщество растёт и развивается.

Руслан: Точкой бифуркации роста вашего сообщества можно назвать рождение идеи языка EO. Можешь рассказать, в каком состоянии находится ваш язык? Насколько я понимаю, он ещё не делает первых шагов.

Егор: Эта идея появилась в декабре прошлого года. Прошло четыре месяца, за это время мы собрали вокруг языка некоторое комьюнити, включающее 14 активных контрибьюторов, помимо меня, и человек 50, так или иначе участвующих в активном обсуждении. У нас есть спецификация и первый компилятор, который собирает это всё и делает компилируемый Java-код. Сейчас в планах создать первое несложное web-приложение на этом языке. Последний месяц я трачу на него немножко меньше времени из-за конференций и занятости в бизнесе, но планирую в ближайшие месяцы создать это приложение. Попробую собрать, скомпилировать, захостить. Выложим его, посмотрим.

Идея в том, чтобы сделать полный стек, полноценное web-приложение: от получения HTTP-запроса до работы с каким-то persistence layer, весь диапазон этих слоёв заимплементировать. На самом деле этот язык планировался не для решения энтерпрайз-задач, а как экспериментальное решение, которое поможет тем, кто сомневается, и нам тоже, внести ясность в жизнеспособность наших ООП-идей. Мы на этом языке пробуем, экспериментируем и доказываем сами себе, что на той же Java можно писать в более ООП-стиле. Этот язык отличается тем, что в нём нет многих фишек других языков. Даже описание начинается со списка из примерно 25 пунктов того, чего в нем нет. Никаких static, лямбд, null-пойнтеров, геттеров/сеттеров, даже классов нет. Оставили методы, объекты, типы. Сейчас стоит вопрос, будут ли у нас переменные, пока в спецификации мы их не описали, все создаём на объектах.

Руслан: Идею об отсутствии классов еще Дэвид Уэст высказывал. У тебя есть способность поднимать бурление у людей в сердцах. Хотел бы спросить: ты намеренно так провокационно подаёшь свои идеи, или это просто твой стиль, в котором тебе комфортно?

Егор: Хороший вопрос. Я это делаю намеренно. Я считаю, что моя миссия как спикера, автора каких-то идей или того, кто хочет чему-то научить, не в том, чтобы в позиционировании своих идей быть мягким, вежливым, лояльным, суперпозитивным в отношение остальных идей. Моя миссия заключается в том, чтобы чётко и выпукло сформулировать свою мысль. Сделать это так, чтобы те, кто читают, увидели мою мысль и мысли других людей, смогли сравнить и найти свою середину. Если я буду говорить о середине, что «можно так, а можно так», то я таким образом не донесу свою мысль так чётко, однозначно и быстро до аудитории.

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

Евгений: Возвращаясь к языку EO. Его название в числе прочего отсылает к эсперанто, и это интересная параллель: эсперанто появился как язык, который должен был быть красивым и стройным, лишённым проблем других языков. Но в итоге, хотя он стройный, им почти никто не пользуется. Опыт показал, что людям хочется говорить на привычных несовершенных языках.

Егор: Я полностью согласен. Я не думаю и не рассчитываю, что наш язык станет центральным языком программирования. Наша главная задача как контрибьюторов этого проекта — испробовать экстремальные идеи и повлиять на развитие индустрии в области мейнстримовых языков. Java ведь тоже не статический проект, он развивается из года в года, и какой он будет в будущем, зависит в том числе и от нашей активности в области Elegant Objects. Мы на этом языке покажем, например (сейчас я фантазирую), что для программирования не нужны классы, хватает типов и объектов. Мы сделаем живое работающее приложение, вокруг которого будет некоторое комьюнити, мы поиграемся с этим. И, может быть, в Java 13 или 14 эта мысль дойдёт до большого комьюнити Java, и они немного подкорректируют язык. Безусловно, в Java останется основной legacy, но, может быть, немножко они направление сменят.

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

Руслан: Час назад мы говорили с Николаем Алименковым. Он не разделяет твои идеи, но при этом говорит, что твои доклады полезны в том плане, что люди могут не соглашаться, но они о чём-то задумываются. Устраивает ли тебя такое отношение: «Идеи мы не поддерживаем, но хорошо, что подумать заставляешь»?

Егор: Безусловно устраивает, да и выбора у меня нет. Критика мне нравится, на всех мои докладах в аудитории есть согласные и несогласные, главное, чтобы не было равнодушных. Если то, что я рассказал, не вызвало у человека негативных или позитивных эмоций, то я не справился со своей задачей и потратил его время зря. Поэтому, если есть негатив, то это тоже не плохо.

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

Руслан: Конференции созданы как раз для того, чтобы люди могли делиться своими ценностями, идеями и находили что-то в середине. Спасибо!