AM
Есть компания небольшая, делающая сайты. Сложность сайтов максимум интернет-магазин, есть конечно специфичные проекты посложнее уже, но их мало очень.
Программистов не так много, т.к специализация именно не разработка, а околоайтишное (Реклама/SEO).
Суть в чем. Делаются корпоративные сайты, агрегаторы, интернет-магазины, все смежное.
В принципе +- все это CRUD: это все обкатано, есть опыт разработки подобных вещей с позиции fullstack-разработчика, т.к обычно по реализации это просто верстка по макету и бэкенд несложный.
Проблема в чем.
1. Собственный фреймворк внутренний у компании, написанный 8 лет назад. Сначала я думал, что это просто плохой код, но в ядре фреймворка есть какие-то нетипичные для такого кода вещи, вроде того что есть в некоторых местах покрыто тестами, кодстайл какой-то соблюдается, есть комментарии в меру адекватные, и в принципе со здравой головой можно понять как все работает: только вот есть вещи, которые меня оттолкнули:
не используется Composer,
не используются классы (в проекте нет ни одного класса, абсолютно все PHP файлики, такого типичного class Person {} нет, разделено на namespaces все, аутолоадинг и все остальное свое).
Собственный шаблонизатор с нуля, никаких интерфейсов, трейтов, наследования в типично понимании, , пакеты подключаются — через include/require в одном файле с конфигами.
Размер некоторых php-файлов и "контроллеров" (который один php файлик с 200 функциями на весь проект может быть) достигает 1000 строк иногда.
Прям откровенно плохого кода нет: названия функций интуитивно понятные, комментарии иногда есть. Но мне физически больно иногда писать и разбираться в этом; возможно из-за нехватки компетенции, или это реально хреновая идея писать свой фреймворк для такого типа задач.
Также для БД используется Mongo, написана на уровне фреймворка надстройка над ним (грубо говоря ORM небольшая) чтобы было удобнее писать запросы.
Используется Mercurial, к админке прибито добавление апдейтов через этот же меркуриал, все это дело запускается через VirtualBox, к которому написаны инструкции, но он часто падает у меня, или бывают какие-то проблемы — например, из-за особенностей shared folders (https://docs.mongodb.com/manual/administration/production-notes/#fsync-on-directories)
Это приводит к тому, что тяжело запустить иногда проекты у себя локально, на это может уйти полдня из-за того, что что-то опять отвалилось, и это норма.
Был вопрос, почему используется такой подход, на что человек который занимался этим объяснил что не любит ООП для простых проектов, когда создают миграции, толстые модели/контроллеры и пишут очень много кода, когда можно в одном файлике или разделить на несколько файликов.
Спорить с его мнением не хочу, но проблема в том что порог входа в такой специфичный проект очень повышается. Проекты простые делаются долго, я в шоке с того как компания не разорилась, но видимо они наловчились быстро закрывать свои задачи через этот инструмент.
Только вдумайтесь: есть таск, где надо просто CRUD добавить, а я полдня вожусь с тем чтобы понять в чем проблема с VirtualBox, я блять даже узнал что такое OpenVZ, это все правда интересно и прикольно, но как бы... Мы же должны быстро закрывать таски и решать задачи клиентов.
Да, можно уговорить писать на новых технологиях (или попроще вещах где RAD-разработку херачить можно под тип наших проектов), но еще одна беда в том что разработчик который давно там ведет проекты только с этим фреймворком видимо и работал, т.е уйдет время на то, чтобы переучиться новому разработчику на новый стек, а время это деньги и соответственно такое обновление продвинуть тяжело будет т.к с точки зрения PM это будет убыток который не факт что ускорит разработку; на это нужно вложить время.
На фронтенде также используется свой фреймворк/либа, свои css-стили написанные по БЭМу полностью с нуля, less-пресеты какие-то, я не углублялся т.к в фронт не пускают.
Я бы еще кучу всего написал о деталях, но я просто устал, пойду лягу спать.
Это же получается, что мой никнейм может 1.5 года не гуглиться. 👀