Введение и стажировки 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.