Продолжаем знакомить вас с гостями Infostart Event 2022 Saint Petersburg. Редакция Инфостарта взяла интервью у ведущего программиста BCS FinTech Сергея Голованова.
Он поделился опытом внедрения автоматических тестов у себя в компании, призвал 1С-ников постоянно развиваться, учитывать опыт других стеков программирования, заботиться о сложности алгоритмов и использовать паттерны проектирования.
Который раз вы на конференции? Какие у вас впечатления?
На конференции я второй раз. Год назад выступал в Москве, сейчас приехал в Питер. И между этими конференциями в феврале был с докладом на онлайн-митапе Инфостарта.
Впечатления? Честно говоря, я в восторге. Здесь отлично: тепло, красиво, есть где погулять, на что посмотреть. И конференция хорошо организована, и питание отличное, и номер бесподобный, с видом на Аврору. Я очень счастлив, что я здесь.
Отдельная радость – можно снова увидеть людей, с которыми год назад разговаривал или когда-то раньше работал вместе. Мы увиделись, пообщались – это очень вдохновляет.
А доклады, секции – что вам понравилось?
Хотя и говорят, что доклады – это дополнение к вечеринке, но это, конечно, основное, ради чего все организовано.
И польза от докладов есть несомненная. От мелочей по настройке конфигуратора, которые я узнал из доклада Виталия Онянова, хотя 20 лет в профессии. Вплоть до каких-то роботизированных систем, которые были разработаны и управляются 1С – я про них даже и не слышал раньше. Очень много полезного вынес.
Вас интересуют именно доклады для разработчиков?
Да, я технарь. Меня несколько раз пытались организовать «давай ты что-нибудь возглавишь». Но это точно не мое. Я не менеджер и не управленец, мне интересно работать с техникой, а не с людьми.
Тем не менее у вас доклад как раз о преодолении сопротивления людей, о том, как вы «снизу вверх» пытались внедрить DevOps у себя в компании. Вы считаете, что применение этих технологий необходимо для любого программиста, даже работающего в одиночку? Или наоборот, это важно, чтобы организовать коллектив, чтобы все работали по единым правилам?
Изначально, конечно, все это затевалось мной чисто для себя. Я нашел технологии, которые снимают с меня всю рутину. Мне в них тепло и комфортно. Рядом появились люди, которые на это смотрели, вдохновлялись, что-то перенимали, и через общий коворкинг идея «автоматизируй это» потихоньку начала распространяться.
Примерно так это начиналось. Причем, инициатором был не я, а другой человек, который у нас работал. Он пришел в 1С из Ruby. И от него был очень большой заряд энергии на то, чтобы использовать автоматизацию – не заниматься ерундой, а заниматься только тем, чем программист и должен заниматься – думать.
Человек должен думать, а машина должна работать. Но часто почему-то происходит наоборот: люди работают и ждут, пока машина думает. Должно быть по-другому. Даже если ты работаешь один.
Но в большой компании от новых технологий есть совсем другая польза – они дают общий стандарт качества разработки.
До того как я пришел в БКС, я работал в очень крупной производственной компании. Там в какой-то момент объявили мораторий на изменения, потому что любая доработка в 1С или на сайте просто обрушивала все – из-за огромного количества технического долга мы просто не могли вносить изменения в систему.
И когда я увидел в БКС похожие симптомы, меня это достаточно сильно зацепило. Захотелось уберечь, объяснить, помочь. Но внезапно я столкнулся с тем, что рассказывать людям о том, что у них всё плохо – непродуктивно. Люди по 5-10 лет работают в компании, у них все хорошо. И было сложно «достучаться» – у меня на тот момент не было ни позиции, ни авторитета, ничего. Я был новеньким. Который пытался рассказывать, что «всё идёт не туда».
В этот момент мне очень помог Андрей Макаров из Neti. На московской конференции Infostart Event мы с ним разговорились, и он мне посоветовал почитать книгу «Наш айсберг тает». Эта книжка перевернула мое сознание и объяснила, как донести все эти вещи до начальства.
И сейчас уже начальство осознало необходимость всех этих изменений, новых технологий, позволяющих снизить, обнулить, а затем и повернуть вспять тот поток техдолга, который льется в систему. Получилось, что кроме того, что мы «снизу» идем с этими технологиями, есть начальство, которое уже «сверху» подключает административный ресурс и инициирует изменения. Всё-таки, как ни старайся, но только начальство может по-настоящему трансформировать компанию.
А для нашей компании переход на гит, использование автотестов, работа с техдолгом – это по-настоящему тектонические изменения.
БКС – огромная компания, 5 тысяч человек. Только в нашем управлении – около сотни 1С-ников, не говоря уже про соседние стеки, команды. В то, что удастся привнести новые технологии в такой большой коллектив, верилось с большим трудом. Но выглядит так, что всё получается. Что не может не радовать.
Именно вы были инициатором этих изменений?
Начинал не я, но, стоя на плечах гигантов, я довел это до какого-то обозримого результата, который можно было показать начальству – написал на ванскрипте наш CI.
После того как CI начал работать (а сейчас он уже вырос в полноценный CI/CD), как-то сам по себе запустился процесс трансформации мышления программистов в сторону написания автотестов.
И сейчас, через два года всей этой борьбы, отрицания, гнева, торга, депрессии и таки принятия, процесс, пусть со скрипом, но пришел «в массы». В начале этого года я себя уже чувствовал достаточно свободно. Процесс будет идти дальше, он от меня уже не зависит. Это уже реальность, которая живет своей жизнью.
Все коллеги это приняли и применяют?
Многие, но пока еще не все. Хотя сейчас у нас уже работает административный ресурс – начальство «поддавливает» тех, кто не принял.
Например, если на боевой базе проявился баг, разработчик обязан написать на него автотест. Вот такая дополнительная мотивация учиться писать автотесты.
Конечно, когда приходится что-то делать через силу – это такой себе мотив, они это наказание просто как бы «отбывают» и через какое-то время опять всё забывают. Но потом будет легче вспомнить то, что уже когда-то делал. А затем, глядишь, и дойдет, в чем прелесть автотестов, и появится уже внутренний мотив. Ну и, конечно же, если кто-то приходит, спрашивает – мы всегда стараемся помогать, объяснять, вплоть до «расскажи свою задачу, давай вместе напишем на нее автотест».
И, несмотря на то, что пока еще есть люди, которые активно сопротивляются, все больше и больше разработчиков начинают понимать необходимость тестирования. Они уже с горящими глазами сами прибегают ко мне и рассказывают: «Хорошо, что мы в последний момент решили написать тест. Сразу поймали два бага. А ведь мы бы это внедрили!»
Люди сами понимают, что это важно, рассказывают об этом и распространяют эту информацию внутри департамента. Идея вирусится, как в социальной сети.
Сейчас уже, если кто-то язвит по поводу тестов в корпоративном чате, я молчу, не реагирую на это. Теперь уже другие тимлиды, разработчики объясняют таким «мистерам Нет-нет», в чем они не правы.
Внедрение этих методик держится на самомотивации? Или есть какая-то мотивация со стороны начальства?
Положительной мотивации от начальства нет. У нас была инициативная команда, которая хотела сделать геймификацию всех этих вещей, какие-то ачивки назначать людям. Но не взлетело.
Зато есть административный ресурс, который используется как «морковка сзади» и догоняет тех, кто не хочет самомотивироваться.
Вы считаете, что тестирование изменений и версионный контроль – это базовые методики, которым нужно обучаться на старте? Только с этим можно пускать в разработку?
У Алексея Лустина есть целый цикл небольших видео, где он рассказывает, как развивается 1С-ник, в отличие от «нормального» программиста. И там показано, что в мире 1С это развитие происходит наоборот.
Программист на обычном языке достигает понимания предметной области, когда он даже не просто сеньор, а уже гуру. Только когда человек уже полностью знает весь свой язык программирования, он начинает потихоньку достигать предметной области и понимать, что он делал все эти годы.
А у 1С-ников предметная область с самого начала – мы сразу знаем, что мы автоматизируем.
Когда молодой человек приходит в телеграм-чат «обычных» разработчиков и задает им вопрос: «Пацаны, я хочу стать программистом. Что мне изучать?» Ему сразу говорят: «Изучай Git, паттерны программирования, алгоритмы. Выбери какой-нибудь язык – например, Kotlin. И будешь программистом».
Для них Git – это основа, без которой просто нельзя быть программистом. А у 1С-ников наоборот – когда мы приходим в профессию, мы сразу предметники. А представление о программировании мы получаем постепенно по мере развития, когда становимся уже гуру с 20-летним стажем. Только тогда возникает желание почитать про шаблоны проектирования систем, теорию алгоритмов, оценку их сложности – это 1С-ник начинает постигать уже только на каком-то серьезном уровне своего развития.
Поэтому неправильно говорить, что 1С-нику сразу нужно сюда. Но если он с этого начнет и будет знать эту базу, будет отлично.
Я очень надеюсь, что эти «чаши весов» когда-то все-таки соединятся, и уже никто не будет разделять программистов на 1С-ников и «нормальных». 1С-ники и другие программисты должны в конце концов понять друг друга.
1С-ники осознают и смогут перенять себе весь опыт, который удалось накопить за 50 лет развития «большого» программирования.
А программистам на других языках пора бы научиться сразу понимать суть бизнес-задачи, которую они решают, а не просто делать код по ТЗ, не задумываясь, что будет в результате и где он будет использоваться.
Вы на докладе рассказывали, что из-за обычных форм не используете EDT, а выгружаете в Git вручную. Но вы бы хотели версионировать код бесшовно, перевести разработку в EDT?
Я EDT пощупал – сделал на нем пару проектов, разобрался, как работать, и мне не понравилось.
В сети гораздо больше негативных отзывов о EDT, чем позитивных. Самое странное – очень многие люди, которые используют EDT, настаивают на том, что нельзя использовать встроенную в EDT интеграцию с Git. Нужны сторонние Git-клиенты.
И тут вопрос – если все равно использовать сторонний Git-клиент, какая разница, откуда выгружать? Т.е. и в ЕДТ нет нормальной бесшовной интеграции с гитом. Да, в EDT есть свои удобства: он больше похож на современное IDE, многие вещи удобнее, можно Unit-тесты запускать кнопкой, в конце концов. Но всё равно он какой-то… странный, что ли.
Если компания 1С хотя бы разрешит как-то расширить конфигуратор для бесшовной интеграции с Git, это будет отлично. Потому что армия программистов в конфигураторе, насколько я знаю, на порядки больше тех, кто пытается как-то работать с EDT.
Я работаю в конфигураторе, но при этом уже четыре года я все храню в Git и не чувствую никакого дискомфорта нажать кнопку «Выгрузить конфигурацию в файлы».
Если выгружать только изменения, они выгружаются за секунду, причем – неважно, какая конфигурация.
Да, первая выгрузка какой-нибудь ERP в 1.5 Гб займет время. И загрузка в конфигурацию потом тоже займет время. Но с EDT она займет столько же времени – тут ничего не меняется.
Но вам же нужно не просто нажать «Выгрузить конфигурацию в файлы», вам нужно потом перейти в консоль, сделать коммит, отправить все это на сервер и дождаться когда изменения прогрузятся.
Мне это дает контроль. Я поработал в конфигураторе, выгрузил изменения, у меня выгрузились, например, три модуля. Если я хочу просто все закоммитить, я набираю алиас для команды «Закоммитить все». Это занимает несколько секунд – вообще не напрягает.
При этом у меня есть возможность добавить в стейдж только один модуль, отдельным коммитом его закоммитить, написать, какие изменения в нем были.
Это как раз одна из причин, почему люди не переходят на Git, потому что для этого требуются даже не компетенции, а уровень осознанности разработчика. Потому что нужно понимать, что ты делаешь. Нужно понимать, как 1С это хранит, как она это выгружает, и как ты это хочешь закоммитить, чтобы смысл твоих изменений был понятен кому-то, кто будет их просматривать позже.
Например, лучше разбить изменения в разных модулях по коммитам, чтобы потом было удобнее делать код-ревью – смотреть изменения по каждому коммиту и оставлять там предметные замечания.
Работа с Git заставляет человека, во-первых, писать небольшие функции, а во-вторых, понимать, что ты работаешь в коллаборации с другими людьми.
Т.е. эти практики сплотили и дисциплинировали людей?
И да, и нет. Смотря, как эти практики внедрять. Был эпизод, когда тот рубист, который принес эту культуру к нам в компанию, едва не подрался физически с человеком, не желающим всему этому следовать.
Потому что если программисту, который 20 лет в профессии, сказать: «Ты пишешь плохой код», он бросится в драку. Но если привносить эти изменения через «а вот у нас тут новые инструменты подъехали», подключить в процесс разработки SonarQube и GitLab – возникает интересный эффект. На гитлабе при просмотре изменений по модулям нет разделения на функции. Там, если ты написал полотнище на 9 тысяч строк, тебе самому будет неудобно. Удобнее смотреть маленькие функции. И люди сами начинают писать код по-другому. Просто потому, что им самим так удобнее.
SonarQube – почти «бескровный» способ заставить людей соблюдать стандарты оформления кода от фирмы «1С». Потому что ему, бездушной железяке, ты можешь сказать «а я привык так писать и пробелы не ставить после запятых», но ему будет всё равно. И через это да, людям приходится дисциплинироваться и соблюдать стандарты. Без рукоприкладства – бить-то некого.
Поэтому технологии – это один из способов убрать конфликты. Нельзя просто прийти и сказать программистам: «Пишите по-другому, вы все делаете неправильно». Так конфронтация только обострится – они просто плюнут на тебя и не будут тебя слушать.
Но привнесение технологий меняет то, как люди мыслят, и то, как они программируют. Оно это делает бесконфликтно. И да, новые технологии объединяют.
А какие конкретно технологии и инструменты вы считаете перспективными в разработке на 1С?
Сейчас идет тренд на уравновешивание компетенций для программистов 1С и других языков.
Важно, чтобы 1С-ники стали интересоваться программированием за пределами нашего желто-красного мира.
В 1С нужны приемы из «настоящего» программирования, потому что задачи усложняются, нам нужно учитывать и сложность алгоритмов, использовать какие-то паттерны проектирования, придумывать какие-то интерфейсы.
С интерфейсами в 1С, конечно, сложно, приходится как-то выкручиваться. Например, можно у нескольких объектов создать один и тот же метод, потом обернуть это в фабрику и вызывать универсальным образом.
Все эти вещи приходят к 1С-никам из большого программирования. 1С-никам придется все это изучить, придется всем этим заняться. И это хорошо.
А как вы относитесь к новым инструментам от 1С – например, к 1С:Элементу?
Я его не видел, не могу про него ничего сказать.
Но я могу только поприветствовать то, что в инструментах 1С появляется некая модульность. Я юниксоид со стажем, и UNIX way как декомпозиция любой сложности на какие-то простые вещи – на мой взгляд, единственная правильная стратегия, особенно в наш сложный век.
Если можно будет делать какие-то отдельные элементы, которые живут отдельно, самостоятельно, если между компонентами не будет жестких связей, и при этом можно будет собирать конфигурацию из отдельных элементов – это путь явно в правильном направлении. Если 1С это сделает – это будет отлично.
Но что там – я пока не видел.
Какие у вас есть пожелания к участникам конференции и сообщества?
Участникам конференции я даже не знаю, чего желать. Здесь просто видишь у людей горящие глаза. Это потрясающе. То, как они реагируют на доклады, какие вопросы задают, как себя ведут. Сама атмосфера здесь – мне нечего им пожелать.
А просто программистам я очень желаю получать удовольствие от новых знаний, чтобы это не было внапряг, чтобы не было каких-то отторжений.
Чтобы, когда к тебе приходят и говорят: «Смотри, новый инструмент», ты радовался: «Круто, давай изучим!» А не так, что: «Не, мне ничего не надо. Зачем ты вообще ко мне лезешь? У меня и так все нормально».
Когда я с таким сталкиваюсь, у меня просто непонимание. Как можно? Ты – программист, для тебя должно быть естественно изучать что-то новое.
Тебе работа твоего мозга должна приносить дофамин, серотонин и вот это вот все. Для программиста естественно стремление к новым знаниям, к новым технологиям. Изучать, получать от этого радость в жизни. А не закрываться и не вести себя так, словно тебя заставляют кизяк разгружать.
Вы считаете, что Инфостарт помогает познавать что-то новое?
Однозначно! Я считаю, что Инфостарт – это флагман всех этих изменений. Это как раз площадка, где все эти люди с горящими глазами собираются, обмениваются опытом, поджигают друг друга, вдохновляют, помогают.
Когда мы с Андреем Макаровым на вечеринке 5-7 минут поговорили, и он мне рассказал про книгу «Наш айсберг тает», это мне очень помогло. Произвело огромный переворот во мне и, наверное, даже немного в компании, где я работаю.
Так что Инфостарт – это отлично. Всем советую сюда приехать и не уезжать.