Статья удалена
Расскажу какие были ТЗ, что спрашивали на собеседовании, какой был фидбек и почему меня до сих пор не взяли. Возможно статья будет полезна, тем, кто только думает подавать своё резюме в разные компании.
Долго думал какой подсайт выбрать, но раз в подсайте «Инди» есть вопросы зачастую ни разу не о разработке, и они не удалены, выбрал его.
Начну с того, что я работаю программистом 2 года. Сразу после универа попал в одну организацию, где теперь поддерживаю легаси проект с .net 4.0 windows forms, которому достаточно лет, обязательная поддержка компьютеров на windows xp. Поэтому ни о каких новых технологиях речи не идёт, но так или иначе я упрощаю жизнь пользователям каждый день улучшениями в одной гигантской программе электронного документооборота.
С юнити познакомился только на третьем курсе, получил базовые знания, сделал пару упоротых игр, даже в одном из конкурсов универских поучаствовал, но дальше я забил, т.к. диплом был на python, а о том, чтобы делать игрушки и получать за это деньги, на реальной работе я и не думал.
Спустя 2 года работы, пройдённой пандемии (только на месяц мы уходили на удалёнку в 2020 и больше никогда) и полученного опыта на C#, я, понимая что при переезде я 100% должен буду сменить работу, подумал, а почему бы не поискать работу на юнити?
Расскажу вам о трёх вакансиях, трёх тестовых заданиях и всего одном собеседовании.
Здесь и далее, название компаний я приводить не буду. Если интересно, можете в личку написать о ваших догадках, какая это компания, а я скажу, да или нет.
На первую вакансию я откликнулся на hh.ru, едва едва освежив свои знания о unity, я не особо на что-то надеялся, но, смотря на тестовые задания и ожидания работодателей, можно получить наиболее реальную картину того что нужно учить прямо здесь и сейчас.
Вакансия называлась Junior Unity Developer.
Я отправил отклик, мне ответили, сразу скинули ТЗ, дали 2-3 дня и попрощались. 7 страниц подробного ТЗ. Самое лучшие тестовое, на мой взгляд, из всех. С виду простая игра, есть один, два или три ряда кубиков, в каждом кубике случайная буква или цифра, игроку нужно нажать на тот, который имеет выбранную букву или цифру, которая отображается слева от самих кубиков.
Помимо разработки нужно анимировать правильную или неправильную реакцию игры. Далее переходим на второй уровень, где уже 2 ряда кубиков и на третьем уровне три ряда кубиков, далее перезапуск игры. Сложность добавляет то, что каждый уровень имеет один конкретный набор ассетов символов, это или буквы или цифры, потенциально потом там могли быть машинки, фрукты и т.д. Также одна и таже буква/цифра не должна повторяться в одном игровом запуске. То есть простенькая внешне игра, которая хранит в себе достаточно много внутренней логики.
Также были технические требования: ООП, SOLID (хотя бы 1 и 2 принцип), использование DoTween для анимации, грамотная архитектура, использовать UnityEvent, не создавать классов GameController.cs, GameManager.cs, Menu.cs, Controller.cs, LevelController.cs, не использовать static и синглтон, нужно использовать Scriptable object для значений кубиков, избегать повторений в коде.
Как я работал: сверхподробно не опишу, статья будет очень длинная тогда, но что имеем и что нужно делать? Нам определенно нужна фабрика, которая случайным образом будет выдавать или набор букв или набор цифр. Я её сделал, но очень криво. Event-ы я использовал тоже сверхкриво и неправильно, я не особо с ними работаю на самом деле, вроде клик обработался по событию, но ожидали от меня, я уверен сейчас, совершенно другого.
Сохранение затребованных Обязательное знание DoTween для ТЗ на вакансию джуна, также как и SOLID вместе с созданием идеально грамотной архитектуры меня очень сильно смутило. Я был уверен, что Джун, это тот, кому дают писать результаты обработчиков кнопок, а остальное +- сделано. Я не знал дотвин, я первый раз услышал, что такое солид, ну, а грамотная архитектура в обычных приложениях C# и в Unity это совершенно разные вещи (как минимум на данный момент я так думаю), из-за особенностей создания экземпляров класса и работы конструкторов. Плюс я потратил на саму игру аж часов 10-12. Отправил, мне ответили, и это был самый качественный фидбек который я получил. Всего 1 сообщение, но всё таки.
Со всем абсолютно согласен, кроме того, что, по-моему, для джуна это слишком высокие требования, особенно умение строить сразу грамотную архитектуру — это самое страшное для меня сейчас. Спасибо этой компании, может когда-нибудь снова в неё попрошусь.
Далее я накачал курсы с ютуба и не только, насмотрел кучу роликов, подходов, распечатал несколько важных заметок из английского сегмента интернета по юнити, разочаровался в книгах и документации по юнити (они не учат писать несвязанный и оптимизированный код) и куче юнити-блоггеров.
Теперь я уже с первой строчки вижу, что так делать ну нельзя никак (например GetComponent() в Update в каждом втором видосе), поделал сам несколько проектов.
В феврале подал на вторую вакансию Junior Unity Developer, уже на сайте ingamejob.com а не hh.ru. Там так же: написал, сразу же выдали ТЗ и попрощались.
Чтобы не расписывать далее особенности логики, по сути сказали сделать свою версию игры Hit master 3d
Из технических особенностей: движение персонажа с помощью NavMesh по waypoint-ам, использовать пул объектов для пуль (снарядов), пули летят в точку клика на экране (довольно непростая математика и геометрия, но может лишь только для меня).
Игру сделал за часов 8, что тоже долго, но быстрее чем прошлое тз, уже использовал более правильно ооп, инкапсуляцию, почти все поля стали SerializeField private, а не public и даже написал абстрактные классы для пуль, оружия и снарядов, чтобы потом можно было стрелять чем угодно.
Сдал. Ииии я накосячил, оказывается: сделал не в той версии юнити игру, поэтому, вместо того чтобы попросить перекомпилить игру на другую версию, игру оценили лишь по прикрепленному видео игрового процесса (я их всегда присылаю). В итоге мой код не проверили, вообще, ни строчки не прочли, что очень обидно. Вот такой был фидбек
И всё, больше ничего не было. Весь фидбек на 8ти часовую работу. Опять же, там уже был +- нормальный код, по моему мнению, плюс это же вакансия на Джуна! Ну куда такие строгости? Или им написали 150 человек, или им не нужен джун.
Очень грустно, но ничего, я учу дальше и спустя ещё 2.5 месяца, подаю на последнею на текущий момент вакансию, на том же ingamejob.com.
Unity Game Developer. Написано, что ищут Junior или Middle/Middle+.
Отправил резюме и это была первая компания, в которой было собеседование! Просто вау. О чем говорили? Нет, не о том, кем я вижу себя через 5 лет работы в их компании. Спросили про опыт на юнити и на своей работе, в каком режиме готов работать (у них игры делают очень быстро, выкладывают и дальше новая игра, не все смогут работать в таком режиме), спросили почему именно юнити и геймдев. Я не особо что нашёл ответить, кроме как – мне это очень нравится, привлекает + мне очень хочется работать из дома, также я понимаю, что разработка игр это не легко, но я готов. Про зарплатные ожидания (просто добавил 10% к текущей ЗП, на текущий момент на всё что угодно соглашусь)
Игра была очень простая: есть арена, на неё спавнятся кубы, нужно их подбирать, когда проходишь к ним, и относить в специальную зону, складывать туда, за каждый отнесенный куб давать монетку и отображать счётчик монет на экране.
Я сделал эту игру за 3 часа. Скачал модельку героя с двумя анимациями (idle и бег+grab(в одной анимации)) с mixamo, при подборе коробок сделал их дочерними к игроку, прямо у рук, теперь есть иллюзия того, что игрок их несёт. Оформил специфически, оформление — это не моё, конечно. Получилось, что мы носим сыр гигантской мыши в её закрома. Единственное, о чем я жалею сейчас, это то, что я не использовал пул объектов для сыра, но блин, нужен ли он там? Ибо потенциально игра бесконечная, а сыр мы складываем в определенном месте + я не использовал ивенты, когда мы отнесли сыр и нам засчитали монетку — я сделал классический случай: отнесли монетку, обратились к коду-хранителю монеток AddCoin, а сам класс, считающий монетки, обратился к классу устанавливающий текст. В общем, игра сделана, код тоже уже зрелый, как минимум для ДЖУНА, вся логика разделена, ничто ни с чем не связано, добавлять новые фичи будет легко и просто, и…
Прошло 8 дней с момента сдачи, а их project manager или HR вообще перестал заходить в телегу… У меня вообще нет фидбека, что уж говорить там об потенциальном устройстве в их компанию, заключению трудового договора (если он будет).
Увольняться со своей работы будет страшновато ради компании, которая вообще теряет связь на неделю.
Вывод
Первое. Я не говорю, что все компании такие хреновые и не берут меня на работу, я понимаю по каким причинам меня не взяли в первую и, частично, на вторую. Хотя я считаю, что как минимум у джуна-то стоит посмотреть на его задатки. Я уверен, что с моим опытом в C# (мне не надо учить, что такое интерфейс, абстрактный класс, ивент и делегат) я могу устроиться в любую компанию и за 2-3 месяца уже писать игры на их необходимом уровне, тут даже речь не о том, что "быстро учусь", а о том, что мне нужно только понять основные практики создания игр на юнити, т.к. одну и ту же игру или фичу можно сделать тысячей разных способов. Увы, вот эту грань я не могу пока что познать самостоятельно.
Второе. Скорее всего ни одной компании, куда я писал, не нужны джуны, всем нужны мидлы на ЗП джуна ИЛИ всем нужны так называемые «звёзды», которые придут, всё уже умеют, классные и при этом опыт коммерческой разработки имеют. Тоже самое, что джуны, но нет.
Третье. Так как я искал вакансии на удаленку, то наверно естественно, что требования будут выше, чем в офис, однако не настолько же? Да? Или нет?
Четвёртое. Мне показалось, что компании или HR-ы не уважают людей, которых набирают. Это очень неприятно. Видимо это из-за того, что каждый школьник подаёт на такие вакансии свои резюме. Не знаю.
Пятое. Требования, предъявляемые к джунам, по-моему, не являются навыками джуна, а почти всегда это описание мидла. Ибо, как вам джун сделает архитектуру игры? Тем более полностью по solid. Это бред, по-моему. Не говорите тогда, что вакансия для джуна.
Спасибо, что прочли мой опыт, напишите свой опыт в комментариях, очень интересно. Если есть что посоветовать, тоже пишите.