Для начинающих Unity3d программистов

Полезный материал для начинающих (и не только) программистов unity3d: ссылки, мнения, литература, ресурсы для обучения, как проходить интервью и готовиться к нему. Как учиться программировать под Unity3d?

Дисклеймер

По большей части мысли, мнения и советы — мои. Они работают для меня, и, я надеюсь, сработают и для вас. Я даю субъективные оценки книгам и другим источникам информации. Даю рекомендации проверенные только моим опытом.

Решил написать эту статью, после нескольких комментариев с просьбой привести ответы на список вопросов для программистов unity3d.

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

Прямые ответы — очень плохая практика еще и потому, что некоторые HR-manager’ы могут неправильно использовать такой список в качестве тестов, чего совсем не хочется допустить. Да и для начинашек, мне кажется вредно все готовенькое, гораздо полезнее знать где ответы получить и поучиться.

В этой статье хочу привести источники, из которых нужные знания можно почерпнуть. И бонусом добавлю комментарии для самых-самых начинающих: как учиться/где/на что обратить внимание.

Просьба. Если Вам что-то не понравится, ПОЖАЛУЙСТА, высказывайтесь в комментариях к статье, а не вконтакте или на форумах). Ваши полезные комментарии тонут, а я не успеваю отвечать и вносить по ним правки в статью

Готовимся к интервью

Чтобы хорошо подготовиться к техническому собеседованию нужно вспомнить/изучить/проработать многие вопросы. Я разбил вопросы по группам, они совпадают с темами из вопросов для unity3d программиста). Давайте их подробно рассмотрим.

Общие вопросы

Техническое собеседование скорее всего начнется с простых вопросов о предыдущем опыте кандидата или не технических вопросов. Часто кандидату предлагают самому рассказать о себе и своем опыте. Мои мысли на счет этой части интервью такие: нужно быть готовым. Порепетируйте. Очень часто я пишу сопроводительные письма к отклику на вакансию на хедхантере или когда просто шлю резюме на почту. Это примерно и есть то, что Вас попросят рассказать. Расскажите заранее, заодно потренеруетесь.
Если коммерческого опыта нет: расскажите о ваших наработках, лабораторных, собственных проектах и даже принесите ноутбук с вашим кодом!

Читай также:  Дизайн смерти игрока. Добавляем глубины с помощью намерений и значения

Алгоритмы и структуры данных

Эта область, кмк, которая программиста-профессионала отличает от начинашки. Лучшим ресурсом для изучения базовых алгоритмов считаю русскоязычный курс Александра Куликова в Computer Science Center: Семестр раз, Семестр два.
А сам Computer Science Center очень хороший обучающий центр, который всем очень рекомендую.
Рекомендаций по книгам в этом разделе никаких приводить не буду, их довольно много.
Видео-курс смотрится очень быстро, и на самой первой лекции рекомендации по книгам, для тех кто предпочитает читать, а не смотреть/слушать тоже дадут.

Графика/3D математика/Rendering pipeline

Программирование графики очень тесно связано с математикой. Линейной алгеброй в частности. Матрицы, векторы, кватернионы и операции над ними — это необходимый базис, без которого в программировании графики никак не обойтись.

Математика

Лучшие книги для изучения математики. Две из них можно найти в pdf, в интернете, а Foundations не встречал.
Очень советую приобрести ее на амазоне. Довольно неплохой paperback, качественная бумага, картинки. Содержание, само собой, просто супер.

Все три книги ориентированы именно на тех, кто интересуется математикой применительно к программированию графики и игр в целом. В книге 3D Math Primer for Graphics and Game Development даже главы про работу графического пайплайна и шейдеры есть.

Графика

Непосредственно посвященные программированию графики книги:

Книги

Давайте начнем с книг. Очень хороший туториал есть у nVidia, лаконичный и очень по делу.
Еще есть книга Кенни Ламмерса. Это сборник рецептов, можно пытаться повторять, можно полистывать иногда, но учиться писать шейдеры по ней нельзя с нуля. Нужно изучить математику, нужно изучить синтаксис и возможности CgFx. У Ламмерса этого нет. Поможет книга от nVidia и чтение документации Unity.

C# и .Net

Я рекомендую подойти к изучению языка основательно. Не стоит смотреть видео «как сделать платформер/три-в-ряд/другой-жанр» на ютубе от героев-скриптеров. Даже обучающие видео от Unity я не рекомендую, не нужно изучать язык по ним.

C# мощное оружие, которым нужно уметь владеть основательно. На мой субъективный взгляд лучше всего изучить C# вне Unity вообще, писать консольный, оконные приложения в студии и читать книгу Эндрю Троелсена. Поднаторев перейти на Рихтера и Скита.

Читай также:  Unity 2017. Что новенького приготовили разработчики?

Книга Джефри Рихтера — это огромный талмуд и прочитать ее очень сложно, там все тонкости CLR, .NET. А вот книга Джона Скита читается очень легко, и становится ясно почему разработчики языка привносили те или иные синтаксические удобства.

Unity3d

Я не читал ни одной книги по Unity, но слышал о существовании «Unity в действии» (Unity in Action). Если кто-то читал, отпишитесь пожалуйста, в комментариях.

На момент моего начала с Unity я довольно хорошо был знаком с C#. Порог входа у нее очень низкий. Тоесть время, чтобы начать программировать на Unity очень небольшое, по сравнению с другими игровыми движками и .NET технологиями.

Советы от меня

Этой мой путь, поэтому, наверное я его и рекомендую, не бросайтесь делать поделки, когда вы не знакомы с языком и программированием вообще.

Сначала алгоритмы, концепции, аббревиатуры (имею ввиду, почитайте про выработанные практики: SOLID, DRY, GRASP, KISS). И много-много практики, пишите код, много кода. Изучите слепой десятипальцевый метод печати и пишите код быстро. Сейчас я тьфу-тьфу-тьфу боюсь представить на сколько замедлится моя производительность если я сломаю палец (однажды в детстве ломал, почти вся кисть в гипсе). Уже очень привык и думать и печатать с определенной скоростью. Если скорость печати будет в 3-4 раза ниже, чем скорость мысли, наверняка и сконцентрироваться очень сложно. Бррр, страшно подумать.

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

А потом придет, рационализм, и Вы будете писать код, которые решает задачи. Не без оглядки на возможные изменения в задачах, конечно.

Про устройство в студию мечты

Совсем недавно читал большую дискуссию в твиттере, которую организовала @sehurlburt, с участием известных графических инженеров и выцепил несколько хороших идей. Далее следует мой вольный их перевод. Ссылки с символом «@» ведут на оригинальные твиты, которые можно прочитать. А так же можно подписаться на их авторов в твиттере, порой там появляются очень интересные ссылки и мысли.

Читай также:  Кроссплатформенный движок игровой графики - 1

@sehurlburt (Stephanie Hurlburt, Graphics Engineer)
Начинайте изучать новую большой область, такую, как например, программирование графики понемногу. Ставьте себе небольшие задачи и выполняйте их, таким образом вы научитесь очень многому. Огромный плюс такого подхода заключается в том, что вы будете оставаться сфокусированы на конкретной задаче. И, что немаловажно, выполнив какое-то завершенное демо, вы сможете представить его на интервью в качестве портфолио.

@Atrix256 (Alan Wolfe, Graphics Programmer at Blizzard)
Рекомендую пробовать проходить интервью в студию мечты и в случае отказа, пытаться через полгода.

@IonSwitz (Henrik Jonsson, Graphics Programmer EA)
Посылайте резюме, даже если в данный момент открытых вакансий нет.

Особенно полезен 1й совет Стефани! Сам стараюсь придерживаться такой же тактики. Сейчас я делаю небольшой игровой движок в качестве обучения. И всегда ставлю небольшую цель для демки, например: «Сделать демо с летающим космическим кораблем». Исходя из такого определения задачи для демо, я разбил это на подзадачи: скайбокс со звездами, космическая станция относительно которой будет заметно движение корабля, загрузка моделей, загрузка текстур, математика трансформа и тд. Посмотреть, что у меня получилось: первое демо.

Конец

В конце хочу сказать, никогда не отчаивайтесь, если что-то не получается. Учитесь программировать, читайте книги по разным областям программирования: графика, AI, физика. Ходите на интервью часто, не оседайте и вообще оставайтесь голодными до новых знаний. Учитесь всегда! Ставьте под сомнение все!
Эта статью в том числе 🙂

Буду признателен более опытным коллегам за любые советы программистам в комментариях!

Полезные ссылки

Подборка ресурсов по Unity3d — собранные мной полезные материалы по теме Unity3d.

Ресурсы для программистов графики — полезнейшие ссылки по теме программирования графики: рецепты, статьи и видео.

Ребята! Пожалуйста, если Вам понравилась статья — пошарьте её в соц. сетях, особенно ценны Facebook и Google+
Это очень поможет нашему блогу, огромное спасибо!
, , ,