Size: a a a

2020 July 23

AM

Artem Molotov in PHP
Санжар
Ссоре за прохладную историю, я поною и пойду спать наверное.

Есть компания небольшая, делающая сайты. Сложность сайтов максимум интернет-магазин, есть конечно специфичные проекты посложнее уже, но их мало очень.
Программистов не так много, т.к специализация именно не разработка, а околоайтишное (Реклама/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-пресеты какие-то, я не углублялся т.к в фронт не пускают.
Я бы еще кучу всего написал о деталях, но я просто устал, пойду лягу спать.
> я блять даже узнал что такое OpenVZ

Это же получается, что мой никнейм может 1.5 года не гуглиться. 👀
источник

VS

Vlad Sobenko in PHP
Павел
В начале....когда искал первое место работы..ходил на собеседования...в достаточно известные компании в нашей местности...у них в основном была одна проблема...мы тут.. кто-то из нас когда-то что то написал не помним когда....и нам сча нужен джун который бы в этом всем разбирался
Ну если джун в соло, то он там такого наделает)
источник

ПИ

Павел Иванов... in PHP
А потом по кругу - кто-то когда-то что-то сделал
источник

AM

Artem Molotov in PHP
Санжар
Ссоре за прохладную историю, я поною и пойду спать наверное.

Есть компания небольшая, делающая сайты. Сложность сайтов максимум интернет-магазин, есть конечно специфичные проекты посложнее уже, но их мало очень.
Программистов не так много, т.к специализация именно не разработка, а околоайтишное (Реклама/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-пресеты какие-то, я не углублялся т.к в фронт не пускают.
Я бы еще кучу всего написал о деталях, но я просто устал, пойду лягу спать.
> разработчик который давно там ведет проекты только с этим фреймворком видимо и работал, т.е уйдет время на то, чтобы переучиться новому разработчику

Не новому, а старому. И старого разработчика, который не юзает композер, пишет автолоадинги непопсровски... Путь ему только один, кажется.
источник

AM

Artem Molotov in PHP
А вообще трешак
источник

ПИ

Павел Иванов... in PHP
Лучше из такой конторы валить. Или на крайняк становиться тем, кто принимает решения :) Хотя тоже ну такое
источник

VS

Vlad Sobenko in PHP
При таком подходе, лучше бы заставить писать тесты, чем потом искать джуна, который это гавно разгребёт.
источник

AM

Artem Molotov in PHP
Kirill Nesmeyanov
ага, найс решение)
от условного редиса с чтением/записью через функции мало чем отличается)
источник

П

Павел in PHP
Я сча на такой конторе...приходится подстраиваться и говнокодить дальше...придерживаясь корпоративного стиля
источник

R

R1KO in PHP
зато учишься реверсить, дебажить и разбираться в куче чужого кода
источник

AM

Artem Molotov in PHP
Panda🤔
Да удали оттуда пару строчек
Что бы потом ещё и доверие потерял? Агенства хранят дифф резюмешек.
источник

AM

Artem Molotov in PHP
Lee Nar
Херня
Всё же отличия есть и "самая большая проблема глобальных переменных" им решается.
источник

AM

Artem Molotov in PHP
ой, не туда ответил
источник

AM

Artem Molotov in PHP
🐴 🐴
щас тоже так делают. всякие ngrx store это такой большой глобальный комок состояния
.
источник

AM

Artem Molotov in PHP
Санжар
как вариант рефакторить, но пока идет туго — я почти допилил docker-версию вместо VBox конфига где кучу всего вручную надо было делать, а в Docker просто makefile будет, в идеале бы еще multi-stage build, но это оверхед наверн.
короче пиздец. нужно ли мне это?
Нужно ли им это?

Может лучше вообще сдохнуть, зачем вообще жить?




Сложно.
> в идеале бы еще multi-stage build, но это оверхед наверн

Не оверхед, если знаешь для чего и когда он нужен. В пыхе не так часто нужен, мне кажется.
источник

VS

Vlad Sobenko in PHP
Павел
Я сча на такой конторе...приходится подстраиваться и говнокодить дальше...придерживаясь корпоративного стиля
Печально, у меня тоже 1я контора была такая. Теперь на собесах задаю вопросы: вы пишете тесты? Какие? Юзаете стат анализатор? Если в ответ молчание - нах эту контору.
источник

AM

Artem Molotov in PHP
забавно выглядит. Правда пых коричнегого цвета кое-что напоминает.
источник

KN

Kirill Nesmeyanov in PHP
хм
источник

KN

Kirill Nesmeyanov in PHP
Artem Molotov
забавно выглядит. Правда пых коричнегого цвета кое-что напоминает.
ну я взял чужую гифку за основу, влом было всё рисовать
источник

KN

Kirill Nesmeyanov in PHP
источник