0
Обложка: Как я подружил науку и разработку на С++

Как я подружил науку и разработку на С++

Кандидат химических наук, который 13 лет занимался разработкой солнечных элементов, рассказывает, как стал разработчиком С++ и как наука помогает ему в работе.

Дмитрий Кудряшов
Дмитрий Кудряшов
Разработчик в компании «Симикон»

Как я пришёл в науку

Я учился в Воронежском государственном университете и там же окончил аспирантуру — стал кандидатом химических наук. После учёбы захотелось попробовать свои силы в большом городе, и я переехал в Санкт-Петербург.

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

Сложностей я не испытывал, потому что у меня уже был опыт работы с компьютерами. Ещё в детстве отец самостоятельно собрал нам ZX-Spectrum с бейсиком на борту. И пока другие ребята бегали во дворе, я изучал мой первый язык. На обычный ПК в то время денег не было, так что со временем мои попытки программирования отошли на второй план. После я поступил в университет, где был доступ к компьютерам и появился интернет — по записи, всего два часа в неделю. Я стал больше вникать в IT, но как бы фоном, параллельно с наукой.

А потом я попал в Физико-технический институт имени А. Ф. Иоффе к профессору, который работал вместе с Жоресом Алфёровым над созданием солнечных элементов — составляющих солнечных батарей. Оттуда перешёл в Алфёровский университет (СПбАУ), и там как раз была вакансия научного сотрудника.

В СПбАУ я проработал 13 лет. Было очень интересно, ведь я оказался в лаборатории у нобелевского лауреата! Кроме того, я опубликовал несколько десятков научных трудов, успел покататься по миру, подтянул английский, прокачал коммуникативные навыки.

Во время одной из командировок. Здесь я в Барселоне

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

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

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

Этот материал испарялся в вакууме и далее осаждался на подложки с различными структурами — это называется «методом термического испарения». Так можно было легко формировать металлические контакты к нашим солнечным элементам.

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

Как я решил окончательно перейти в IT

В 2019 году умер Жорес Алфёров. В университете начались переходные процессы, и я стал думать, где бы ещё применить свои навыки. Мне всегда хотелось выйти на новый уровень в программировании, и я стал выбирать язык.

Мне нравился C, особенно его быстродействие. Но синтаксис мне показался сложным: я видел, что на C работают серьёзные ребята, а мне наверняка будет тяжело разобраться в одиночку.

А вот С++ мне показался интересным выбором. У этой модификации есть все преимущества C, но с синтаксическим сахаром, что позволяет отвлечься от сложных конструкций и писать код (почти) человеческим языком. Не как на Python, конечно, но всё равно приятно.

В общем, выбор пал на С++. Я начал изучать язык, читать форумы и книжки, смотреть видеолекции. Но спустя полгода выяснилось, что ты можешь читать и даже вроде что-то понимать, но при этом не сможешь определить свой уровень развития. И у меня не было под рукой проекта, на котором можно было бы протестировать знания. Вроде решаешь задачки из учебника — ну, молодец, и что дальше?

Что можно почитать и посмотреть:

1. Бьярне Страуструп «Программирование. Принципы и практика использования C++».

2. Видео на YouTube про С++ в топе запроса.

И тут на Хабре я обнаружил новость, что Практикум запускает курс «Разработчик С++». В описании было написано, что бесплатную вводную часть можно пройти за две недели, а мне понадобился месяц. Но при этом мне очень понравилось её наполнение! Читаешь теорию, а на следующей странице — задание на закрепление. При этом делаешь не что-то абстрактное, а пишешь реально применимый код.

Например, там была задача по разработке поисковой системы пропавших животных: вбиваешь кличку и адрес, и поиск выдаёт релевантные странички. То есть ты вроде прошёл бесплатный курс, а в портфолио уже есть проект.

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

 

 

 

Слева «Война и мир», справа «Анна Каренина». Цифры показывают, сколько раз фраза встречалась в тексте. Сортировка по возрастанию.

Стоит уточнить, что сейчас вводный курс выглядит иначе, потому что его немного расширили, добавив часть для новичков. Я проходил первую, «сложную» версию, но мне настолько понравилось, что я довольно быстро оплатил полный курс.

Учёба в Практикуме

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

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

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

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

А ещё помощь с трудоустройством. На курсе были реальные советы и практика: моё резюме не просто прочитали, а отправили HR-специалисту, который дал полезную обратную связь. Так что на выходе, помимо портфолио, я получил грамотное резюме и вебинары по трудоустройству.

Конечно, были и минусы. У меня было мало опыта работы с С++ — только учебники и видео, поэтому первые задания давались тяжело. Ну и количество указанных в рекламе часов сильно расходилось с реальностью — мне понадобилось раза в три больше времени. Конечно, были ребята, которым наоборот, показалось, что курс слишком слабый, но мне хватило за глаза и за уши.

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

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

Кроме того, за время учёбы в Практикуме я сделал поисковик по изданным публикациям нашей лаборатории Renelab. Это очень полезная вещь для оформления научных отчётов, потому что иногда нужно найти все публикации определённого автора за период. Пока делал проект, я даже немного изучил фронтенд, устройство сервера, как связать С++ и общение с браузером.

Поисковая система на С++

Ещё на том же сайте есть микроприложение, которое помогает обрабатывать научные данные и данные экспериментов. Оно тоже написано на С++ в качестве бэкенда.

Программа для анализа экспериментов С++

Поиск работы

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

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

А потом мне написали из команды поддержки Практикума по трудоустройству — сказали, что есть партнёрская компания «Симикон» в Питере. Они в курсе, что я не могу выйти на полный день, и готовы пообщаться.

Я согласился, и через пару дней мне позвонили из этой компании, чтобы провести скрининг. Ещё через некоторое время у меня было двухчасовое собеседование по Zoom — спрашивали и теорию, и практику. И спустя два дня мне прислали оффер, которому я был безумно рад! С января я вышел на полную ставку и сейчас уже решаю задачи наравне с опытными коллегами.

Многим автомобилистам знакомы так называемые «письма счастья» — штрафы. В этих письмах есть фотографии, которые сделаны фоторадарными комплексами. Наша компания выпускает много видов таких комплексов, самый известный из них — «Кордон».

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

Работа мне нравится: система спринтов и ревью, как в Практикуме, использование Линукса, взаимодействие с железом. Сейчас непосредственного влияния науки на мою нынешнюю работу нет, но навыки из прошлого мне помогают. Например, благодаря опыту написания публикаций и отчётов у меня нет проблем с описанием выполненных задач и их тестированием.

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

Ну и куда без критического подхода. Я люблю повторять: спрашивайте себя и руководителя, почему вы что-то делаете именно так. Не стоит сразу приступать к написанию кода, надо подумать: а вдруг у задачи есть другое, более оптимальное решение? 

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

Совет тем, кто хочет поменять работу

Совет простой: главное, чтобы глаза горели от того, чем ты занимаешься. Если ты написал код, и на экране появилась условная фраза «Hello world», а ты чувствуешь эйфорию — пожалуй, можно начинать этот путь. Иначе это просто насилие над собой, потеря времени и финансов. Если чувствуешь огонь, то стоит двигаться вперёд.