Александр Горбатов - Разбор стажировки для C++ программистов (лекции UNIGINE Open Air 2023)

YOUTUBE · 01.12.2025 09:20

Ключевые темы и таймкоды

Введение и стажировки

0:04
  • Александр Горбатов, ведущий разработчик, рассказывает о своем опыте.
  • Компания провела две стажировки для программистов C++.
  • Результаты: новые разработчики, джуниоры, которыми гордятся.

Проблемы найма и требования

1:36
  • Компания нуждается в новых разработчиках, но сталкивается с проблемой найма.
  • Требуются программисты C++, хорошо знающие математику и имеющие опыт в геймдеве.
  • Томск не вписывается в систему найма из-за нехватки опытных кадров.

Удаленная работа и культура

2:57
  • Компания берет на удаленку только опытных разработчиков.
  • Начинающие разработчики не подходят из-за отсутствия культуры работы.
  • Томск рассматривается как место для поиска молодых и амбициозных разработчиков.

Стажировка в Томске

5:37
  • Компания разместила баннеры около технических общежитий Томска.
  • Стажировка оплачиваемая, с возможностью увольнения в случае несоответствия.
  • Ожидали большой отклик, но нужно было выбрать лучших.

Тестовые задания и оценка

7:59
  • Тестовые задания включают написание алгоритма для определения количества юнитов в поле зрения.
  • Оцениваются читабельность, чистота кода, алгоритмическая сложность и производительность.
  • Первичная оценка производится на автотестах, включая функциональную и нагрузочную проверку.

Результаты и выводы

12:13
  • Лучшие участники уложились в 2-60 миллисекунд.
  • Программа отсеивала участников с бесконечными циклами и другими проблемами.
  • Компания продолжает искать и нанимать талантливых разработчиков.

Ручной отбор

12:55
  • Все успешно прошедшие испытания оценивались вручную.
  • Оценивались базовые навыки программиста: чистота и читабельность кода, алгоритмы, математика.
  • Учитывалось правильное использование фич языка.

Эффективность разбиения пространства

13:55
  • Разбиение пространства было неэффективно в данной задаче.
  • Основное преимущество разбиения пространства - подготовка дерева и его обновление.
  • В данном случае проще было сразу обойти все и решить задачу.

Пример успешного и неудачного решения

14:54
  • Второе место по скорости выполнения задачи.
  • Участник не был принят из-за несоответствия требованиям по чистоте и читабельности кода.
  • Участник не интересовался программированием, что стало причиной отказа.

Проблемы с плагиатом

16:02
  • Четыре работы попали в первую пятерку, но были написаны коллективно.
  • Коллективный разум не был принят, так как это не индивидуальный подход.
  • Лучшие работы были отобраны для собеседования.

Стажировка

17:54
  • Стажировка включала зачеты, мелкие задачи и выпускной проект.
  • Теоретический зачет включал изучение всех кнопок в редакторе и документации.
  • Проверялось умение читать документацию и способность к быстрому восприятию информации.

Интенсивное обучение

18:46
  • За неделю нужно было изучить всю документацию по движку.
  • Проверялось умение читать документацию на английском языке.
  • Важно было иметь общий контекст и способность к быстрому восприятию новой информации.

Проблемы с зачетами и стажировкой

21:44
  • Участники не справлялись с зачетами, что было нормально.
  • Проблемы возникали, когда люди начинали нести полную ахинею.
  • Практический зачет включал создание секретной игры, оцениваемой по навыкам использования движка и программирования.

Пример с учительницей математики

22:43
  • Учительница математики быстро влила в себя документацию, но не справилась с программированием.
  • Вопросы по техническим аспектам не были решены, что показало её слабые стороны.

Тестовые задания и их ограничения

23:31
  • Тестовые задания не всегда показывают уровень программиста.
  • Вкладывались много времени и денег в обучение, но не все становились хорошими программистами.

Обучение и поддержка стажеров

23:46
  • Стажеров отвлекали лекциями и ликбезами, чтобы они не просто читали документацию.
  • Они делали простые сэмплы и учились работать с различными контроллерами.

Творческий подход в геймдеве

24:44
  • В геймдеве редко бывают четкие технические задания, что требует инициативы и креативности.
  • Важно проявлять сообразительность и творческую составляющую.

Поддержка и саппорт

26:24
  • Стажерам помогали с саппортом, отвечая на вопросы клиентов.
  • Они изучали документацию и знали, какую ссылку отправить.

Менторство и лекции

29:10
  • Стажеров поддерживали опытные разработчики-менторы.
  • Проводились лекции и микролекции по различным темам, включая работу с матрицами и трансформациями.

Критика кода

31:07
  • Любой код стажеров подвергался строжайшей критике и беспощадному ревью.
  • Это помогало улучшить качество кода и навыки программирования.

Важность общего кода-стайла

31:36
  • Общий код-стайл помогает программистам понимать ориентиры и улучшать свои навыки.
  • Важно, чтобы код выглядел одинаково, чтобы его было проще читать и поддерживать.
  • Использование форматеров и индивидуальная работа помогают улучшить навыки.

Микросимуляция проекта

32:36
  • Стажерам предложили работать над реальным проектом, имитируя командную работу.
  • Они учились договариваться и устанавливать договоренности, что важно для командной работы.
  • В конце проекта они презентовали свои результаты основной команде.

Пример проекта: фотореалистичный рендер

34:50
  • Проект включал создание фотореалистичного рендера для 3D-моделей.
  • Стажерам поручили создать прототип, который включал рендер видео и скриншотов.
  • Проект потребовал много договоренностей и командной работы.

Пример проекта: обучение нейросетей

36:43
  • Проект включал создание реалистичной графики для обучения нейросетей.
  • Стажерам нужно было генерировать окружение и подавать данные на вход нейросети.
  • Проект включал симуляцию движения и создание реалистичной графики.

Статистика стажировок

38:45
  • В двух этапах стажировок участвовало около 300 человек, из которых справились 60-80.
  • Проведено 20 собеседований, из которых прошли 6 стажеров.
  • Некоторые стажеры не имели опыта программирования до стажировки, но показали хорошие результаты.

Итоги и выводы

39:38
  • Стажировки требуют значительных ресурсов и затрат.
  • Важно привлекать хороших кураторов для достижения хороших результатов.
  • За три месяца можно сделать из стажеров квалифицированных программистов, готовых к работе.

Стажировка и условия работы

41:22
  • Компания искала выпускников технических вузов или студентов последних курсов.
  • Стажировка оплачивалась 30 тысяч рублей за полдня, что составляло 20 часов в неделю.
  • В компании работали студенты не только вузов, но и техникумов.

Самостоятельное изучение и софт скилы

42:20
  • Основное внимание уделялось самостоятельному изучению материалов.
  • Ошибки в программировании нужно совершать самостоятельно, чтобы понять их последствия.
  • Софт скилы для программиста важны, особенно умение договариваться и решать проблемы.

Отзывы и условия работы

44:19
  • Отзывы о компании положительные, коллектив дружелюбный и комфортный.
  • Стажировка была тяжелой, но интересной.
  • Вопросы о совмещении стажировки с основной работой решались индивидуально.

График работы и ограничения

45:42
  • Стажировка длилась с 9 утра до 1 часа дня.
  • Работа по выходным и ночью была запрещена.
  • Система проходной была изменена для ограничения доступа стажеров.

Переход на полный рабочий день

47:40
  • Стажерам предлагали перейти на полный рабочий день с повышением зарплаты.
  • Это позволяло быстрее и глубже вникнуть в работу.
  • Возможность перехода на полный день была доступна на половине стажировки.

Работа с нестандартными программистами

48:45
  • Компания готова двигаться навстречу нестандартным программистам.
  • Важно соблюдать рамки и стиль кода.
  • Компания открыта для любых людей, независимо от их особенностей.

Вопрос о поступлении в университет

51:40
  • Вопрос о том, куда поступать младшей сестре, которая хочет стать программистом.
  • Важно сначала определиться с направлением программирования.
  • Рекомендуется смотреть видео на YouTube и интервью с разработчиками для выбора направления.

Личный опыт поступления

53:48
  • Автор поступил в ТУСУР на факультет систем управления, но случайно попал на прикладную математику-информатику.
  • Несмотря на сложность специальности, база, полученная в университете, помогла в карьере.
  • Важно учиться и понимать, что высшее образование не всегда необходимо.

Важность обучения и практики

56:10
  • Важно поступить в университет для получения базовых знаний и навыков.
  • Обучение в университете учит защищать курсовые, писать код и работать в команде.
  • Практика и опыт помогают понять, нужно ли продолжать обучение.

Разбор тестового задания

56:41
  • Пример решения тестового задания с использованием ChatGPT.
  • ChatGPT справился с заданием, но не прошел функциональное тестирование.
  • Автор показал, как можно улучшить код для достижения лучших результатов.

Оптимизация кода

58:31
  • Оптимизация кода для улучшения производительности.
  • Использование свойств математики для ускорения вычислений.
  • Замена функций и оптимизация кода для уменьшения количества локаций.

Оптимизация по стоимости операций

1:02:47
  • Замена тяжелых операций на легкие для улучшения производительности.
  • Пример замены аркосинуса на косинус для уменьшения количества вычислений.
  • Оптимизация по балансу сфер и разбиению пространства для улучшения производительности.

Оптимизация кода

1:04:12
  • Обсуждение оптимизации кода по стоимости.
  • Изменение знака при сравнении углов.
  • Устранение лишних расчетов для улучшения производительности.

Влияние на производительность

1:05:11
  • Устранение лишних расчетов дало прирост производительности на 20%.
  • Проверка и исправление условий для улучшения кода.
  • Объяснение, почему некоторые операции могут быть быстрее других.

Оптимизация компилятором

1:06:26
  • Компилятор может оптимизировать код, если он понятен.
  • Важно писать код, который понятен не только программисту, но и компилятору.
  • Проверка и профилирование кода для выявления проблем.

Проблемы с многопоточностью

1:08:42
  • Проблемы с разделением задач между потоками.
  • Советы по правильному использованию многопоточности.
  • Важность написания кода с комментариями для оптимизации.

Оптимизация кода для Astra Linux

1:11:18
  • Оптимизация кода для работы на Astra Linux.
  • Проблемы с локациями и системными прерываниями.
  • Решение проблемы с торможением кода на Astra Linux.