TL;DR Очередной лонгрид на 15-20 минут про то, что Symfony лучше Битрикса почти во всем.

Опытному разработчику не нужно объяснять преимущества одной платформы над другой. Он самостоятельно может разобраться в этом вопросе на основании своего опыта.

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

На сегодняшний момент существуют десятки различных платформ, инструментов и технологий, которые могут быть применены при создании сайта. Попробуем в этом зоопарке разобраться и понять, почему выбор одного над другим будет лучше или хуже. Данная статья будет сконцентрирована на выборе между Битриксом и Symfony.

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

Заказчик, который хочет реализовать новый проект исходит из определенных соображений:

  • содержит ли продукт какую-то готовую основу, чтобы сэкономить на чем-то
  • является ли продукт безопасным
  • может ли продукт контактировать с другой IT инфраструктурой заказчика
  • сложно ли будет масштабировать проект, построенный на базе продукта
  • дорого ли будет его сопровождать
  • сложно ли будет изменить подрядчика при необходимости, или подключить еще одну команду
  • и т.д. и т.п.

Об этом обо всем, а также о других вещах попробуем и поговорить в этой статье.

Компетентность

На мой взгляд компетентность подрядчика является одним из главных факторов выбора. В России очень много некомпетентных разработчиков, к сожалению. WordPress, Drupal, Joomla - это все CMS, на которых пытаются делать сайты вчерашние школьники. Основной плюс этих CMS заключается в том, что можно сравнительно быстро запустить первую версию проекта с приложением минимума усилий без привлечения серьезных специалистов. Взять к примеру этот блог. Он был собран на коленке с помощью WordPress за один вечер под пиво, пару вечеров ушло на то, чтобы поменять настройки, поиграться с темами и поставить разные плагины. И все. В этом плане подобные CMS являются очень крутыми инструментами.

Есть и исключения. На WordPress и Drupal можно в действительности создавать очень и очень серьезные проекты. Но это настолько редкое явление, что его можно не брать в расчет.

Что до 1С-Битрикс, то это платная платформа. Разработчиков на этой CMS существенно меньше, чем на тот же Drupal или WordPress в мире (но не в России, вот парадокс). Однако благодаря маркетологам этот продукт крайне популярен в Российском сегменте, особенно ecommerce. Разработчики в этом сегменте есть, их много, но их компетенция в большинстве случаев оставляет желать лучшего. Есть, опять же, исключения. Хорошие студии и разработчики стоят «хороших» денег, и у них, как правило, всегда есть много работы на месяцы или даже годы вперед.

Symfony же - это opensource фреймворк, который развивается студией SensioLabs и сообществом разработчиков. В него более высокий порог вхождения, т.к. работа с этим фреймворком требует определенных знаний. Если ты не умеешь и не понимаешь определенных низкоуровневых концепций, то тебя не ждет успех в освоении Symfony.

При прочих равных, если взять трех случайных разработчиков, поднявшихся до звания среднего разработчика при изучении разных платформ - WordPress, Битрикс и Symfony, то последний будет обладать наибольшим багажом знаний и навыков, необходимых современному разработчику. Это делает его более конкурентоспособным и квалифицированным по отношению к другим его коллегам.

Если разработчик знаком с Symfony, то он обладает достаточным багажом знаний, чтобы оперативно адаптироваться к любой другой CMS платформе или фреймворку. Если же разработчик знаком только с wordpress или c 1C-Битрикс, то ему будет довольно сложно разобраться в Symfony. Такова реальность.

Также это является одной из причин, почему в РФ гораздо меньше потенциальных подрядчиков для разработки проектов на Symfony, чем на Битрикс. Symfony сложнее, а битрикс - проще. Поэтому на битриксе очень легко найти разработчика, их много (но очень много дилетантов), а на Symfony - наоборот, найти разработчиков сложнее, но шанс нарваться на дилетанта гораздо меньше.

Рейтинг в кругах разработчиков

Для заказчика это очень сомнительная метрика, но она имеет очень высокий вес для разработчика.

Если изучить российский сегмент интернета по тематике IT и web-технологий, и разработки в частности, можно быстро сформировать мнение о том, что битрикс - это продукт с сомнительной репутацей. Очень много неоднозначной информации в интернетах на эту тему. Даже ссылки приводить не буду, на страницах этого блога уже было не раз, ссылки на кучу сторонних ресурсов и собственные материалы, которые говорят о низком качестве продукта.

Просто поверьте на слово, что с точки зрения организации «правильного» и «современного» процесса разработки, 1С-Битрикс - тот еще фрукт. Принципы разработки и поддержки продукта застряли где-то в середине двухтысячных. Современный мир не стоит на месте и постоянно порождает множество полезных и удобных практик, инструментов. Все это принципиально игнорируется разработчиками платформы, что приводит к усложнению или невозможности их использования. Из-за этого процесс разработки под 1С-Битрикс замедляется и усложняется, а репутация продукта в глазах разработчиков регулярно падает.

Если же рассматривать Symfony, то это продукт с кристально чистой репутацией уже на протяжении многих лет (с 2007 года). Этот продукт задает импульс для всех современных инструментов и технологий. Множество инструментов, разработанных в рамках проекта Symfony, перекочевывает и в другие проекты. Взять тот же WordPress, или Drupal, или даже phpBB - все эти проекты используют кусочки кода и принципы, которые впервые были разработаны для symfony.

Ограничения и гибкость

Я лично не раз говорил своим заказчикам, что на 1С-Битрикс можно реализовать систему абсолютно любой сложности. Это же написано где-то в официальном руководстве разработчика битрикс (ссылку искать не буду, кому надо - тот сам найдет). По сути это означает, что никаких ограничений в битриксе нет - делай что хочешь. Но есть одно «но» - можно делать только то, что входит в рамки поддерживаемых битриксом технологий. Например, если хотите использовать 1С-Битрикс с Oracle - извольте написать собственный драйвер для работы с этой СУБД. Хотите изменить состав какой-то из административной страниц - извольте действовать в рамках логики, задуманной разработчиками 1С-Битрикс (как правило, они не дают практически никаких возможностей за очень редкими исключениями). Подобные рамки, в которые загоняет 1С-Битрикс, присутствуют в продукте повсеместно, и за 8 лет опыта я уже не один раз натыкался на эти грабли.

Symfony позволяет в действительности снять эти ограничения. Есть рекомендуемый путь решения задач, но каждый разработчик волен пойти своим путем. Это накладывает определенную ответственность на разработчика (возвращаясь к компетентности), но одновременно дает полную свободу. Фреймворк построен таким образом, что можно изменить если не все, то почти все. Единственный минус - это сторонние решения других разработчиков - там вы тоже должны действовать в рамках логики, заложенной разработчиком, но и опять же, разработчик тоже может дать вам возможности по стопроцентному изменению всех возможностей его решения.

Готовые решения

У 1С-Битрикс в действительности очень много готового функционала идет из коробки. Еще больше готовых решений есть в его маркетплейсе. Казалось бы, что еще нужно. Однако на деле все снова упирается в гибкость. За все время я не сталкивался ни с одним проектом, где заказчика бы полностью устраивало то, что предлагает битрикс. Такова реальность. Бизнес - он всегда разный. У каждого бизнеса есть свои, уникальные потребности, которые далеко не всегда можно удовлетворить с помощью Битрикса и его возможностей (или можно, но дорого).

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

Что касается Symfony, то выбор готовых решений для него тоже достаточно велик. По большому счету, можно к Symfony присобачить абсолютно любой кусочек кода из интернета, написав небольшую обертку. Главное, чтобы он был совместим с нужной версией php. В битриксе так сделать гораздо сложнее, а иногда и вообще невозможно.

Да, тут речь идет о готовых решениях разного уровня. Если в битриксе готовые решения чаще всего решают конкретную задачу бизнеса в рамках логики, предоставляемой CMS платформой: компонент отзывов для товаров, модуль оплаты с помощью сбербанка и т.д. В Symfony же готовые решения имеют более низкий уровень: каркас для построения системы отзывов на сайте, комплект инструментов для интеграции с эквайрингом сбербанка.

Для типовых случаев будет выигрывать Битрикс. Но типовые случаи - это удел меньшинства, большинству нужна уникальность, и тут Symfony будет в выигрыше, т.к. дает больше свободы.

Да, Symfony может проиграть на почве типовых решений для РФ, например тот же обмен с 1С. Но на моей памяти обмен с 1С в чистом виде использовался лишь на одном проекте. Доработка этого механизма в битриксе несет в себе большие сложности, что порой быстрее реализовать его с нуля, а в Symfony это будет сделать проще (а значит - дешевле).

Стабильность

Я не могу назвать 1С-Битрикс стабильной платформой. При каждом обновлении происходит что-то такое, что может перевернуть ваш бизнес вверх дном. Несмотря на все заверения разработчиков CMS, продукт регулярно выходит с ошибками. Вот прямо сейчас на одном из проектов я открываю страницу обновлений и вижу обновления для 33х модулей системы. Открываю лог изменений одного из самых популярных модулей - интернет-магазина, и вот что я вижу:

Версия 17.8.22
Исправлено удаление отложенных товаров в корзине.

Версия 17.8.21
Исправлена ошибка, возникавшая при вызове компонента sale.basket.basket.line после компонента sale.order.ajax.
Исправлены ошибки совместимости с устаревшими шаблонами компонента sale.basket.basket.line.
Разработчикам: настоятельно рекомендуем включить параметр "Не показывать на страницах корзины и оформления заказа" компонента sale.basket.basket.line для улучшения производительности.

Версия 17.8.20
Исправлена ошибка, при которой администратор не мог отправить транспортную заявку.
В компонентах магазина исправлена ошибка показа цены и величины скидки с учетом округлений.
Улучшение работы платежных систем.
Исправлена работа фильтра по стоимости заказа на странице оплат.
Исправлена ошибка, из-за которой в печатные формы заказа передавался некорректный номер заказа.
Исправлена ошибка, приводящая к очистке отложенных товаров.
Исправлена ошибка, при которой при изменении стоимости basketItem на событии onSaleOrderBeforeSaved, не обновлялась сумма оплат.

Версия 17.8.19
Доработан обработчик Атол.ОнлайнV4.
Исправлена ошибка, из-за которой активный товар в составе заказа выводится перечеркнутым с надписью.

Версия 17.8.18
Исправлена ошибка удаления заказа процессом на агенте.

Версия 17.8.17
Добавлена поддержка Bootstrap 4 в шаблонах основных компонентов.

Версия 17.8.16
Исправлена ошибка объединения позиций в корзине после авторизации пользователя.
Исправлена ошибка вывода просмотренных товаров в профиле пользователя в административной панели.
Доработан новый обработчик "Яндекс.Касса".
Исправлена ошибка импорта табличной части заказа для предложений, в ID которых есть "#".
Добавлена поддержка обмена с 1С для CML версии 2.10.

Версия 17.8.15
Исправлена ошибка уменьшения количества товара при удалении его из заказа.

Версия 17.8.14
Исправлена ошибка учета оформленных заказов в модуле конверсии.
Исправлена ошибка обратной совместимости событий магазина OnOrderAdd, OnOrderUpdate.

Из 23х записей чейнжлога 17 описывают исправление какого-нибудь косяка. И это только один модуль из 33х. Не знаю как вы, а я побаиваюсь обновлять битрикс, т.к. знаю их стабильность и знаю как устроена система их обновлений.

Для сравнения, вот CHANGELOG от 4й версии Symfony - 535 записей об исправлении ошибок и 301 запись о добавлении новой фичи.

Во-первых, сразу видно объем проводимой работы. В Symfony на протяжении версии 4.0 внесено изменений по более чем 830 задачам. Из них 64% - это исправление багов и улучшение безопасности, а остальные 36% - это внедрение нового функционала.

Во-вторых, сразу видно когда, кто и как это все вносил. Все это делалось с 19 октября 2017го по сегодняшний момент, видно номера задач, их можно открыть и проанализировать, просмотреть связанный с изменением код.

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

Но это все небольшие фиксы. С глобальными версиями все обстоит еще хуже. Битрикс релизит новую версию продукта раз в год, и раз в полгода выпускает чуть меньшие по объему релизы. Процесс версионирования и поддержки версий работает непонятно каким образом. По факту, если обратиться в техподдержку, то они обязательно попросят обновить продукт до последней актуальной версии, но в некоторых случаях это может быть невозможно.

В Symfony же процесс поддержки обновлений разных версий строго зафиксирован. Есть версии с коротким и длинным периодами поддержки. Вся информация представлена на странице официального сайта.

Кроме этого, весь код Symfony покрыт автоматическими тестами. Большинство сторонних решений также покрыто автотестами. Любой разработчик может эти тесты запустить и проверить корректность работы системы. В Битриксе же про автотесты ничего не знают. Они конечно там есть, но они проверяют совсем не то, что стоило бы.

Автоматизация и процесс разработки

Я уже говорил чуть выше о том, что процесс разработки с использованием современных стандартов под Битрикс - это не сахар. Тут попробую раскрыть эту тему чуть более детально.

Современные проекты имеют склонность к высокому уровню автоматизации различных процессов - автотестирование, авторазвертывание, автобекапирование и т.д. Если очень грубо, то разработчик сразу же после внесения изменений в код может набрать одну команду (или нажать кнопку), которая автоматически отправит весь этот код на «тестовый» сервер, там проведет все автоматические тесты, после прохождения которых код будет залит на «боевой сервер» с выполнением предварительного бекапирования и возможностью легкого отката в случае неудачи.

Так вот с Битриксом построить такую систему - очень дорого. Это дорого, потому что Битрикс так устроен By Design, не продумано это от слова совсем.

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

Безопасность

Битрикс всегда славился безопасностью своей CMS. Поговаривают, что это одна из самых безопасных CMS систем на российском рынке, и это похоже на правду. Однако есть один нюанс - разработчики. Битрикс очень слабо контролирует код, написанный разработчиками. А исходя из того, что разработчики под битрикс у нас в стране довольно слабые, то они запросто могут написать много небезопасного кода. Кроме этого битрикс распространяет собственные вспомогательные инструменты (например, скрипт restore.php для восстановления дампа), которые написаны на коленке, и чаще всего причиной взлома того или иного продукта является один из этих инструментов.

В Symfony подход к безопасности - маниакальный. Платформа всячески сопротивляется небезопасному коду, и просто не дает шанса написать небезопасный код. Конечно, «обезьяна с гранатой» все равно может все испортить, но вероятность этого крайне мала.

Документация и сообщество

Документация на 1С-Битрикс довольно объемна, она содержит много информации, которая структурирована по разделам. Доступны текстовые и видео-курсы, блоги разработчиков, форумы с сообществом. Есть документация на разные части платформы, API, компоненты, административный раздел. Вроде бы, информации достаточно много. Однако все это настолько плохо и неудобно структурировано, что искать информацию очень сложно, не говоря уже об отслеживании изменений, которое попросту невозможно.

К слову сказать, несмотря на обилие документации, она во многих местах дублируется, а также не содержит информации и о половине возможностей CMS, на что очень часто жалуются разработчики.

В Symfony же документация устроена довольно лаконично, имеет версионность, ведутся блоги с информацией об обновлениях. Сообщество строится вокруг кода, который открыт для внесения изменений - любой разработчик на планете может внести свой вклад в разработку Symfony. Документация отвечает на 99% возникающих по Symfony вопросов.

Следование мировым трендам

РФ является пока отстающей по части своего вклада в веб-разработку на php, хотя есть отдельные компании и личности, которые очень многое делают для этого. Разработчики Symfony - одни из лидеров в этом плане. На них ориентируются многие, они задают стандарты, они реализовывают популярные инструменты разработчиков, они их поддерживают и развивают, строят сообщества вокруг них. Symfony на 100% мировой продукт, т.к. отвечает всем критериям качественного продукта в современном мире php.

Битрикс, увы, здесь тотальный аутсайдер. Он не вносит никакого вклада в opensource, является рассадником устаревших подходов, плохих примеров кода и единственной его целью является нажива, а качество у него на последнем месте среди приоритетов.

Достоинства Битрикса перед Symfony

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

Благодаря своей заточенности под РФ, в битриксе есть готовые решения, специфичные для российского бизнеса. Это и интеграции с российскими платежными системами, логистическими службами, учетными системами, соответствие российским федеральным законам. В Symfony этого ничего нет. ~~Но и ничего сверхсложного в реализации подобного функционала для опытного разработчика тоже нет. ~~

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

Минусы Symfony перед Битриксом

Хотелось бы сказать, что их нет, но один все же есть. Правда, он имеет значение только в том случае, если в команде нет разработчика.

Битрикс можно «пощупать» в демо-версии. Пощупать голый Symfony невозможно, т.к. под каждый проект собирается собственная сборка. Но можно пощупать какие-то готовые решения на основе Symfony, взять тот же магазин Sylius - вот.