Крик души 1С-ника (в разрезе, масштаб 1:1)

d69be2a730ebca7c376762443e8ebda8.jpg

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

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

Под катом правильные наезды на 1С и разбор неправильных наездов на 1С. Критика должна быть хорошей, иначе ее уныло читать. Давайте разберем (очередной) крик души 1С-ника по пунктам, а заодно, раз уж сей крик основан на моей статье — разберем и мою статью с точки зрения автора. 

Добро пожаловать под кат. Там много сарказма, иронии, обид на 1С, а главное — трезвые мысли насчет этой системы с минимумом эмоций.

Однажды, не так чтобы давно, но кажется, что в прошлой жизни я написал статью 1С — Добро и зло. Расстановка точек в холиварах вокруг 1С где, как мне казалось, подробно рассказал: что от нее стоит ждать, а чего не стоит, зачем она нужна, а зачем не нужна, где она плоха, а где — незаменима. Я настоятельно рекомендую вам ее прочитать, а потом вернуться сюда. Как бы то ни было, но время идет, а скроллить до 2019 года в наше время неприлично, поэтому крики души 1Сников время от времени появляются, и опять (ну что ты будешь делать?!) идут по проторенной дорожке, рассказывая нам что на 1С нельзя написать «все что угодно». Ну да, вы правы друзья, на ASP.NET тоже не пишут игры для плейстешен, но никто же не ругает за это ASP.NET.

Ум 1С-ника по непонятной мне причине удивительно «зашорен». Он почему-то считает, что 1С должна уметь все, потому что… потому что… ну Java же умеет все! Значит и 1С должна!

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

Приступим к разговору

Давайте все-таки про мою статью. Вот она в оригинале (https://infostart.ru/1c/articles/1735489/). Дело в том, что это даже не статья, а текстовый транскрипт моего выступления на конференции. И поскольку это устное выступление, его формат и его смысл отличается от статьи. Публичные выступления современных на ИТ-конференциях это не доклад на съезде КПСС, это развлечение с элементами обучения. Именно так. Интересные истории, сме…кхм-кхм…ёчки, мемасики и что-то новое для аудитории, но не претендующее на математическую строгость. Это выступление. Не статья. Наверное, отсюда и беды этого материала и его жесткая неприязнь. Как так, я посмел сказать, что в 1С не так и плохо, преувеличил одно и приукрасил другое! Во-первых, не так уж преувеличил и не так уж преукрасил. Во-вторых, это выступление задумывалось провокационным именно для того, чтобы встряхнуть болото мнений. В-третьих, оно ведется с позиции enterprise-архитектора, а не кодера в IDE. И как архитектор, я волен (или правильнее сказать «вынужден») оценивать что внедрять, как внедрять, зачем, и главное — в какие сроки и за какой бюджет. Именно поэтому я начинаю с тезиса о том, что «вообще пофигу на чем это написано». Ну правда, предприятию вообще пофигу, неважно что о себе думают важные программисты, их мнение — десятое. Предприятию важно насколько хорошо это помогает решать задачи предприятия и сколько это стоит.

Всё. Дальше уже начинаются «исторические и политические причины», которые вторичны по отношению к главным. Например:

  • А вот у нас все на ПХП, поэтому новое будем делать на ПХП, у нас есть разработчики и компетенции. 

  • А вот мы не в ладах с отделом X, который умеет писать софт на M поэтому будем делать свое решение, но компетенции есть только на N

Каждая организация создает софт, который отражает её организационную структуру ©. С этим нельзя спорить, это просто житейская мудрость, как зеленая трава и синее небо.

Тем не менее, @rabid_otter пишет:

В начале статьи Андрей представляет бизнесменов как недальновидных людей, которые ничего не хотят понимать, и им приходится «терпеть» чересчур заумных IT-шников. Почему именно программисты? То же самое можно сказать про отношение к любым высококвалифицированным специалистам. Обычно такое поведение присуще ларечникам, которым IT не нужен, или когда автоматизация делается ради галочки, без реальной необходимости.

Господи, нет. В начале статьи я представляю бизнесменов, как людей которые умеют считать деньги и ценят свое время. И им — все равно на каком языке программирования будет написана система, которая ускорит производительность их предприятия в тыщу раз и принесет мильоны. Им важен результат, а не «шашечки».

Кстати, одну минутку… А занятный ник rabid_otter. Это подражание мне? Приятно. Подражание есть высшая степень восхищения, спасибо.

В статье Андрея однобокий взгляд на вещи, что-то из 90-х — вокруг ларечники, и программист всегда виноват.

Я давно работаю в «кровавом энтерпрайзе» и могу себе позволить некие гиперболы, особенно если это 30-минутный формат выступления, а не диссертация на тему «Полная классификация недостатков работы в айти в промежутке 2000–2020 гг. XXI века в России». Если уж разжевывать собственные тезисы, то имел в виду я вот что:

  • В факапах проекта все стараются размыть вину и обвинить смежников, чтобы не так больно ругали

  • Айти выполняет огромную часть большинства бизнес-проектов, а значит несет большую часть ответственности

  • Айти тоже факапит

  • Айти будут обвинять, когда отдел продаж профакапит запуск очередного бизнес-продукта, даже если айти виновато косвенно и из-за внешних причин

Где тут 1С? А нигде, так будет независимо от языка программирования.

утверждается, что если уйти из 1С в другой стек, ничего не поменяется, всегда будут авралы и не будет никакого удовольствия.

Да, так и утверждается. Только не «не будет никакого удовольствия», а «может не быть никакого удовольствия». Вероятность, что вы наткнетесь на работу мечты и в предприятии будет все слажено, четко, в срок и вообще кайф — существует. Но все-таки, мнимые пони, какающие радугой это не тот критерий, на который стоит опираться при смене работы. Я за циничный прагматизм.

Что бы мне ни говорили 1С-программисты, большая часть их задач лежит в этом заколдованном круге кусочков большой конфигурации. Это либо отчеты, призванные показать руководителю все в одном месте, либо обработки, призванные упростить какую-то хозяйственную операцию, либо отдельная подсистема, чтобы автоматизировать «уникальный бизнес-процесс», либо просто корректировка бизнес-процессов предприятия так, чтобы они ложились в типовую конфигурацию. Как это может не надоесть?

Не повезло с работой, бывает. В Связном мы, например, на 1С сделали даже DWH. А также логистическую систему, которая диспетчеризует заказы интернет-магазинов и логику их развоза вообще без участия человека. Там даже интерфейса нет никакого, только для админа — иногда кнопочку нажать, если что.

Перейдем к технической критике

Тут самое вкусное. Пару слов на входе: попадание юного 1С-ника в мир большого Айти сродни первому попаданию человека в другой климатический пояс. Со мной так было в тропиках: «О, пальмы! О, кокосы прям на дорогу падают! О, а че, тут и змеи ползают? А это что, тоже есть можно?»

Здесь то же самое: О, я могу переслать байты в TCP-сокет! О, я могу парсить DTO-json на входе http-метода и перекладывать поля в прикладной объект!

Но секрет в том, что в 1С просто это уже сделано за вас. Это коробочная возможность, позволяющая как раз не делать перекладывание полей JSON в прикладные объекты. Преимущество, а не недостаток. Экономия времени, time-to-market, стоимость, эффективность и все то, что серые унылые ларечники требуют от лучезарных программистов.

На 1С не сделать исполняемый файл без зависимостей от вендора. Если та же условная Java дает на выбор целую кучу реализаций JVM, даже GraalVM Native Image, то 1С не дает ничего. Никак не сделать что-то по-настоящему низкоуровневое. Не подключиться к системе, работающей на транспортном уровне TCP/IP без внешних компонент.

На ASP.NET нельзя написать игру для плейстейшен. Опять путаем фреймворк и языки программирования. 1С это фреймворк. Для бизнес приложений. Это не JVM, это Salesforce или SAP (сейчас я не про сравнение возможностей, а про классификацию) Можно на SAP послать байты в TCP-сокет? Даже если и да, этого никто не делает. САПовцы любят грузить из Excel ну или получать по SOAP. JSON в SAP? Шиш вам, пишите прослойку на чем-нибудь другом, или купите нашу шину за 100500 миллионов. САП это бизнес система, какого хрена вы в нее суете интеграционные задачи!

Не знал про такой подход в конкурирующей системе, дорогой 1С-ник? А ведь он выверен лучшими немецкими методологами. Там можно делать только то, что можно, а что нельзя (например, нарисовать нечто красивое на экране) то — нельзя. Я тут несколько утрирую, но общий смысл именно такой. Архитекторы SAP не позволят протащить в SAP что-то помимо бизнес-функциональности. Для интеграций есть шина, а для отчетов BI

Резюмируя: не надо требовать от бизнес фреймворка того, чего в нем нет. Айти, оно больше чем только 1С, вылези из скорлупы и придумай, как решить потребность бизнеса, а не запихивай это в один фреймворк! Не умеешь посмотреть вокруг и решить задачу? Ну тогда твой удел »отчеты, призванные показать руководителю все в одном месте» сорян, ты больше ни на что не годен, ничего личного. И 1С тут не при чем.

gRPC поддерживается уже в 1С? Что-то мне подсказывает, что нет. С веб-сокетами из 1С уже можно работать без внешних компонент?

Поддерживается. Есть внешние компоненты для этого. Ах! Внешние компоненты! Но это же внешние, их нет в 1С!!! Да, это сторонняя библиотека к фреймворку. Давно ли в Java запретили сторонние библиотеки и требуют, чтобы gRPC шла в составе JDK? Послушайте, ведь сама попытка требовать таковое это бред. То же и с внешними компонентами 1С. Это сторонняя библиотека, надо — подключай и пользуйся, в чем проблема?  

«Нет, хочу встроенное в 1С, потому что хочу, ааааа, мамааа, купи мароженоееее!»

Развернуть 1С в docker-контейнере? А что там с лицензиями?

Вы не поверите, но…https://github.com/firstBitMarksistskaya/onec-docker Хотя, вы попробуйте просто предложить кому-то на предприятии запустить SAP в докере. Если вас немедленно не спишут в дурку, то по крайней мере, высмеют.

SAP это система не того класса, чтобы в контейнере работать. К ней нужны bare-metal сервера от определенных производителей за дорого. И никто не удивляется. А когда 1С не работает в докере внутри виртуалки с лимитом в 2Гб начинается негатив. Почему-то выпросить у начальства для 1С bare-metal сервер, это организационная эпопея с долгой сдачей анализов. А SAP вам даже не продадут, если вы железку не имеете для него.

С веб-сокетами из 1С уже можно работать без внешних компонент? Как сильно кастомизировать внешний вид UI чисто на 1С? Парсер HTML с поддержкой динамических страниц? А как завести Chromedriver или Selenium из 1С? Нейронные сети, ML и это вот все. PyTorch, Keras из коробки уже завезли

Опять все в одну кучу. Где там у нас PyTorch в составе JDK? Сама формулировка данного вопроса выглядит, как чушь. Однако, если таким образом критикуешь 1С, то вроде она превращается в критику по делу, не так ли? Ну и мое любимое:

Если нужен свой веб-клиент, его придется писать на Javascript.

Сюрприз-сюрприз, но только это наоборот  в 1С уже есть веб-клиент, а в «настоящем айти» его всегда пишут отдельно. Т.е. 1С-ник жалуется, что ему уже дали клиент и радуется, что придется писать свой после перехода в Java. С точки зрения бизнеса все выглядит иначе: «придется потратиться еще и на фронтендеров». Кстати, где кастомизация веб-интерфейса на Питоне? Ах, веб-интерфейс же на Javascript пишут, стало быть, питон говно.

Как долго ждать нормальной асинхронности (то, что в go называется горутинами, green threads на Java, корутинами в C#) на клиенте?

Вот это вообще не понял. Давно ли на клиенте стало можно писать на GO?

Про IDE

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

Конфигуратор 1С по нынешним меркам устарел, а новая IDE «EDT» хоть и встречается все чаще, но всенародной любви пока не снискала. Конфигуратор устарел. Он написан в 2002–2005 примерно и на тот момент он был на уровне Visual Studio 2003 даже круче. Но 1С это не Microsoft, компания не вывезла тенденций IDE-строительства в одиночку, бывает и такое. Другие приоритеты продукта. Если вы видели IDE от SAP, то Конфигуратором станете восхищаться, как венцом творения. У бизнес-платформ IDE не приоритет, к сожалению.

Существуют плагины к Конфигуратору. Их несколько и самый популярный это упоминаемый «бешеной выдрой» Снегопат. Только он упоминается вот так:

в каком-нибудь настоящем ЯП вы видели, чтобы костыли, которые улучшают IDE, продавали за деньги?

Вообще-то да. IDE и плагины к ним бывают платные. Resharper, например, это вообще практически обязательное платное дополнение, если вы пишете на C#. Без него Visual Studio «от вендора» лишь немного лучше чем Конфигуратор «от другого вендора». И он платный. Без решарпера жизнь в .NET это боль и страдания. Без Снегопата в 1С тоже. И тот и другой бустер для IDE — платные. Решарпер сколько то сотен баксов (не помню сколько) в год, Снегопат 2000 рублей навсегда. Но жаба не позволяет платить за хорошие инструменты даже себе любимому, понимаю.

А что по совместной разработке? Думаете, они просто взяли и стали использовать git? Ахаха, как бы не так!

Очередная многоходовочка от разработчиков платформы — они создали собственную self-hosted VCS, которую назвали «хранилище конфигураций».

Господи, дружище… ну нельзя же так… «хранилище конфигураций» создано тогда, когда на рынке властвовал «Visual Source Safe» и, возможно, начинал свои первые шаги в массы SVN, но ни какого GIT не существовало. Что значит «они не стали использовать git, а взяли свое». Свое взяли, потому что чужого на тот момент толком не было. А то, что впоследствии не успели интегрировать процесс разработки с «чужим» когда оно появилось? — вот это дельный повод для критики.

В 2018-м мне подвернулась вакансия, где нужно было писать нетиповые конфигурации. По сути, мое бегство от 1С началось уже тогда, я стал решать нетиповые, более технологичные задачи, но на знакомом мне стеке.

Вот, это хорошо и правильно — расширять кругозор в профессии. Так надо делать всегда, независимо от стека, в котором работаешь. Это называется профессиональный рост. Только ошибка здесь не в 1С, а в попытках натягивать ее на глобус.

И о душевном

К 1С-нику зачастую отношение как к обслуживающему персоналу, и не надо мне тут про «как себя поставишь». Даже если всех «приструнить», осадочек останется. Я знаю, я делал это.

В настоящем программировании меньше общения с пользователями твоего творения, на текущем месте работы его нет. В моем случае тезис Андрея про «ваши заказчики всегда будут вас раздражать» явно не к месту.

«Настоящих программистов» стараются не обижать — уютный офис, психолог, тет-а-тет с тимлидом раз в неделю, где меня спрашивают, хорошо ли мне. В 1С такого никогда не было и, думаю, не будет.

Психолог в офисе это хорошо, это выгодно отличает Java от платформы 1С. В МТС, где я работал, тоже было что-то похожее, HR рассказывал, но я не пользовался. И там я работал с 1С. Так что психологи есть в 1С, парни! Прямо в платформе:)

И про «отношение» все-таки пару слов. Отношение это не часть технологии. Просто почитайте отличную книжку «Не работайте с м*даками». Если к вам относятся плохо, то кроме как «как себя поставишь» сказать и нечего… Осадочек, ну да, осадочек останется, но лучше сразу не работать с м*даками.

Все это разнится с картиной мира Андрея, там у среднего программиста постоянная депрессия, он всегда уставший, злой и неудовлетворенный.

Интересно, где я говорю что-либо подобное? Два раза перечитал выступление, мало ли? Не нашел.

Тимлид моей команды, как раз «настоящий backend программист», у которого 10+ лет опыта. Он знает пару ЯП для backend разработки, знает про шаблоны проектирования, разбирается в тонкостях работы различных СУБД (в том числе нереляционных), знает про балансировку нагрузок, умеет пользоваться bash, git, CI/CD, Kubernetes и может сделать что-то простенькое на JS, React или Vue. Кроме того, у такого специалиста может быть более разносторонний опыт в архитектурном плане, а не только написание CRUD приложений для бизнеса.

Все ли из вышеперечисленного умеет средний 1С-программист с опытом 10+ лет? Может, кто-то и может, я — нет.

Ну я умею. Опыт в 1С 17+ лет. Ничего сверхестественного в пользовании bash, git и Kubernetes нет. Просто навык. Скорее, обязательный, чем выдающийся. Если ты окуклился в Конфигураторе, то виноват в этом не Борис Нуралиев, а лично ты, анон.

Как написано в книжке «Совершенный код» Стива Макконнелла, «Самые дорогостоящие ошибки — это ошибки проектирования». Мой опыт в программировании подтверждает этот тезис. Если другой ЯП дает возможность грамотно спроектировать иерархию классов / структур / зависимостей, почему бы этого не сделать сразу, чтобы потом не было мучительно больно?

Аааа, аааа, аааа, боже, аааа, прекратите, ааааа!!! Сразу спроектировать все хорошо!!! Аааа!!! Делайте хорошо, а плохо не делайте, спасибо.

Как раз 1С дает меньше шансов спроектировать плохо. Она не идеальна, но то, что проектируют в «кровавом энтерпрайзе» имея «полную свободу» — уж лучше тогда 1С, право слово. По крайней мере, в ней сложнее запихать бизнес-логику расчета скидок в класс парсинга входящего JSON от веб-клиента. Я такое видел, я знаю о чем говорю.

Если не думать об алгоритмической сложности или подкапотной работе с типами, например, можно на конкатенации большого объема строк ждать 8 часов (вместо 20 минут после оптимизации). Однажды я словил такую неприятную особенность 1С на продуктиве. Это было больно.

Если ты не понимаешь, как работает "Сумма заказа: " + Сумма + " рублей", но активно это пишешь, то тебе надо читать Спольски, причем даже если ты пишешь на Java. Там ведь не просто так существует StringBuilder. Ведь Джоел разжевывает эти вещи не для 1С-ников, он рассказывает это «настоящим» программистам. И 1С тут не при чем, учите матчасть.

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

О, слово-маркер. «заказные». Ну да, продался сотоне. Наконец-то обвинения в продажности, а то скучно было.

Я не пишу код, если не понимаю, чего нужно достичь в итоге. Мой опыт говорит, что когда автоматизируешь хаос, получаешь автоматизированный хаос. Как можно автоматизировать то, чего до конца не понимаешь? Кто в понимании Андрея «настоящий программист»? Сферическая макака в вакууме?  

Даже не знаю, чем провинились именно Java, .NET и PHP-программисты, что их выбрали в качестве козла отпущения в оригинальной статье.

Тут имела место всего-лишь гипербола. Если у вас на работе процессы поставлены правильно, я за вас рад. Они не всегда такие, даже чаще всего не такие, а я много где успел поработать в т.ч. в «крупняке». Довольно большой пласт «настоящих программистов» именно monkey-coders которые лепят говно по ТЗ. Грустно, но это так, с другой стороны, отрадно, что у @rabid_otter на работе все по-другому.

Я не написал «Процент говнокодеров в PHP не превышает 43.5% от общего числа программистов на рынке труда по состоянию на 2020 г», поскольку я и не писал диссертацию, я рассказывал о мифах про светлый Валинор, которые циркулируют в 1С-сообществе. Если это не было считано, ну окей, спишем на мои хреновые таланты рассказчика.

В ЯП, которые компилируются в машинный код, такая ошибка просто не пережила бы сборку проекта.

А в Javascript бы пережила, да еще как! Javascript же, как я понял считается за правильный язык, раз на нем пишут хорошие веб-клиенты?

В других «настоящих» ЯП для защиты от подобных ошибок есть модульные и интеграционные тесты, которые упадут в CI/CD pipeline при коммите.

Я может опять про прописные истины, но тесты есть не в языках программирования, а в командах разработки. Как и CI/CD. В моих командах 1С были и тесты и CI/CD

Недавно жадный вендор все-таки придумал кое-что для масштабирования — Дата акселератор. Правда, это было сделано в свойственной 1С манере, разделив функциональность на ПРОФ и КОРП лицензии. Двух зайцев сразу — придумали костыль и заодно потоптали людей, симпатизирующих платформе.

Ну тут чистая психология. «жадный», «потоптали». Софтверный бизнес пытается зарабатывать деньги на продаже софта! Какой ужас! Дата-акселератор это im-memory db которую 1С предлагает вместо других коммерческих in-memory db. Не вижу чего-либо постыдного в попытках занять долю рынка. То же и с 1С: Аналитикой. Если можно отобрать немного денег у Tableu, почему бы этого не сделать?

Нельзя же просто взять и сделать в платформе библиотеки для низкоуровневого взаимодействия на уровне TCP/IP с каким-нибудь существующим во взрослом программировании решением.

Зачем в бизнес-фреймворке делать TCP библиотеки? Ну вот зачем? Кому надо — бери внешнюю компоненту, там работы на два часа, благодаря туториалам от infactum. С каких пор применение сторонних библиотек считается табу? Отчего это вдруг, никак в толк не возьму…

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

Самое смешное, что на каждый недопоток или «фоновое задание» требуется лицензия. Шах и мат, 1С-ники!

Да, потоков и аналогов Futures/Tasks нету, иногда этого не хватает. Справедливо. А вот про лицензии это тупо ложное утверждение. «Фоновые задания» не потребляют лицензий.

Так вендор заботится о людях, которые покупают их продукты? Вкусно и точка! Кушайте, не обляпайтесь. <...> Так можно и с колен подняться. Остановитесь!

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

ORM в 1С — самый лучший

Да, так и есть. Только это даже не ORM, а сквозная система типов от модели, до интерфейса. Разработчик даже не знает в какой момент там заканчивается UI и начинается база данных, работает в единой системе понятий. Такого нет нигде. На клиенте JS со своими моделями, на сервере условная Java со своими моделями + нашлепками от ORM либо в тех же классах, либо в отдельном слое хранимых сущностей для ORM.

В 1С ORM фреймворк самый лучший, потому что единственно доступный. Для той же условной Java есть Hibernate, MyBatis, Sql2o. В Golang есть Beego, GORM. Каждый фреймворк можно подобрать для конкретной задачи. Если очень надо, то можно отказаться от ORM или писать Native SQL-запросы в том же Hibernate. А в 1С можно написать SQL-запрос для создания или изменения сущности? Конечно, нельзя, иначе неопытные однорукие программисты 1С сломают гениальные абстракции над табличками в виде регистров накопления, бухгалтерии, расчетов.

Если отказаться от эмоций, а рассуждать по конкретике, то я могу говорить только за Hibernate или Entity Framework (как Core, так и «Classic») Ну и Dapper еще, окей. Они хуже того, что предлагает 1С. Как минимум потому, что абстракции базы данных вынужденно протекают в прикладную модель. Либо эффективно работает ORM, либо красивая прикладная модель. Все сразу — только через усилия, которые требуют очень хорошего знания кишков конкретной ORM. Например, Entity Framework запросто превратит простой SELECT в «запрос в цикле на миллион итераций» при крошечном изменении условия в LINQ, и узнать про это до выкатки в продакшен можно только если правильно настроить фреймворк (по дефолту такое разрешено, а потом «ой, у нас все легло»)

1С не пытается замести под ковер язык SQL? Из того, что я вижу на форумах, 1С-программисты пару десятков лет просят вендора добавить функциональности, которая давно существует в обычном SQL. Так что вендор, скорее, боится разработчиков 1С, поэтому осторожно разрешает read-only операции, а то вдруг эти люди поверят в себя и попросят еще больше. Согласен, не надо так.

С самых первых курсов, с младых ногтей всех 1С-ников натаскивают на производительность запросов и их оптимизацию? Именно поэтому, придя в одну из обслуживаемых мною далее фирм, я увидел SQL запрос с 60 временными таблицами, который написал уволившийся 1С-программист. Хранить вспомогательные данные не нужно. Это усложняет систему.

Ну судя по компетенциям, которые демонстрируют критики 1С которые хотят от нее всего сразу, не могут пользоваться внешними компонентами и путают фреймворк с языком программирования — 1С правильно делает, что не разрешает копаться в базе данных грязными руками. Я-то как раз не согласен с 1С и да, надо бы разрешить более тонкое управление слоем доступа к данным, скажем только покупателям ПРОФ лицензии, у которых хайлоад и которым очень надо. Всем подряд — это только гранату обезьянам выдавать. Тот, кто не осилил bash не должен получать в руки чистый SQL. Профессиональный ценз, извините. Но 1С так не делает, да. Кажется, что зря.

Другие программисты не умеют строить модели данных и очень плохо проводят границы между доменами? Фи, а чего еще ожидать от 80% Java, .NET и PHP-программистов? Они без ТЗ, свитшота и смузи кринжуют, падают с моноколес, какое там IDE открыть. Остановите это безумие!

А еще они едят детей и получают $700k в минуту просто за то, что не спят на работе. Я говорил о наивном заблуждении, царящем в мире 1С, что в «настоящем айти» все капец умные, шарят за O-нотацию, докер и оптимизацию запросов. Это миф и о мифе я говорю.

Неверно и обратное, что поголовно все программисты .NET тупее 1С-ников. Я такого не говорил, а говорил что говнокодить можно где угодно и на чем угодно, а кроме того, именно так все и происходит в мире энтерпрайза, ибо сроки горят, бизнес-идея протухает, время-деньги, а вы тут архитектуры архитектурите. Происходит именно так, программист — исполнитель воли заказчика и получает деньги не за то, что он офигенный и классный, а за то, что обеспечивает предприятию более эффективное выполнение его функций. Никто не платит за код, платят за пользу, которую код приносит.

Если вместо кода можно было бы достичь того же результата посредством чтения Некрономикона — колдуны бы серьезно потеснили программистов на рынке труда и мало бы кто потом вспоминал, что «были тут такие программисты, помните?»

И да, мне как серверному программисту нужно десериализовать JSON. Опять этот ретроградный Меркурий все испортил и отменил в Spring Jackson ObjectMapper по умолчанию. Сижу и завидую 1С-программистам, им ведь в REST-сервисах не нужно десериализовывать тело запроса. Вернуться что ли обратно в 1С, как считаете?

Продолжаем страдать, дальше мне нужно превратить DTO в то, что ляжет в базу данных по одному полю. А что, переложить данные стало так сложно? При строгой типизации IDE знает о совпадающих полях и сама заполняет их, а я просто получаю удовольствие.

Как это нет функции «ЗаполнитьЗначенияСвойств»?! Хватит с меня этого вашего «настоящего программирования». Если говорить серьезно, то в Java, Golang и, скорее всего, в C# заполнение экземпляров типов с одинаковыми именами полей решается рефлексией. Но думаю, что это избыточная сложность — достаточно переложить одни поля в другие через горячую клавишу в IDE. Конечно, имеется в виду нормальная IDE, а не конфигуратор 1С.

Фишка в том, что в 1С просто не надо ничего из этого делать. То есть я говорил про эффективность с точки зрения бизнеса, а не с точки того, что интересно кодить разработчику. В 1С просто не стоит задача «замапить поля из JSON с помощью рефлексии или кнопки в IDE, написав для этого слой в архитектуре приложения, который обрабатывает нажатия кнопочек на фронте». Просто эта задача уже решена во фреймворке и ее не надо делать силами пары-тройки сеньоров на начальном этапе разработки. И да, Automapper в .NET — это костыль, а не классная штука, ибо искать потом, кто положит в маппинг расчет скидок, чтобы казнить виновника, это то еще удовольствие. Не каждому программисту нужно разрешать лазить в транспортный слой. Да, вроде бы несложная истина, но лазят ведь, гады, лазят. А потому что могут.

При большой нагрузке запись логов работала дольше бизнес-логики, и это со всеми оптимизациями! Какой это по счету шах и мат 1С-программистам? В общем, да, стали записывать в текстовые файлики на сервере! Ограничения во благо же.

Но. ведь логирование это и есть запись в текстовые файлики на сервере. Если один логгер не справлялся, взяли другой (написали свой). Обычное дело в «большом» мире, но почему-то крамола в 1С. У 1С плохой логгер? Возьми другой!

Кстати, «Журнал регистрации» это не лог, это аудит. Лог это «Технологический журнал» и он вовсе не тормозит, если, конечно, вы не выставили в нем уровень TRACE. А аудит да — в 1С хреновый, тут только признать и понегодовать. Но опять же, есть сторонние средства записи этого аудита в ClickHouse, например. На нашем Youtube-канале мы даже показываем, как это сделать. Летает как ракета!

Если с frontend на взрослых ЯП все довольно просто, то как разобраться в том обфусцированном ужасе на Javascript, который генерирует платформа для веб-клиента? А уж тем более что-то оптимизировать?

Ну так себе аргумент. А что, в большом IT-мире кто-то пытается разбираться в минифицированном JS? Сомневаюсь. И потом, договорились же, что веб-клиент 1С это второстепенное ненужное приложение и клиент надо писать с нуля самому на реакте.

Ведь в составе JDK нет веб-клиента, почему-то Oracle за это не ругает никто. В 1С вот есть из коробки веб-клиент, но не нравится если, сделай на реакте свой, как делают все в отрасли. А, дорого? Ну да, с учетом ценника на команду фронтендеров, для внутрянки, не как основной публичный сайт компании — уже отлично, функционально и сразу из коробки, не нужны смузи-джаваскриптеры за оверпрайс. Чудесно же!

Любой, кто платит деньги за автоматизацию, а не размышляет об абстрактных материях — думает именно так. И генерирует кеш для оплаты твоего смузи — тоже он и его бизнес идеи, а не твой прекрасный код, который эту идею воплощает. Это суровая реальность жизни, но когда-то надо и взрослеть.

Про аналитиков

Я утверждал, что у 1С-ника встроен аналитик по умолчанию, а в других экосистемах такого умолчания нет. Это не значит, что его нет совсем ни у кого, просто нет по умолчанию у каждого.

А разве в других стеках программирования очень плохие аналитики? В описываемом Андреем мире программисты на других языках не задают вопросов о задаче. Если мне дали непонятные требования, мои действия следующие: я надеваю повязку на лоб, включаю эпичную музыку фоном и начинаю узнавать у всех причастных, чего же они действительно хотели от моего скромного сервиса. Зачем что-то кодить, если придется выбрасывать после уточнения требований?

Это потому, друг мой, что Вы — бывший 1С-ник и у вас аналитик встроен по умолчанию. Так, как вы делают, к сожалению, не все.

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

© Habrahabr.ru