Уважаемые пользователи Голос!
Сайт доступен в режиме «чтение» до сентября 2020 года. Операции с токенами Golos, Cyber можно проводить, используя альтернативные клиенты или через эксплорер Cyberway. Подробности здесь: https://golos.io/@goloscore/operacii-s-tokenami-golos-cyber-1594822432061
С уважением, команда “Голос”
GOLOS
RU
EN
UA
wealthycat
7 лет назад

[КАК Я УЧИЛСЯ ПРОГРАММИРОВАТЬ] - Изобретение собственного языка программирования | часть 4

О внедрении инноваций в скучный процесс расчета заработной платы.

Продолжение серии заметок о моей карьере в ИТ:


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


Прошел примерно год с момента начала моей работы в ЦНИТ «Алькор». Я уже немного освоился на новом месте, стал напрямую общаться с бухгалтерами и даже научился их время от времени понимать. У меня постепенно сформировалась своя зона ответственности. Сложилось так, что в компании с двумя другими разработчиками я главным образом имел дело с модулем, который отвечал за расчет заработной платы.

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

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

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

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

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

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

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

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

После завершения разработки начались первые внедрения новой версии программы. Среди наших клиентов были в основном евпаторийские санатории и несколько хлебо и молокозаводов, разбросанных по всей Украине. Одно из первых серьезных внедрений было сделано на Запорожском хлебозаводе № 3, на котором на тот момент работало несколько сотен сотрудников. По результатам этого внедрения были сняты все вопросы по производительности, новая версия работала заметно быстрее старой.

Параллельно с расчетом зарплаты мне приходилось заниматься разработкой и внедрением других модулей. Это была как рутинная помощь коллегам в работе с другими программами, так и разработка специализированных решений для отдельных клиентов. Запомнилось несколько командировок на молокозавод в Шостку, для которого мы с моим тогдашним наставником реализовали модуль для работы с накладными на приемке сырья. Премия за ту работу выглядела в виде большого куска знаменитого в то время на Украине шостинского сыра :)

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

Благодарю за внимание.

P.S. При рассказе я умышленно опустил большую часть технических деталей, чтобы сделать историю более интересной и доступной для всех читателей. Если вам любопытно, как, например, были реализованна компиляция и выполнение расчетов в конфигураторе зарплатного модуля, напишите об этом в комментариях — с удовольствием об этом расскажу.


✪ ✪ ✪

Если вам понравилась эта статья, подписывайтесь на мой блог — впереди будет много интересного.

Заранее благодарен вам за поддержку.

1
146.871 GOLOS
На Golos с July 2017
Комментарии (14)
Сортировать по:
Сначала старые