О внедрении инноваций в скучный процесс расчета заработной платы.
Продолжение серии заметок о моей карьере в ИТ:
- Предыстория: школа и университет
- Как я случайно получил работу в ИТ
- Ура! Я программист! Или история первого успеха
- Переход в профессиональную лигу
Взгляды этих котов, нацелившихся на шашлык, навевают воспоминания о бухгалтерах,
ждущих исправления ошибки, найденной за день до сдачи квартального.
Прошел примерно год с момента начала моей работы в ЦНИТ «Алькор». Я уже немного освоился на новом месте, стал напрямую общаться с бухгалтерами и даже научился их время от времени понимать. У меня постепенно сформировалась своя зона ответственности. Сложилось так, что в компании с двумя другими разработчиками я главным образом имел дело с модулем, который отвечал за расчет заработной платы.
Когда я начал работать в компании, зарплатный модуль был уже реализован для Windows и установлен у нескольких десятков клиентов. Но, как часто это бывает, постепенно выявилось множество мелких недостатков этой программы. А также возникло несколько интересных идей, в реализации которых были заинтересованны как клиенты, так и внедренцы.
В частности, требовалось полностью переделать систему конфигурирования расчета зарплаты, так как в текущей версии почти для каждого клиента нужно было вносить изменения в исходный код. Это сильно осложняло установку обновлений и приводило к тому, что у разных клиентов работали разные версии программы. Второй проблемой были отчеты, которые испокон веков были заточены под матричные принтеры. Время шло, все больше пользователей переходило на лазерники и требования к оформлению отчетов росли. В общем, решено было выпустить новую версию программы, параллельно продолжая поддержку старой версии для существующих клиентов.
Так сложилось, что за разработку новой версии стал отвечать именно я несмотря на небольшой опыт работы в компании. Главным образом это произошло потому, что другие разработчики, специализирующиеся на зарплатном модуле, отвечали за поддержку большинства уже существующих клиентов. Таким образом, у меня оставалось заметно больше времени для работы над новой версией. Возможно, сыграл роль и мой энтузиазм, мне всегда больше нравилось заниматься проектированием и писать код, чем улаживать мелкие проблемы пользователей.
Главным вызовом при разработке новой версии стало конфигурирование. Проблема состояла в том, что у наших клиентов существовало множество различных способов начисления зарплаты. Расчет налогов и сборов выглядел примерно одинаково у всех, однако, государство с завидной регулярностью преподносило сюрпризы, меняя законы. Механизм настройки расчетов, с одной стороны, должен был быть довольно гибким, чтобы удовлетворить всем требованиям, а с другой, простым и понятный бухгалтерам, чтобы они могли вносить в работу программы хотя бы простейшие изменения.
После достаточно долгих размышлений мне пришла в голову мысль, что для конфигурирования расчета зарплаты необходимо разработать специализированный язык программирования. Поначалу, эта идея совершенно не встретила понимания у коллег. Во-первых, мне потребовалось убедить их, что это вообще реализуемо за разумный срок. Во-вторых, сразу же встал ребром вопрос производительности вычислений, так как некоторые клиенты имели под тысячу сотрудников. В-третьих, были обоснованные сомнения, что бухгалтера захотят самостоятельно менять конфигурацию программы.
Дискуссии по поводу нового конфигуратора тянулись примерно две недели. Это был первый случай, когда мне потребовалось убеждать других разработчиков и руководство компании в полезности и выполнимости моих идей. Одно дело говорить с пользователями, которые частенько вообще не понимают, как работает их компьютер, а совсем другое — убеждать в чем-то довольно спорном коллег-программистов, за плечами у которых опыта в разработке было всего чуть-чуть меньше, чем мне лет. В общем, пришлось потрудиться, но оно определенно того стоило. Это принесло мне первый серьезный опыт преодоления сопротивления при внедрении инноваций и оказалось очень важным для моей дальнейшей карьеры.
К сожалению, даже очень хорошая идея, мало что стоит без реализации. И над этой самой реализацией пришлось изрядно потрудиться. Для выполнения расчетов зарплаты требовалось выполнять арифметические операции, вызывать стандартные функции и использовать условные операторы. Вдобавок нужно было обеспечить бухгалтеру возможность менять значения некоторых параметров вычислений, то есть необходимы были еще и переменные. Все это в комплексе вполне может рассматриваться как простенький предметно-ориентированный язык (DSL).
Итак, конфигурация расчета зарплаты состояла из набора инструкций, написанных на специальном языке. Это вполне устраивало нас как внедренцев, давая нужную гибкость, но абсолютно не годилось для бухгалтеров. Для них пришлось написать специальную программу-конфигуратор, с помощью которой пользователи могли редактировать формулы расчета, просто нажимая на кнопочки. Как показала практика, это была практически бесполезная работа. Бухгалтера упорно отказывались становиться программистами, не помог даже визуальный редактор. Таким образом, сомнения моих коллег в некоторой степени оправдались. Зато нас очень выручал модуль, который позволял пользователям менять параметры расчетов, такие как ставки налогов и сборов. Он немного напоминал обычную электронную таблицу и воспринимался бухгалтерами на ура.
После завершения разработки начались первые внедрения новой версии программы. Среди наших клиентов были в основном евпаторийские санатории и несколько хлебо и молокозаводов, разбросанных по всей Украине. Одно из первых серьезных внедрений было сделано на Запорожском хлебозаводе № 3, на котором на тот момент работало несколько сотен сотрудников. По результатам этого внедрения были сняты все вопросы по производительности, новая версия работала заметно быстрее старой.
Параллельно с расчетом зарплаты мне приходилось заниматься разработкой и внедрением других модулей. Это была как рутинная помощь коллегам в работе с другими программами, так и разработка специализированных решений для отдельных клиентов. Запомнилось несколько командировок на молокозавод в Шостку, для которого мы с моим тогдашним наставником реализовали модуль для работы с накладными на приемке сырья. Премия за ту работу выглядела в виде большого куска знаменитого в то время на Украине шостинского сыра :)
В общем, жизнь шла, как-то незаметно пролетело еще два года. Работа потихоньку стала скатываться в рутину. К тому же нарастало недовольство пусть и не плохой по местным меркам, но отнюдь не достаточной для нормальной жизни зарплатой. Определенно в жизни требовалось что-то менять. Об этих переменах и пойдет речь в следующем посте.
Благодарю за внимание.
P.S. При рассказе я умышленно опустил большую часть технических деталей, чтобы сделать историю более интересной и доступной для всех читателей. Если вам любопытно, как, например, были реализованна компиляция и выполнение расчетов в конфигураторе зарплатного модуля, напишите об этом в комментариях — с удовольствием об этом расскажу.
✪ ✪ ✪
Если вам понравилась эта статья, подписывайтесь на мой блог — впереди будет много интересного.
❧
Заранее благодарен вам за поддержку.
Жаль технических подробностей нет. Представить себе не могу как это свой язык написать... А значит и компилятор к нему... не укладывается в голове? Или это был скриптовый язык?
Для таких простеньких языков обычно используется транслятор, который преобразует код на DSL в код на уже существующем языке, для которого есть компилятор. Это намного проще, чем написать компилятор или интерпретатор скриптов самому, иногда вообще тривиальная задача.
Язык, описанный в статье, транслировался в язык хранимых процедур базы данных, которые компилировались, имя их сохранялось в таблице, по этому имени они и вызывались, когда надо было производить расчеты.
Доступ к переменным, обеспечивался трансляцией обращения к переменным в вызовы специальных функций. Результат вызова процедуры сохранялся в таблицу, как результат расчета и был доступен другим процедурам опять же через вызовы функций.
Ага, понятно!
@wealthycat Поздравляю! Вы получили личное награды!
Вы можете нажать на бейдж, чтобы увидеть свою страницу на Доске Почета.
Я даже представить не мог, что есть такие задачи, для которых нужно придумывать новый язык программирования. Вот сидишь, думаешь, что всё до тебя уже придумали. А нет!
В очередной раз благодарю за интересный рассказ! =)
Есть хороший и ёмкий термин под который попадает описанный "язык" - метаданные. Т.е. данные в которых описываются какие-либо правила о работе с первичной информацией. Обычно они начинаются с каких-то простейших действий типа сложения, вычитания, среднего, но затем дорастают до того, что приходиться придумывать свой "язык", а также создавать редактор метаданных. Но, автор правильно заметил, с подобным редактором обычный бухгалтер справиться не может, зато отлично справляется низкоквалифицированный программист-кодер. В итоге в больших системах объем метаданных может быть столь высоким, что приходится нанимать десяток программистов для ведения этих метаданных.
Спасибо!
Такие задачи на самом деле редкостью не являются, очень часто разные конфигурации проще всего описывать именно текстом особенно, если в них есть всякие правила, формулы и т.д.
Ваш пост поддержали следующие Инвесторы Сообщества "Добрый кит":
losos, francisgrey, damm, gildar, fetta, andrvik, kanenakat, midnight, phoenix, vasyl73, vik, vadbars, yurgent71, elviento, dr-boo, vasilisapor2, gryph0n, voltash, exan, gapel, bobrik, newodin, sva-lana, borisss, anatolich, blondinka, ogion, mixtura, mr-nikola, anastasiia, mrramych, bospo, nerengot, ifingramota, bds1988, vealis, liseykina, zhenek, mirumir, wedge, chugoi
Поэтому я тоже проголосовал за него!
Узнать подробности о сообществе можно тут:
Разрешите представиться - Кит Добрый
Правила
Инструкция по внесению Инвестиционного взноса
Вы тоже можете стать Инвестором и поддержать проект!!!
Если Вы хотите отказаться от поддержки Доброго Кита, то ответьте на этот комментарий командой "!нехочу"
@wealthycat Поздравляю! Вы добились некоторого прогресса на Голосе и были награждены следующими новыми бейджами:
Награда за количество голосов
Вы можете нажать на любой бейдж, чтобы увидеть свою страницу на Доске Почета.
Чтобы увидеть больше информации о Доске Почета, нажмите здесь
Если вы больше не хотите получать уведомления, ответьте на этот комментарий словом
стоп