Поработав как 1С программист лет 10 и имея опыт работы с другими языками (oracle в штате 1.5 года, C# любительски 2 года) заметил, что есть намного больше в мире программирования, что ранее не замечал. В других языках используются понятия «паттерн», «подход ООП», «классы», «наследование» и пр. Для 1С все это неприменимо, но некоторые подходы могут повысить качество разработки и повысить ценность специалиста. Рассмотрим, как устроена градация программистов и зачем она нужна.
Для начала попробуем разобраться зачем нужна градация специалистов.
Кажется, без градации жить хорошо, но присмотритесь к развитию бизнеса.
У мелкого бизнеса мало работы, средний и крупный бизнес уже сильно перерабатывает типовые и нанимает в штат программиста
для дальнейшего развития и поддержки программы. Со временем поддержка их программы требует все большего количества программистов
при этом сохраняя тепы доработок и развития. И принимая нового программиста им нужно понимать чего от него ожидать.
Тут возникает следующий вопрос.
Для выполнения работы нужны специалисты, но как понять сможет ли сотрудник выполнить работу?
Какое качество от него стоит ожидать?
Вот тут и появляется классификация, чтобы понимать, какого спектра задачи может решить разработчик и какой результат работы ожидать.
К примеру, начинающий разработчик, мало знающий систему, не сможет быстро спроектировать и внедрить небольшую систему.
Опытный разработчик, может не внедрить систему, натыкаясь на проблемы со скоростью работы или непониманием конечного результата.
Начинающий программист
Как сделать?
Обладает первоначальной технической базой.
Первое время программист погружается в техническую часть и изучает платформу, ее возможности.
Выполняет задачи по доработке без анализа последствий в бизнес области.
Компетенции: выполнение технических задач под присмотром более опытных разработчиков.
Продвинутый программист
Сейчас сделаем!
Получив уверенные знания позволяющие решать большинство задач, программист начинает осваивать бизнес процессы и типовые конфигурации.
Выполняет задачи по проектированию бизнес процессов, понимая их связь и последствия для бизнеса.
Компетенции: самостоятельное решение технических задач.
Проблема при решении: последующая доработка выполненных решений, проблемы при масштабировании, техническое решение прийдется переделывать под "пропущенные" пожелания бизнеса.
Старший программист
Зачем это нужно? Как это повлияет на другие системы и процессы? Будут ли проблемы у предприятия после разработки?
Научившись писать код и поняв бизнес процессы, наступает время оптимизации кода и программного решения.
Выполняются задачи прикладного характера с чистым и понятным кодом.
Появляются свои стандарты написания кода.
Разработчик решает не только технические задачи, но и понимает, как это отразится на бизнесе.
Компетенции: самостоятельное решение бизнес задач (части бизнес процесса) с возможностью последующих доработок.
Ведущий программист
Понимаю возможности программы и знаю процессы организации. Могу спланировать функционал который не надо будет переделывать и не поломает работу бизнес процессов.
Как правило, к этому времени работа становится рутинной и ищется что-то новое.
Разработка новых решений или подсистем с учетом долголетней перспективы развития.
Приходит понимание необходимости мониторинга системы, тестирования (для уменьшения ошибок при доработках), поиска существующих стандартов разработки.
Происходит поиск возможности улучшения системы - работа с неопределенностью но определенным результатом.
Уже решаются не прикладные задачи, а происходит проектирование работы в системе для решения бизнес задач.
Компетенции: самостоятельное проектирование бизнес процессов и разработка бизнес функционала.
Архитектор
Обладает компетенциями по построению систем.
Учитывает различные взаимосвязи между системами повышая отказоустойчивость, скорость взаимодействия между ними.
Занимается развитием архитектуры, шины данных ( например ESB).
Руководитель проекта.
Отвечает за реализацию проекта, рассчитывает риски по проекту.
Умеет находить общий язык с заказчиком и программистом.
Описывает требования заказчика в бизнес процессах и передает на работу разработчикам.
Решает конфликтные ситуации в случае их появления. К примеру не соответствие разработанного функционала ожиданиям заказчика.
Руководитель отдела
Выстраивает процесс работы отдела повышая эффективность работы.
Отвечает за всех сотрудников отдела и их качество работы.
Для вертикального роста необходимо не только развивать технические навыки, но так же и ряд других: эмпатию, коммуникабельность, мышление.
Часть этих навыков хорошо описана в статье "Нетехнические навыки для разработчиков. Зачем они нужны? Как развивать?".
При развитии в сторону старшего или ведущего программиста необходимо заниматься качеством кода,
поэтому хочется выделить два фактора, которые пока опускает сообщество 1С: это качество кода и тестирование написанного кода (бизнес процесса).
Плохой код - тяжелее поддержка - со временем переписывание когда достанет (если помножить на все задачи то переписывание всей конфы или подсистемы) - появление новых багов при добавлении нового функционала.
Отсутствие тестов - быстрое обновление - возможные ошибки в других местах кода - потеря выручки при плохом варианте (потеря времени при хорошем) и возможный второй виток.
Зачем хороший код при разработке конфигураций:
- легче читать и понимать (на разбор кода уходит значительно меньше времени, значит его больше остается для выполнения задачи)
- при доработке кода не приходится его переписывать (при плохом коде бывает копирование механизмов и исправление в одной копии необходимо делать во всех остальных)
- количество ошибок при доработке уменьшается (к примеру не использование повторного кода)
- Фирма 1С разработала стандарты позволяющие им разрабатывать и поддерживать их конфигурации (https://its.1c.ru/db/v8std)
Поскольку объем материала большой, по росту от начинающего до ведущего, сделан отдельный онлайн курс.
Приведу пару примеров:
При падении в случае обработки XDTO пакета мы получим запись в ЖР "В этой транзакции уже происходили ошибки"
Процедура РегламентнаяОбработка() Экспорт
....
Попытка
Док.Провести();
ОбработатьXDTOПакет(Пакет);
Исключение
ЗаписьЖурналаРегистрации("РегламентнаяОбработка", УровеньЖурналаРегистрации.Ошибка,,, КраткоеПредставлениеОшибки());
КонецПопытки;
КонецПроцедуры
Процедура ОбработатьXDTOПакет(Пакет)
Попытка
Пакет.Значени = "Тест";
Исключение
ВызватьИсключение КраткоеПредставлениеОшибки();
КонецПопытки;
КонецПроцедуры
В этом случае при падении будет описана сама ошибка.
Процедура РегламентнаяОбработка() Экспорт
....
Попытка
Док.Провести();
ОбработатьXDTOПакет(Пакет);
Исключение
ТекстОшибки = КраткоеПредставлениеОшибки();
ЗаписьЖурналаРегистрации("РегламентнаяОбработка", УровеньЖурналаРегистрации.Ошибка,,, ТекстОшибки);
КонецПопытки;
КонецПроцедуры
Процедура ОбработатьXDTOПакет(Пакет)
Пакет.Значение = "Тест";
КонецПроцедуры
Много параметров, которые легко перепутать при вызове
Процедура РасчетЛиквидностиТовара(Товар, Склад, Организация, ХарактиристикаТовара, ВесРасчета, АналитикаДляРасчета) Экспорт
....
КонецПроцедуры
При передаче структурой передать неверный параметр тяжелее
Процедура РасчетЛиквидностиТовара(ПараметрыСтруктурой) Экспорт
Товар = ПараметрыСтруктурой.Товар;
Склад = ПараметрыСтруктурой.Склад;
Организация = ПараметрыСтруктурой.Организация;
ВесРасчета = ПараметрыСтруктурой.ВесРасчета;
ХарактиристикаТовара = ПараметрыСтруктурой.ХарактиристикаТовара;
АналитикаДляРасчета = ПараметрыСтруктурой.АналитикаДляРасчета;
КонецПроцедуры
Надеюсь, эта публикация поможет понять что нужно для развития и достижения больших успехов.
А Вы задумываетесь о горизонтальном росте?
Работаете над ним?
Интересно ли более детальное описание знаний и навыков необходимых для роста программисту?