
Начну с ситуации, которая произошла некоторая время назад - встретился я за чашкой кофе со своим бывшим коллегой, десять лет назад он пришел в разработку игр студентом, но объективно не тянул программирование и в итоге пришлось расстаться. Разошлись достаточно мирно, (пусть будет) Кеша ушел ��начала в мобилки, а потом в маркетинг игр в смежную компанию, где за прошедшее время поднялся до начальника отряда трудоголиков на галере, но по какой-то своей внутренней мотивации решил в вернуться в большой игрострой, на фоне чего, собственно, мы и пересеклись в кафе. За последние время индустрия не то, чтобы особо прыгнула вперед, но существенно так просеменила некоторый путь в направлении светлого будущего в объятиях аишки, чутка поменялись стандарты, добавились разные помощники и жить в целом стало веселее, а местами даже без кранчей. Но Кеша пришел фактически со знаниями студента последних курсов, зато с большим опытом в игрострое в плане того, как продать уже сделанную игру на последней миле, но статья будет не об этом, а скорее про то, как молодой или уже не очень спец попадает в разработку.
И это дает повод поговорить о ситуации, которая многих из нас напрямую - игровых и околоигровых разработчиков, уж извините, хвалить я буду своё болото - касается, и даже сейчас, когда у нас есть всякие умные ИИ-помощники типа чатика или клода, которые вроде как должны всё упростить, проблема никуда не делась и даже стала ещё более явной, потому что если посмотреть на это со стороны, то получается просто какой-то театр абсурда, причём довольно грустный театр, если честно.
С одной стороны у нас движковый, анимационный и gameplay программист это буквально одна из самых дефицитных профессий в индустрии прямо сейчас, чтобы вы понимали в среднем нехватка по студиям больше 20% мидловых и помидорских позиций, т.е. не хватает как минимум одного спеца в каждой команде, куда ни ткни. А ребята из Epic Games, Unity, CD проджектов и прочих крупных студий постоянно жалуются, что не могут найти нормальных специалистов, которые реально умеют работать с современными движками, и они готовы платить безумные деньги (безумные по меркам штатов конечно, в старом свете все более приземленное, но тенденция та же) тем кто шарит в графике или может написать мультипоточный код, который не развалится на проде, или знает, как выжать лишние пару кадров из железа, но людей всё равно не хватает и это при том, что желающих работать в геймдеве очень и очень много.
С другой стороны, и это самое забавное, нормальному программированию по факту нигде толком не учат, и если вы зайдёте на любую кафедру программирования в среднестатистическом университете и посмотрите на преподавателей, то с очень высокой вероятностью обнаружите, что большинство из них сами никогда не работали в реальных проектах. То есть они могут знать, и скорее всего хорошо знают, теорию алгоритмов наизусть и рассказывать про сортировки и деревья поиска, но при этом они никогда не сидели до утра перед дедлайном, вылавливая утечку памяти, которая крашит игру только на определённой конфигурации железа, никогда не разбирались в чужом легаси размером в миллион строк, где документации нет и не будет, а половина комментариев на “китайском”, потому что эти вирши на английском читать нереально, и никогда не оптимизировали рендер чтобы выжать стабильные шестьдесят кадров в секунду из картошки которую, консольщики называют девкитом. А чатик, курсор или клод у многих закрыт ребятами из ИБ, ибо NDA и тебя банально мо��ут попросить с работы, если поймают за "ииблудием"
Понятно откуда ноги растут у этой ситуации, если человек реально умеет писать код на уровне, когда за это платят нормальные деньги, то в наших реалиях он скорее всего пойдёт работать в “Умный Кот”, а не преподавать в универ, где зарплата в несколько раз меньше, а кушать хочется и новый комп хочется и вообще как-то жить надо. Вот и получается такой замкнутый круг, где те, кто умеют - делают и зарабатывают, а те кто учит в основном никогда этого не делали в боевых условиях, что звучит довольно печально.
Это не всегда так, и я лично знаю преподавателей в Стенфорде, в нашем ИТМО, СпбГУ и МФТИ которые реально делали топовые игры и продолжают консультировать компании, попадаются ребята, которые сделали карьеру в бигтехе, а потом решили преподавать. Но даже это не особо спасает общую картину, потому что тут вылезает другая проблема: найти людей, которые одновременно будут крутыми программистами и при этом умеют объяснять сложные вещи простыми словами — это примерно как встретить ежика посреди айтишного офиса, теоретически возможно, но на практике это очень редкая ситуация.
Дело в том, что хороший разработчик и хороший учитель — это два совершенно разных набора навыков, которые часто вообще не пересекаются, и когда вам попадается человек, который может написать эффективный код и при этом объяснить его так, чтобы понял гуманитарий, который чувствует аудиторию и понимает, где надо притормозить и разжевать подробнее, то это вообще уникальный экземпляр и таких по пальцам можно пересчитать. Тут я немного слукавил, потому, что я так же знаю много хороших разработчиков и геймдизайнеров гуманитариев, да - у них плохо с математикой, но всю матчасть они скидывают на других, создавая при этом очень сложные игровые системы и механики.
Но даже если вам повезло и у вас есть такой преподаватель золотой, то всё равно он один не может сложившуюся систему, потому что вокруг академическая среда со своими правилами, бюрократией, стандартами, и будь он хоть самим Александреску или Мейерсом, но если вся кафедра живёт в парадигме двадцатилетней давности и считает что нормально учить студентов сорокалетним языкам (хотя С++ тоже родился в 1984), то один адекватный препод не переломит эту махину, как бы ни пытался.
А ещё есть другой момент, когда школьники приходят поступать на программистские специальности, вообще не представляя чем им придётся заниматься, потому что в школе либо программирование не преподают вообще, либо показывают какой-нибудь Scratch и учат печатать Hello World на Python, полагая, что это и есть программирование, хотя это примерно как научить человека писать букву А и сказать что теперь он литератор, ну вы поняли.
И получается, что программирование это вообще не тот вид деятельности, которому можно научить любого желающего, тут нужны специфические способности и определённый склад ума, и, если честно, то все мои знакомые разработчики это слегка странные люди в хорошем смысле, потому что они получают какой-то неведомый кайф от процесса который большинству нормальных людей кажется пыткой, я имею в виду когда надо часами сидеть и думать на кодом, или искать, почему твоя игра падает только на одной модели видеокарты и только когда игрок поворачивает камеру под определённым углом, или когда ты третий день ловишь race condition в мультипоточном коде, который воспроизводится раз на сто запусков, обычный человек после такого пойдёт учиться на блогера, но программист почему-то тащится от самого процесса.
Самое печальное, что понять подходит ли человеку программирование на вступительных экзаменах практически нереально, особенно когда базовые экзамены – это математика и физика, но никак не программирование (вот если честно – физика мне сейчас интересна, только в плане насколько она тормозит в движке), и даже если провести какое-то собеседование, то семнадцатилетний абитуриент не сможет продемонстрировать – есть ли у него способности к этому делу или нет, а видно это становится только когда человек начинает сам копаться в нетривиальных задачах, разбираться в чужом коде, работать с большими системами, и обычно это проявляется где-то к второму-третьему году реальной работы, да вы не ослышались, человек уже закончил универ и поварился в реальных проблемах. На западе кстати эту проблему хотя бы частично решают тем, что студентам относительно свободно можно менять специализацию и со второго курса уже иметь практику на аффилированных с универом компаниях. Походил полгода – понял, что программирование не твоё, переключился на что-то другое без потери времени и без отчисления, что создаёт естественный отбор, и остаются только те, кому это заходит.
У нас же если поступил на специальность то всё, привязан на пять лет, теоретически конечно можно перевестись (я сам так перешёл из сетей в разработку софта), но практически это такой квест с препятствиями, что большинство просто продолжают мучиться на нелюбимой специальности, и в итоге из студентов программистских направлений реально в программирование уходит процентов пять-десять, если повезёт, остальные идут в менеджмент в аналитику или вообще в другую сферу. И я это наблюдал по своей группе на кафедре вычтеха ИТМО, это при том что наш универ считался одним из топовых по подготовке программистов.
Тут мы подходим к самому интересному, а именно к тому, что есть серьёзные основания думать, что научить программированию в рамках обычного университетского образования вообще невозможно по самой природе этого занятия. Что обучение программированию сильно отличается от изучения академических дисциплин, это не теория, которую можно выучить и сдать экзамен, это скорее похоже на освоение практического навыка, где важна постоянная работа руками.
Тут скорее подходит аналогия, когда вы учитесь играть на гитаре, можно сколько угодно читать книги про аккорды и смотреть видосики с разборами песен, но пока вы САМИ не возьмёте инструмент в руки и не начнёте зажимать струны, чтобы заболели пальцы, вы не научитесь играть. Этого тоже бывает мало и очень часто еще нужен кто-то, кто покажет, как правильно держать руку, какое движение делать пиком, как не глушить соседние струны, и всё это передаётся только через непосредственное наблюдение и практику под руководством того, кто уже прошёл этот путь.
В игрострое это особенно заметно, потому что там есть устоявшаяся практика, что когда новичок приходит в студию, то его прикрепляют к опытному разработчику, и первые месяцы джун (или мидл и даже сеньор) в основном читает код, смотрит, как ментор решает задачи, и делает простые баг-фиксы и мелкие фичи. Ломать прод пускают где-то через месяца три, а то и позже, если это конечно не стартап. Между тем ментор проверяет коммиты и учит нерадивого подмастерья уму-разуму: почему вот эта архитектура не очень, почему этот код будет тормозить, почему здесь лучше использовать вот этот кривой код, а не красивую идею с наворотами из Мейерса. И через такую систему наставничества человек за полгода-год врастает в команду, начинает понимать не просто синтаксис языка, а нюансы, культуру написания и реальную работу кода.
Попробуйте воспроизвести такую модель в университете, где у преподавателя сто студентов в потоке и он просто физически не может каждому давать персональный фидбек. Где нет реальных боевых проектов, на которых можно учиться, а есть учебные задачки, которые далеки от реальности как Луна от Земли.
Поэтому мой вывод, который я наблюдаю на протяжении всей карьеры такой: программистами становятся в основном через самообучение, когда сами ищут информацию, сами разбираются в документации, сами пишут свои проекты, сами находят там баги и сами учатся их чинить. Университет тут играет роль скорее места, где можно найти единомышленников и пообщаться с такими же фанатами, обменяться опытом, но реальный рост начинается, когда студент после пары идёт и садится делать свой движок или контрибьютит в open-source, или пилит мод для любимой игры, или решает задачи на разных платформах.
В игрострое вообще полно примеров когда люди без высшего образования стали легендарными разработчиками, взять того же Джона Кармака, который создавал движки для Doom и Quake и стал гением графического программирования вообще не закончив универ, или посмотреть на инди-разработчиков, которые научились всему сами по туториалам и документации Unity или Unreal и выпустили успешные игры. Потому что в программировании диплом – это просто пропуск на собеседование, вернее когда то был, но хрюши опять всё сломали, и на самом собесе вас будут гонять по алгоритмам, просить написать код, смотреть ваше портфолио на GitHub, и всем будет глубоко фиолетово какой у вас ВУЗ в дипломе и какой средний балл. Всех интересует только одно – можете ли вы решать задачи.
Вот такая получается картина, где университет это скорее среда и возможность для самообучения, чем передача готовых знаний, и если вы это понимаете и берёте ответственность за своё обучение на себя, то у вас есть все шансы стать хорошим разработчиком, а если ждёте, что вас кто-то всему научит и всё разжуёт, то на выходе получите корочку, по Э-баллу и разочарование, потому что индустрия ждёт от вас реальных навыков, а у вас есть только знания как написать сортировку пузырьком на паскале из учебников, которые успели устареть ещё до того, как их напечатали.
P.S. если хаб С++ мешает, напишите в личку, я уберу.
