Привет Хабр!

Обычно в блоге мы публикуем довольно хардовые вещи: рассказы об исследовательских и учебных проектах, рерайты научных статей студентов и сотрудников, подробные решения задач с соревнований. Но сегодня хотим поделиться не самой типичной историей нашего выпускника Константина Недикова. Почему нетипичной? Давайте загибать пальцы: Костя поступил по ЕГЭ (и вообще не имел олимпиадных достижений), во время учебы работал и при этом не вылетел (хотя, как и все работающие, очень даже мог), а после окончания бакалавриата выбрал магистратуру НЕ в Питерской Вышке (и да, мы пишем об этом в своем блоге).

Любопытно? Тогда приглашаем под кат.

Пост получился достаточно большой, для удобства публикуем содержание:

  1. Почему я решил стать программистом

  2. Поступление

  3. Учеба в АУ: кровь, пот и слезы

  4. Как я попал в Delightex...

  5. … и чем я там занимаюсь

  6. Совмещать работу и учебу — реально?

  7. Диплом

  8. Почему я не стал поступать в магистратуру Питерской Вышки

Почему я решил стать программистом

Всем привет! Меня зовут Костя, и в 2020 году я окончил программу “Прикладная математика и информатика” в Питерской Вышке (до 2018 года она реализовывалась в Академическом университете). 

Программированием я заинтересовался в старших классах школы. Как и у многих, все началось с увлечения компьютерными играми. После 9-го класса я начал писать простенькие игрушки на флеше. Тогда же мой друг решил научиться 3D моделированию и полез изучать движок UDK — Unreal Development Kit. Мы подумали, что будет круто сделать что-то самим, и стали все свободное время тратить на попытки научиться прогать. Мы с другом успели поработать во флеше, Unity и Unreal Engine 4 за моё время учебы в школе. 

Разработка нашей единственной законченной игры на флеше
Разработка нашей единственной законченной игры на флеше

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

Разработка нашей недоделанной игры Low Poly Folly на Unreal Engine 4
Разработка нашей недоделанной игры Low Poly Folly на Unreal Engine 4

Поступление

Я учился в классе с информационно-технологическим профилем в обычной школе в Кронштадте. Мы готовились к ЕГЭ по информатике, но никакого серьезного программирования или олимпиадных кружков у нас не было. Я пытался самостоятельно участвовать в олимпиадах, но моей подготовки не хватало, чтобы добиться каких-то значимых результатов.  

Зато я достаточно хорошо сдал ЕГЭ. Насколько помню, у меня было 277 баллов — прилично для 2016 года. Это открыло мне возможность выбирать, в какой вуз пойти. Один мой знакомый в тот год заканчивал профильный бакалавриат и рассказал об Академическом университете — раньше я о нем не слышал. Я погуглил, и мне очень понравилось, что я нашел. Вообще при выборе вуза я ориентировался на программу и преподавательский состав. В АУ меня привлекло и то, и другое: программа была классная, преподы — еще лучше. Там было много молодых специалистов, которые, как я надеялся, должны знать, что прямо сейчас происходит в мире программирования. В итоге я смог поступить в АУ на бюджет: прошел вторым потоком, был где-то в самом конце. Помогло, что в тот год был расширенный набор.

Я первого сентября 2016 года в АУ
Я первого сентября 2016 года в АУ

Учеба в АУ: кровь, пот и слезы

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

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

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

Учились мы много (очень много!) Самыми интенсивными были первые два курса. Мы с одногруппниками даже спорили, стало на втором курсе проще или сложнее — мне кажется, что сложнее. Но, тем не менее, у меня получилось влиться, понять, выучить ключевые вещи и доучиться до конца. 

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

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

Тогда же, в 2018 году, вся наша программа с преподавателями и студентами переехала в петербургский кампус Высшей школы экономики (но это совсем другая история), поэтому дальше в моем рассказе будет фигурировать этот университет. Заранее скажу, что переезд почти не повлиял на формат нашей учебы, разве что появились майноры и классная столовая.

Как я попал в Delightex...

Большинство студентов на моей программе не тратили лето зря, а устраивались на стажировки. Кто-то оставался в России и пробовал свои силы в Яндексе, ВКонтакте или JetBrains, но многие на 2-3 месяца уезжали за границу (например, в этом посте Алина рассказывала, как трижды стажировалась в Google — в Цюрихе, Лондоне и Саннивейле, а тут Андрей поделился впечатлениями после поездки в Лондон в Jump Trading). 

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

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

Про Delightex

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

Чтобы попасть на стажировку, нужно было пройти несколько отборочных испытаний и собеседование. Всего было три или четыре задания (сложные!), последнее я делал несколько дней. Как потом выяснилось, я стал одним из пяти претендентов, которым все-таки удалось с ним справиться. Это сыграло весомую роль на собеседовании, с которым я, кстати, оплошал. 

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

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

... и чем я там занимаюсь

В Delightex мы занимаемся созданием своего трехмерного движка CoSpaces. Основное его отличие от Unity или Unreal Engine в том, что наш движок кроссплатформенный, его можно запускать в браузерах и на телефонах. Еще с ним очень легко работать, основная целевая аудитория — это дети и взрослые-непрофессионалы, например, учителя. Вообще наш движок активно используют для образовательных целей: с его помощью можно создавать трехмерные объекты или целые сцены, учиться программировать. Еще мы довольно активно внедряем разные технологии, например VR и AR, что также привлекает людей к нашему продукту.

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

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

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

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

Презентация итогов стажировки
Презентация итогов стажировки

Совмещать работу и учебу — реально?

Моя стажировка в Delightex длилась два месяца, после мне предложили остаться. Я долго колебался, но поговорив с третьим курсом успокоился и решил попробовать. 

Конечно, было тяжело. Я учился и работал part-time. Повезло еще, что офис компании находился напротив учебного корпуса Вышки, поэтому я мог бегать туда в перерывах или по каким-то срочным делам. Но главное, почему мне вообще удалось совмещать работу и учебу: руководство программы разрешило в качестве НИРа заниматься одним из рабочих проектов. 

НИР был большой и важной частью нашего обучения. Со второго курса каждые полгода мы защищали исследовательскую или проектную работу: какие-то задачи нам приносили компании-партнеры или преподаватели, какие-то студенты находили сами (например, как и я, у работодателей). На хороший НИР уходило 8-10 часов в неделю. Мне повезло: я работал по 20 часов, часть из которых посвящал сугубо рабочим задачам, часть — тем проблемам, которые защищал в качестве НИРа. Если бы мне нужно было заниматься сторонним проектом, я бы, наверное, не справился. 

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

Команда Delightex в мюнхенском офисе (да, я там тоже есть)
Команда Delightex в мюнхенском офисе (да, я там тоже есть)

Диплом

Мой диплом не был связан с трехмерным моделированием или графикой. В процессе учебы я увлекался не только программной инженерией, также брал курсы по разработке языков программирования, и эти знания помогли мне в написании диплома. Вместе с двумя одногруппниками мы писали порт OpenJDK для нового процессора RISC-V. Это была большая задача. Некоторые части мы делали вместе, какие-то отдельно — их и защищали. Например, я разрабатывал структуры фреймов, основанных на нативном ABI фреймов RISC-V, и проводил исследование по выявлению наиболее и наименее нуждающихся в кэшировании данные. Если интересно, полный текст работы есть вот здесь, за нее я получил 8/10.  

Почему я не стал поступать в магистратуру Питерской Вышки

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

Я ни капли не жалею, что попал именно в АУ (а потом и в Вышку), и до сих пор думаю, что из всех имеющихся альтернатив это была самая лучшая. Я получил много знаний, опыта и возможностей — предполагаю, что сильно больше, чем могли предложить другие программы. Нагрузка для меня была невероятная: спать по пять часов в день совершенно не радовало. Но при этом периодически я испытывал чувство эйфории от учебы и коллектива. 

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