Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!
Привет! В эту субботу PHP-чат Нижнего Новгорода проведет свой четвертый митап с интерактивной трансляцией. Доклады подготовят Валентин Удальцов из Москвы и Денис Юрьев из Новосибирска — те, кто придут очно, смогут вдоволь наобщаться с ними на афтепати в центре города, те, кто будут смотреть онлайн — задать вопросы текстом или голосом прямо из браузера.
Записаться на митап можно здесь, поставить колокольчик под трансляцией — здесь, а ниже вы найдете небольшое интервью с докладчиками про то, что не вошло в их выступления.
Денис Юрьев (тимлид в Skysmart от Skyeng) — расскажет, как упаковать продукт в переменную
О чем твой доклад?
Пару раз я сталкивался с тем, что если два в целом похожих продукта, выросших из одного репозитория, поддерживают разные команды, через полгода это буду уже два совершенно разных проекта. Мне всегда хотелось сделать это иначе.
Поэтому когда в Skyeng решили запускать новые предметы — русский, шахматы, физику, обществознание — на базе нашей с командой платформы для изучения математики, я предложил: «А давайте мы своими силами». Поддержка новых репозиториев казалась неинтересным, а с учетом планов на десяток потенциальных проектов — самоубийственным решением. Поэтому мы пошли новой дорогой.
В докладе поделюсь историей в деталях, как мы спланировали архитектуру, на какие «грабли» Symfony наткнулись в процессе — и почему оно у нас вообще получилось.
На митапе мы будем много говорить о том, как структурировать код. Дай совет самому себе из прошлого — что делать, не делать и к чему это приведет?
Пораньше начать изучать практики других языков программирования и даже другие прикладные области.
Например, когда-то мне казалось проще оставить бизнес-логику связанной с каналом передачи данных, а громоздкий функционал — проще положить в один сервис на много строк и не разбивать по модулям. Не надо так.
Когда я начал смотреть, как происходит разработка на Unity, а там используется паттерн ECS – тут же захотелось и в PHP разбивать код на более мелкие, менее связанные части. Выделив небольшой осмысленный кусочек логики в модуль (отправка сообщения, какая-то конкретная операция над определённым видом данных и т.п.), мы получим возможность переиспользования, комбинирования, даже более простое юнит-тестирование.
Расскажи историю, которая не вошла в твой долклад, но будет полезна в контексте твоей темы.
Однажды нам надо было запустить проект в сжатые сроки. Какое-то внятное описание бизнес-логики при этом отсутствовало, а область была очень сложной, и мы не входили в целевую аудиторию.
Казалось бы, стоило начать писать код, а понимание придет в процессе – но вместо этого мы сели и «на пальцах» начали разбирать очень сложный механизм будущего проекта. Как всё работает от и до, внутри и снаружи. Это было заразительно, появлялись идеи, нам активнее помогали коллеги.
К концу третьего дня (а это была значительная часть нашего тогдашнего сжатого срока) у нас на руках было полнейшее понимание, что и как работает. Не написав ни строки кода, мы уже знали, что за чем будет идти, как распараллелить работы, что за сервис мы получим в итоге и что должно поставляться в mvp.
Вместо хаотичных вопросов и непонятных задачек, мы приходили в другие команды с подробным описанием того, что нам нужно, с контрактами и пространством для обсуждения. Приходили сильно заранее, чем если бы дошли до этого, начав писать код «вслепую».
История закончилась хорошо – запуск состоялся в срок, все получили классный опыт предварительного исследования требований и ведения переговоров «на берегу». С тех пор я стараюсь как можно плотнее понимать бизнес проекта – это делает сильнее и проект, и тебя как профессионала.
О чем с тобой еще можно поговорить на митапе?
Архитектура проектов, микросервисы, информационная безопасность и почему жонглирование четырьмя шариками – самое неинтересное занятие на свете.
Валентин Удальцов (тимлид в Happy Inc., автор канала «Пых») — расскажет, как структурировать код, чтобы не получить большой ком грязи
О чем твой доклад?
Я сравню подходы package-by-type, package-by-layer, package-by-feature в контексте Agile и поговорю про принципы проектирования пакетов Роберта Мартина. Покажу пример организации модулей в проекте на Symfony, а также инструменты в PHP, которые помогут следить за связанностью модулей и направлением зависимостей.
Дай совет самому себе из прошлого — что делать и не делать в разработке?
Что делать — помимо SOLID изучать Package Principles. Что не делать — не воспринимать документацию к фреймворкам как образец структурирования кода.
Расскажи историю, которая не вошла в твой долклад, но будет поучительна в контексте твоей темы.
Очень важно периодически ставить под вопрос привычные практики: в какой-то момент я стал фанатом разбивки кода по слоям, но после нескольких споров в чатах телеграма решил попробовать альтернативный подход, — и только тогда увидел за деревьями лес.
О чем с тобой еще можно поговорить на митапе?
Про трейты, композицию, статанализ или любой пост из моего канала «Пых».
p.s. А еще мы разыграем на митапе такого замечательного плюшевого слона и другие призы от компаний-партнеров митапа и сообщества. Розыгрыш пройдет только среди участников в офлайне.