Математика приводит ум в порядок
Валентина Дмитриева,
тимлид команды DevLab КОМПАС-3D
Каждый тимлид когда-то был джуном или руководителями не рождаются.

О своей карьере и работе рассказывает Валентина Дмитриева, руководитель команды DevLab в разработке системы проектирования КОМПАС-3D, автор статьи на Хабре, спикер конференций KOMPAScon и DevConf АСКОН.
Из интервью вы узнаете:

  • три причины, чтобы стать программистом: понимать шутки про программистов, быть хозяином своего компьютера и считаться крутым/крутой,
  • с какими технологиями работают программисты АСКОН (не только С++),
  • как вырасти в тимлида после двух декретов.
Как ты решила стать программистом, где училась?

Я родилась в Ташкенте, в детстве увлекалась спортивными бальными танцами, была чемпионкой Узбекистана. Благодаря спорту во мне развивалась целеустремлённость, желание быть лучшей в своём деле. Но танцы отошли на второй план, когда в нашей школе открыли бесплатный компьютерный клуб. Я тогда училась в пятом классе. Меня впечатлили компьютеры с чёрно-зелёными мониторами. На уроках мы рисовали в консоли и даже программировали змейку.

Когда мне исполнилось 13 лет, я переехала жить в Коломну. Спустя год у меня появился свой домашний компьютер — его подарил дядя. Разбираться в нём оказалось очень занимательным и интересным. Техника притягивала с детства: маленькой девочкой я могла разобрать и починить домашний пульт. Когда на своем компьютере я добралась до панели процессов, то почувствовала себя хакером: мне удалось найти сочетание клавиш, запускающее эту панель. Меня интересовали различные системные программы. В старших классах я уже могла переустанавливать Windows.

К концу школы у меня появилась аська (ICQ). В ней был канал bash.org, который публиковал шутки про компьютеры, системное администрирование, программирование. Я подписалась на него, и хотя половину не понимала, мне всё равно было очень смешно и интересно. Чтобы понимать шутки про программистов, я решила податься в IT-сферу после школы и учиться программированию. А если подойти к вопросу немного серьёзнее, меня увлекала работа с компьютером. Я понимала, что за профессией программиста будущее. В то время экономика и юриспруденция тоже были популярны, но они меня не интересовали. Мне казалось, что очень круто быть хозяином своего компьютера. Захотела — и переустановила систему, захотела — поменяла её оформление. Тем более, подростки с такими умениями котировались, считались крутыми.

Я поступила в Коломенский институт (филиал) Московского политехнического университета на факультет «Программное обеспечение вычислительной техники и автоматизированных систем». Начав учиться, поняла, что специальность довольно трудная, но ощущения, что я не справлюсь, не было. А стимулировало в том числе то, что с факультета были большие отчисления: изначально группа состояла из 34 человек, а выпустилось всего 13.

Я хорошо училась, и в процессе у меня возникало много вопросов, но, к сожалению, не на все из них удавалось получить ответы. А ещё я чувствовала свою уникальность: сперва на моём факультете было только две девочки, а потом я осталась одна. Мне нравилось, что я справляюсь с программой наравне с парнями, но очень часто хотелось просто пообщаться с девчонками. Стереотип о том, что женщины не способны к математике и точным наукам или, по крайне мере, справляются с ними хуже, чем мужчины, до сих пор сохраняется в нашем обществе. И своим примером мне всегда хотелось опровергнуть его.

Как случилось твоё знакомство с АСКОН?

Моя первая работа была ещё в студенчестве в учебном отделе института. Она не была связана с программированием: в мои обязанности входило составление учебного расписания в Excel. В период защиты диплома двое моих одногруппников, которые уже работали в АСКОН, предложили мне попробовать устроиться в компанию. В институте мы учились на Delphi, а для разработки САПР нужно было подтянуть С++. Месяц я изучала новый язык. На собеседовании мне помогли базовые знания, полученные в институте. Пробежаться по вопросам к собеседованию, выучить их и сдать, как экзамен, не получится, потому что потом придётся работать. Меня взяли на испытательный срок на должность инженера-программиста по автоматизированному тестированию. Получается, что работа в АСКОН — моя первая и единственная работа по специальности.

Каково было студенту сразу попасть в промышленную разработку сложного продукта?

Когда я увидела код КОМПАСа, то была в шоке от того, что бывают настолько огромные проекты с таким количеством нюансов. За первые полгода работы пришлось выучить объём информации как в институте. Поначалу был страх: когда заходила на кухню и слушала разговоры программистов, половину не понимала. Отчаивалась, думая, что все слишком умные, а я — не очень. После таких мыслей я собралась с духом и поработала со своей головой, осознала, что мешает мне отнюдь не отсутствие знаний, а страх и неуверенность в себе. Внутри я понимала, что если не поверю в себя и продолжу бояться, то у меня вообще не получится работать в АСКОН. Когда справилась с этим, влилась в работу. Позже из автоматизированного тестирования перешла непосредственно в разработку КОМПАС, в команду, занимающуюся 2D-функциональностью.

С самого начала работы в АСКОН мне очень нравилось, что у нас классный коллектив. Я пришла сюда джуниором, мне ставили интересные задачи, которые всегда — челлендж и вызов. А мои опытные и отзывчивые коллеги могли разъяснить любой вопрос. В этом для меня положительное отличие от института. Сейчас, когда в связи с декретом я работаю удалённо, мне не хватает непринуждённого общения за чаем на кухне.

После того, как я адаптировалась, а шок от масштаба разрабатываемого программного обеспечения поутих, поняла, что занимаюсь любимым делом. К решению задач меня мотивировало то, что вложенные усилия давали видимые плоды. Двигателем прогресса было удовлетворение от того, что я справляюсь.

А как ты нарабатывала «уверенное знание»?

Продолжала работать дома. Мне нужно было заниматься языком С++ и выучить широко применяемое в КОМПАСе объектно-ориентированное программирование. Я читала много профессиональной литературы. Для меня важно понимать, что сегодня я круче, чем год назад, совершенствоваться из любви к себе. Если в жизни человека нет увлечения, которому он отдаёт свои силы, жизнь становится скучной. На самом деле, нас гнетёт именно кажущаяся на первый взгляд радостной праздность. Если ты хочешь развиваться, нужно трудиться. Это осознание пришло мне после рождения первой дочери, когда я начала задумываться, какие ценности хочу передать ей и какой мамой хочу быть?

Считается, что язык С++ довольно консервативный, немодный. Что ты думаешь по этому поводу?

У каждого языка программирования есть своя область применения. С++ применяется в больших десктопных приложениях, а еще в играх на движке Unreal Engine. На данный момент подавляющее большинство областей, которые эти приложения могли бы занять, уже заняты. Уже написаны такие большие десктопы как КОМПАС и аналоги, браузеры, поэтому на рынке востребованность С++ ниже, чем у Python, TypeScript, JavaScript или у веб-фреймворков. Python применяется в машинном обучении, которое идёт вперёд семимильными шагами. На JavaScript или TypeScript пишут web, а эта область сейчас растёт и развивается: каждый владелец бизнеса хочет магазинчик в электронном виде. Но в целом каждый язык хорош в своей области. С++ постоянно развивается. Когда я только пришла в АСКОН, появился Стандарт С++11, а сейчас уже С++20, и в каждом стандарте есть новые возможности и подходы к написанию кода.

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

В первый декрет я ушла, будучи инженером-программистом 3 категории. Это уровень хорошего исполнителя — если ему чётко поставить задачу, он справится. Потом сдала экзамен на 2 категорию. На этом уровне уже не нужно разъяснять задачи — специалист способен выработать план их решения самостоятельно. Он более опытный, обладает большим спектром знаний, знаком с подводными камнями в работе и знает, какие технологии лучше выбирать. Теперь я тимлид в команде DevLab, которая отвечает за создание внутренних сервисов.

Во время декретного отпуска начала изучать современные web-фреймворки. Пока работала между декретами, моим «челленджем» стала книжка в 700 листов на английском языке: «Angular 9 для профессионалов». Я подтягивала английский и хотела посмотреть, получится ли прочесть. В итоге, прочитала за три недели.

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

Программирование

  • Head first. Паттерны проектирования. Эрик Фриман, Элизабет Робсон, Кэти Сьерра, Берт Бейтс
  • Паттерны объектно-ориентированного проектирования. Эрих Гамма, Ричард Хелм, Джон Влиссидес, Ральф Джонсон
  • Язык программирования С++. Бьёрн Страуструп
  • Чистый код. Роберт Мартин
  • Грокаем алгоритмы. Адитья Бхаргава

Научпоп

  • Думай медленно...Решай быстро. Даниэль Канеман
  • Как не ошибаться. Сила математического мышления. Джордан Элленберг
  • Мир, полный демонов: Наука — как свеча во тьме. Карл Саган
Несмотря на любовь к работе и тягу к новым знаниям, я бы всё равно не смогла совместить полноценную занятость и декрет. Когда выходила из первого декрета, работала по 4 часа во время сна дочери, чаще всего ночью. Если бы была возможность, я бы, напротив, осталась в декрете, продолжила бы учиться и занялась бы повышением уровня знания английского языка. Сейчас, когда дочери подросли, могу позволить себе полный рабочий день, пусть и удалённо. Моё руководство относится к этому с пониманием. Думаю, что это идеальный вариант для мамы в декрете.

Как чувствуешь себя в роли руководителя?

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

Когда я была джуниором, у меня и мысли не возникало спорить со старшими коллегами, которые были опытнее меня и лучше разбирались в КОМПАСе. Сейчас я уже не джуниор, но считаю, что любые мысли и слова сотрудников достойны внимания, их нужно принимать, рассматривать и обдумывать.

Расскажи, чем занимается команда DevLab?

Мы пишем внутренние веб-сервисы для обслуживания КОМПАСа. Один из таких сервисов связан с вылетами КОМПАСа. Когда КОМПАС вылетает, пользователи могут отправить отчёты в техподдержку АСКОН. А мы занимаемся программой, которая позволяет анализировать статистику полученных вылетов от пользователей, как data-аналитики. Смотрим частотность вылетов: если в одном месте их много, быстро реагируем и заводим ошибку. Программисты находят место в коде, где произошёл вылет, и доставляют пользователям патчи - исправленные версии КОМПАСа.

С каким стеком работаешь сейчас?

В web-разработке стек пока устрашающий. Из языков: Python, TypeScript, JavaScript и просто Java. Фреймворки, библиотеки, платформы, которыми мы пользуемся — это Angular, React, Spring, Node.js. Так получилось, что некоторые внутренние сервисы, например, Dashboard для тестов производительности, разрабатывали другие люди, выбравшие другой стек, а сейчас этим занимаемся мы. Надеюсь, что в скором времени мы избавимся от React и будем работать на Angular, который больше подходит для внутренних сервисов и с которым я сама лучше знакома.

Поскольку из-за двух декретов подряд я все-таки выпала из работы на пять лет, мне многое нужно подтянуть. Я хочу взяться в первую очередь за математику для того, чтобы быть способной понимать, что происходит в машинном обучении. Люблю математику потому, что она приводит ум в порядок. А если окунуться в частности, то учит мыслить алгоритмически. Чем занимаются программисты? Используют в своей работе алгоритмы. Существует утверждение, что программистам не нужна математика. Возможно, в каких-то областях это действительно так. Можно заниматься чисто фронтендом (внешним обликом приложений) или разметкой: здесь, действительно, математика не пригодится. Но если хочешь расти как всесторонне развитый программист, то математика необходима. Без математики не оценить сложность алгоритма. Можно заучить таблицу, знать значение сложности для каждого алгоритма, но правильнее знать базу, знать, что она основывается в том числе на комбинаторике и уметь оценивать сложность алгоритма по памяти и по времени.

На что обратить внимание тем, кто делает первые шаги в профессии?

Начинающему программисту для лучшего освоения языков я бы тоже посоветовала книги. Мой выбор обоснован: те, кто выпускают обучающие ролики по программированию на YouTube, пусть и хорошего качества, те, кто создают повсюду рекламируемые курсы, всё равно где-то берут знания, на которых базируются их продукты. И берут они их из книг. Для тех, кто хочет программировать на С++, коротенький курс видео на YouTube не даст полной картины и не разъяснит нюансов. В темпе обучения по книге можно эффективно закреплять на практике всё, что ты прочитал, глубже погружаться в аспекты и собирать всё в голове воедино. Как альтернативу книгам можно брать большие проверенные курсы от хороших компаний.

Для закрепления знаний могу посоветовать LeetCode. Программист может выучить какой-то материал, после этого зайти в раздел по этому материалу и решить соответствующие алгоритмические задачки. Разнообразных задачек там тысячи. Так в голове закрепляется весь материал. Потому что в computer science теория в отрыве от практики не работает.

А ещё новичкам следует почитать про эффект Даннинга-Крюгера. Он описывается графиком, кривой знаний. Если программист-новичок начинает в чём-то разбираться, и его идеи по решению задач срабатывают, он может прийти на «пик» глупости: обретает безграничную невежественную уверенность в себе и затевает бесполезные споры. Хотя лучше не высказывать оценочных суждений, а просто продолжать учиться, работать и развиваться. Иначе, человек может застрять на «пике» глупости, и ничто не сдвинет его с места. А тот, кто продолжает развиваться, осознаёт, насколько он ничего не знает. Есть четыре состояния развития в какой-либо области: неосознанная некомпетентность, осознанная некомпетентность, осознанная компетентность, и пик совершенства - неосознанная компетентность, когда всё получается автоматически. Нужно знать про эти стадии развития в профессии, чтобы на этапе неосознанной некомпетентности не делать глупостей.
Что мотивирует тебя к работе?

На качественную работу мотивирует совесть. У меня в характере есть какая-то принципиальность: мысли, слова и действия должны совпадать. Если ты считаешь и позиционируешь себя совестливым человеком, значит, должен быть таким во всём. Во взрослой жизни с этим тяжеловато, но в работе это качество идёт на пользу.

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

Когда стоит задача по созданию нового продукта, который придётся поддерживать, лучше потратить побольше времени на исследование и проектирование ПО, а не начинать писать проект «на коленке» сразу. Если почитать информацию по теме, изучить нюансы, продумать реализацию и нарисовать предполагаемую архитектуру с помощью диаграмм, то программный код получится простым, ясным и легко поддерживаемым.

Когда-то давно у нас не был так хорошо развит СI/CD (Непрерывная интеграция (Continuous Integration, CI) и Непрерывная поставка (Continuous Delivery, CD), набор принципов и практик, который позволяет разработчикам чаще и надёжнее развёртывать изменения программного обеспечения). Код КОМПАСа на его главной ветке автоматически собирался средствами специальной программы Jenkins. Сборка автоматически запускалась после каждого внесения изменения в этот код. Jenkins позволял вывести на весь экран текущий статус приложения. Если всё шло хорошо и никто из сотрудников ничего не ломал, то экранчик оставался зелёным. Если код ломался, то экран становился красным и внизу подсвечивается автор. Мы поставили на подоконник большой монитор и развернули его так, чтобы он был виден всем. На нём всегда был статус. И у нас факт огромного монитора на подоконнике вызывал с одной стороны веселье, с другой стороны, страх: не хотелось быть в упоминаемых на красном экране. Конечно, тех, кто попадал на красный экран, не наказывали, не было никаких санкций. Но боялись всеобщего смеха. Не помню, попадала ли я на красный экран, но даже если и да, вероятно, это было тогда, когда я перестала бояться.

Как работающей маме успевать всё и ещё находить время на саморазвитие?

Мы плохо работаем в условиях многозадачности. Нейробиологи утверждают, что для нашего мозга не существует многозадачности, мы только можем быстро переключаться между центрами внимания, при этом теряя в производительности. Эффективнее сосредотачиваться на чём-то одном. Я пробовала работать с таймером Помодоро и могу сказать, что он помогает. У меня правило: пока идёт один «помидорный» цикл, я сосредотачиваюсь на задаче и не отвлекаюсь на уведомления даже в рабочем чате.

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

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