Последствия допуска к критически важным проектам недостаточно подготовленных программистов могут быть весьма плачевными — достаточно вспомнить крушение при первом запуске ракеты-носителя Ariane 5 в 1996 году [1] или недавнюю серию катастроф авиалайнеров Boeing 737 MAX [2]. Перечень специализаций сотрудников, занятых в подобных проектах, множится день ото дня — от инженеров аппаратного обеспечения до программистов серверной логики, бизнес-процессов, средств аналитики и тестирования. Работоспособность, природный талант, амбиции, желание развиваться, многогранность — все эти индивидуальные показатели отличают одного специалиста от другого. Но насколько важно сегодня фундаментальное образование? Может ли программист «брать нахрапом», накапливая опыт участия в многочисленных проектах решения конкретной задачи? Или основу успешной деятельности непременно должно составлять профильное высшее образование?
Навыки программирования, получаемые специалистами в ходе работы над теми или иными проектами, — ценный опыт, однако без профильного образования сложно посмотреть на проблему широким взглядом и глубоко погрузиться в задачу с учетом всех нюансов. Постоянно общаясь с нашими зарубежными коллегами, мы видим, что ИТ-компании по всему миру сталкиваются с последствиями отсутствия у своих разработчиков профильного образования. Сотрудники, даже давно работающие в компании и имеющие богатый опыт кодирования, часто не понимают своей роли в проекте, неправильно распределяют силы и ресурсы и, как следствие, работают неэффективно. При разработке одного из наших программных продуктов, когда нужно было развернуть платформу для использования средств машинного обучения, мы обратили внимание на тот факт, что даже программисты-«мастодонты» с большим опытом, но без математического образования демонстрировали нерешительность, не соответствующую их статусу в компании и амбициям. В то же время сотрудники, получившие профильное высшее образование, легко определяли направления для оптимального решения задачи. Разработка сложных архитектурных решений и работа в таких областях, как искусственный интеллект, немыслима без фундаментальных знаний в сфере математического анализа, дискретной математики, статистики и пр.
Как и в большинстве ИТ-компаний, первоначально мы требовали от сотрудников лишь наличия реального опыта, а на их образование часто смотрели «сквозь пальцы». Действительно, на первый взгляд, выгоднее взять выпускника непрофильного вуза или колледжа, давно и уверенно программирующего, вместо выпускника, например, физико-математического факультета. Однако мы столкнулись с тем, что одних навыков кодирования мало и большую роль играют четкое понимание теории, широкий взгляд на проблематику, системное понимание основ программирования как индустрии и общая академическая культура. Только приобретя все эти качества, специалист сможет стать настоящим профессионалом, эффективно работающим в отрасли. Для развития карьеры, а именно для решения все более сложных задач и построения комплексных систем, необходима хорошая фундаментальная подготовка, а практические навыки, безусловно, необходимы, но недостаточны.
Именно поэтому несколько лет назад мы начали сотрудничать с ведущими вузами страны по подготовке специалистов в области управления данными, в частности с математико-механическим факультетом Санкт-Петербургского государственного университета, принимать участие в студенческой и магистерской практике и привлекать к работе талантливых студентов. Многоступенчатая программа обучения включает освоение основ MDM [3] и такие направления, как «Качество данных», «Интеграция платформ управления данными», «Методология внедрения» и «Концепция руководства данными». Во время занятий мы рассказываем студентам об основных терминах в области управления данными, показываем наш программный продукт, разбираем различные бизнес-кейсы и, используя цифровые стенды, пытаемся расширить кругозор студентов, приучая их детально вникать в специфику отрасли, без понимания которой невозможно ни разработать систему управления данными, ни эффективно ее сопровождать.
Программа курса «Управление данными»
Деятельность по управлению данными весьма разнообразна — начиная с принятия решений о том, как извлечь стратегическую выгоду из имеющихся информационных активов, и заканчивая развертыванием, эксплуатацией цифровых платформ и их поддержкой. Как следствие, управление данными требует разнообразных технических и бизнес-навыков, а ответственность за управление данными распределяется между бизнес-менеджерами и сотрудниками, обеспечивающими координацию бизнеса и ИТ (директор по данным, распорядитель данных, бизнес-аналитик и пр.).
Многоступенчатая программа обучения специалистов по управлению данными включает как теоретическую подготовку, так и получение практических навыков. Как правило, программисты, имеющие профильное высшее образование, без труда осваивают курс и быстро вливаются в команду разработчиков систем управления данными.
Теория:
- методология внедрения MDM, оценка необходимости MDM для конкретного бизнеса;
- вызовы цифровой трансформации, управление данными как активом, основные и справочные данные, ключевые аспекты MDM, практика и эффекты внедрения;
- методология: проект по внедрению MDM, причины неудач;
- от MDM к Data Governance.
Практика:
1. Курс MDM:
- основы: администрирование пользователей и ролей, инструменты администратора, создание модели данных, основные инструменты оператора данных;
- качество данных: обеспечение качества данных (оператор + администратор), классификация данных (администратор + оператор);
- интеграция: платформы интеграции;
- программные возможности: кастомизация платформы.
2. Курс Data Governance: бизнес-термины, импорт и ведение метаданных, Data Lineage (происхождение данных, потоки, маршруты).
Обучение в вузе помогает заложить фундамент из теоретических знаний и навыков, на основе которого может проходить становление профессионального программиста. Вузы «учат учиться», что является основным навыком для программиста. Слаженная работа в команде, стремление к постоянному самосовершенствованию, эффективная проработка ошибок, адекватный горизонт планирования, системное мышление, понимание тенденций отрасли — вот далеко не полный список важных характеристик специалиста, получившего системное фундаментальное образование.
Сегодня существует множество различных курсов по языкам программирования, созданию мобильных приложений, веб-сайтов и пр., однако именно высшее образование, без сомнения, фундамент для развития профессиональных навыков программиста. Не следует также забывать, что выпускник вуза получает навыки самообучения. Высшее образование предполагает наличие аналитического мышления, навыков алгоритмизации процессов и задач, а также умение достигать долгосрочных целей. Конечно, не все вузы «одинаково полезны», и, к сожалению, гарантировать высокое качество образования сегодня могут далеко не все отечественные высшие учебные заведения.
Какие же навыки нужны? Для программиста важно хорошо знать синтаксис, возможно, нескольких языков программирования, однако именно фундаментальное образование помогает лучше понимать взаимосвязь всех процессов разработки и принимать взвешенные решения. Ведь для этого, как правило, надо «подняться над задачей» и решать ее на разных уровнях. Более того, многие алгоритмы и подходы, используемые в фундаментальных дисциплинах, позволяют серьезно сократить процесс разработки программ. Например, все простейшие алгоритмы сортировки, перебора древовидных и графовых структур давно изучены и стали неотъемлемой частью курсов базового высшего образования. Конечно, бурное развитие ИТ и накопленный опыт реализации сложных систем привели к созданию различных библиотек алгоритмов, интуитивно понятных языков программирования и инструментальных сред, сделавших программирование более доступным. Вместе с тем постоянно возникают новые задачи, которые невозможно решить, опираясь лишь на опыт кодирования.
Важнейшую роль играет и тот факт, что сегодня программист не работает в одиночку: в компаниях разработка ведется в командах, и результат во многом зависит от слаженности действий участников. И вот здесь высшая школа выступает в качестве института, воспитывающего общительность, коммуникационные и презентационные навыки.
***
Ключевые навыки для достижения успеха в ИТ-проектах — это абстрактное мышление и математическая логика, а также опыт самостоятельной научно-исследовательской работы. Их развитие неразрывно связано с фундаментальным естественно-научным образованием, и особенно с математикой. С другой стороны, в нынешних условиях стремительного развития ИТ-индустрии и постоянно обновляющихся технологий и методологий разработки ПО, классический академический подход к обучению иногда отстает от требований программной индустрии. Как бы то ни было, «нахрапом взять» не получится: успешная, плодотворная деятельность в «программистском цеху» всецело зависит от триумвирата фундаментального образования, таланта и желания постоянно развиваться, совершенствуя навыки, заложенные высшей школой.
Литература
1. Валерий Аджиев. Мифы о безопасном ПО: уроки знаменитых катастроф // Открытые системы.СУБД. — 1998. — № 6. — С. 21–30. URL: https://www.osp.ru/os/1998/06/179592 (дата обращения: 23.02.2021).
2. Дмитрий Волков. Программист и собака // Открытые системы.СУБД. — 2019. — № 2. — С. 1. URL: https://www.osp.ru/os/2019/02/13054956 (дата обращения: 23.02.2021).
3. Николай Скворцов. DAMA-DMBOK2: трудности перевода // Открытые системы.СУБД. — 2020. — № 2. — С. 44–45. URL: https://www.osp.ru/os/2020/02/13055423 (дата обращения: 23.02.2021).
Сергей Кузнецов (segey.kuznetsov@unidata-paltform.ru), Александр Константинов (alexander.konstantinov@unidata-platform.ru) — сотрудники, компания «Юнидата»; Николай Кузнецов (nkuznetsov239@gmail.com) — сотрудник, математико-механический факультет СПбГУ (Санкт-Петербург).
DOI: 10.26295/OS.2021.49.35.001