Интервью с Александром Макаровым, Yii core team +47


Один из ключевых разработчиков Yii, Александр Макаров(SamDark), выступит на DevConf с докладом про пакетные метрики и я воспользовался возможностью задать несколько интересующих меня вопросов про новую версию Yii, новую ORM, сбор денег на OpenCollective, фулл-тайм open source разработку и немного про конференции.

Начну с вопроса, который тебе задают постоянно. Что с Yii? Когда Yii 3? Я довольно долгое время наблюдаю активное создание новых пакетов в github.com/yiisoft

С Yii всё нормально. Ну почти. Чтобы объяснить, нужно немного посмотреть назад.

Когда мы делали версию 2.0 мы несколько переоценили свои силы. Оно и понятно, Qiang Xue сворачивал горы каждый день и казалось нам по силам всё и сразу.

Потом, к сожалению, времени на OpenSource у него не хватило, и поддержка сделанного скушало всё время остальной команды. Ну а так как фуллтайм фреймворком никто не занимался, это выливалось в то, что релизы были не частыми и большими. Вдобавок, при проектировании тогда мы наделали ошибок. Сейчас мне они кажутся очевидными, но тогда мы думали, что так хорошо. Их, к счастью, не так много. Они не делают Yii 2.0 плохим, фреймворк вышел хороший. Но они вылились со временем в то, что обещание обратной совместимости, множество фич и дефицит времени дали нам проблемы с развитием фреймворка: внедрением PSR, ухода от закрытости к общим для всего PHP пакетам и библиотекам, улучшением по части применения более сложных подходов к разработке, лучшей тестируемости.

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

https://github.com/yiisoft/docs/blob/master/001-yii-values.md
https://github.com/yiisoft/docs/blob/master/003-roadmap.md

Далее началась работа по выделению отдельных пакетов и в процессе перечитаны и переосмыслены принципы построения пакетов Роберта Мартина. Пакеты на самом деле не совсем новые. Это части Yii2, которые, по большей части, можно использовать отдельно.
Но есть и новые, такие как:

https://github.com/yiisoft/event-dispatcher
https://github.com/yiisoft/di

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

Помню у вас было в планах использование некоего нового ORM, о котором мало кто знает. github.com/cycle/orm Я пока не удосужился с ним ознакомиться подробно, расскажешь, чем он отличается от других и чем привлек тебя?

Да, это действительно Cycle. Реализовал её Антон Титов, автор roadrunner.dev. Документация там пока не вполне актуальна, так что, если не готовы читать исходник, лезть внутрь рановато.

Мы с Антоном долгое время общаемся. У него был тогда in-house фреймворк и он задавал вопросы на тему как и что устроено в Yii, что мне нравится и не нравится в Active Record. Обсуждали и плюсы-минусы Doctrine. Иногда созванивались и Антон показывал, как и что там у него сделано и я много раз говорил, что мол в Yii это удобнее.
В какой-то момент говорить так я начал меньше и понял, что из Cycle может получиться что-то глобально интересное. В то время там уже был похожий на Yii query builder синтаксис, концепт relations и много чего ещё. Особенно подкупало то, что в production у Антона RoadRunner и ему критично было то, чтобы Cycle не тёк, не кушал лишней памяти и не разваливался при ошибках в пакетной обработке данных.

На самом деле, я последний раз детально смотрел Cycle ещё весной и решение взять его по умолчанию для Yii не принято. Это пока только вариант. Но одно понятно: мы не будем завязываться на Active Record для валидации, форм и так далее. Это всё должно работать с чем угодно: с DTO, с Doctrine entity, с Cycle.
Yii недавно начал привлекать средства через opencollective.com/yiisoft. На текущий момент близка к выполнению цель«One focused core developer — $24,000 per year». Что это значит? Full time разработчик, который будет заниматься исключительно Yii? Кто это будет?

Да, мы действительно стартанули кампанию по сбору средств потому как времени на Yii 3 требуется больше, чем раньше только на поддержку Yii 2. Focused core developer не означает что это будет full-time (сумма всё-таки не сопоставима с коммерческим фуллтаймом), но означает что практически каждый день один разработчик будет уделять значительное время фреймворку не отвлекаясь на горящий продакшн, дедлайны, проблемы команды и вот это всё. То есть это не только больше времени, но и хороший фокус мыслей без сильно отвлекающих факторов.

Первым таким разработчиком буду я. По достижении цели попробуем поднять планку и расширить это на ещё одного члена core team.
Вся эта возросшая активность скорее всего связана с тем, что у тебя наконец появилось время. Ты работал в Skyeng, ушел оттуда(о причинах и подробностях можно почитать здесь — rmcreative.ru/blog/post/poka--skyeng ). Продолжаешь заниматься только open source? Как ощущения? Семейный бюджет?

Да, всё так: появилось время и Yii сильно поднялся в приоритетах целей. Занимаюсь я почти только OpenSource. Сейчас OpenCollective позволяет платить почти по всем счетам. Иногда беру какие-то небольшие подработки вроде ревью кода, процессов или безопасности, оформления OpenSource библиотек, поиска людей для компаний (знакомые хорошие разработчики, бывает, тоже ищут), но не много, чтобы не вредить разработке фреймворка.

Ощущения… всякие. Это действительно то, что мне нравится делать. Радует, что получается отличный инструмент. Радуют люди, которым Yii не безразличен и которые помогают. Нравится выступать на конференциях.

Иногда груз ответственности давит. Хочется отдохнуть, но «надо» заставляет что-то делать. Чаще всего в таком настроении ничего дельного не выходит, так что пытаюсь всё-таки убедить себя, что отдых заслуженный.

Ну и понимание что впереди ещё очень много работы тоже ощущается не очень. Хотя, если каждую неделю посматривать на сделанное, становится понятно, что сделать это всё реально и что мы это сделаем.

С нетерпением жду того момента, когда можно будет объявить альфу и получить первые гневные отзывы :)
Я еще помню ты открывал что-то вроде кофейни, и может даже не одну. Бизнес для души? Много времени отнимает?

Две кофейни, да. Делали, чтобы самим было приятно. Планка высокая. Хорошие получились, но есть куда расти. Кофейнями сейчас, в основном, занимается мой брат. Времени отнимают не много.
В мае ты был одним из организаторов конференции PhpRussia. Как она прошла?

Хорошо прошла. Сделали почти всё, что хотели: 500 человек плюс онлайн-зрители. Именитые иностранные докладчики, сильная программа. Практически полное отсутствие каких-либо накладок. Отзывы, в основном, положительные, но развиваться есть куда. Будем делать ещё.
Для чего рядовому разработчику посещать такие конференции?

  1. Для того, чтобы знать куда расти.
  2. Для того, чтобы понимать, правильно всё в проекте или нет.
  3. Набрать новых инструментов и практик.
  4. Пообщаться. Это часто даёт очень неожиданные результаты: от просто приятного общения до бесценных советов и озарений.

Ну и наконец про твой доклад. «Теория программирования: пакетные принципы и метрики». Ты упомянул Роберта Мартина и его мысли про пакеты. Насколько это применимо в мире PHP? В мире компилируемых языков делить один проект на несколько пакетов, которые компилируются в отдельные сборки — вполне нормальная практика и там действительно нужны некие правила. В PHP же мы обычно говорим о composer-пакетах, которые немного другое, и эти принципы с метриками нужны разве лишь для проектов уровня Yii3. Нет?

Это вполне применимо к PHP. Конечно, прежде всего это нужно для проектов уровня Yii, Symfony или Laravel, но и для коммерческих проектов это также имеет смысл. Пакетные метрики можно применять не только к пакетам Composer, но и к модулям кода, микросервисам и так далее.



DevConf пройдет 21-22 июня и до него осталось всего 2 недели. Крепкие доклады, возможность обсудить кучу вопросов в кулуарах или на кофебрейках и получить хороший позитивный заряд на долгое время — регистрируйтесь.




К сожалению, не доступен сервер mySQL