Поручили работу, которую я не могу сделать

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

Во всяком случае, я работаю на этой работе уже почти год в качестве универсального программиста. Мы довольно небольшая команда в компании. Моя работа заключалась в основном в рефакторинге кода, улучшении функций и исправлении ошибок. Я работал с еще одним человеком, который гораздо более опытен. Они были повышены в должности и больше не программировались. Мне дали их работу.

Проблема в том, что они программисты графики. Сейчас большая часть моей работы связана с 3D-математикой. Я бросил математику в 10 классе, повторил ее в колледже и едва сдал. Я ужасен в математике и не получаю от этого удовольствия. Моя новая работа связана с темой, о которой я абсолютно ничего не знаю. Хотя это неплохо, так как я выучил много вещей и языков, когда начинал эту работу, теперь я являюсь основной линией поддержки для многих крупных команд. Мне поручено устранять ошибки в графическом конвейере, в то время как я едва могу выполнять матричное умножение. Я не знаю ни терминологии, ни математики.

Как мне сказать своему боссу, что я не подхожу для этой работы? На собеседовании меня спросили о моих математических способностях, и я сказал им, что они плохие. В то время они сказали, что это не имеет значения.

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

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

Есть ли у вас кто-нибудь, кто может стать наставником по математическим темам 3D?
Очевидно, вы освоили важные и сложные темы. Вы можете сделать то же самое с математическими навыками. Проблема в том, что это займет много времени и внимания, а делать это самостоятельно (или даже с неформальным наставником) вне структуры курса с серьезными домашними заданиями и экзаменами гораздо сложнее. Там нет ярлыков с этим материалом.
Не могли бы вы добавить, заинтересованы ли вы в том, чтобы научиться делать 3D-путь, или вы предпочитаете этого не делать. Лучший ответ, если вы хотите врезаться в него со словами: «Я не знаю, что делаю, но черт возьми, я попробую!» сильно отличается от лучшего ответа, если вы хотите сказать: «На самом деле я не получаю удовольствия от такой работы».
Мне это не нравится, но я чувствую, что это потому, что мне не нравятся вещи, в которых я плох. Я не хочу, чтобы это был мой выбор карьеры. Но я не ненавижу это.
Комментарии не для расширенного обсуждения; этот разговор был перемещен в чат .
Я думаю, что люди наметили отличные способы справиться с этим. Но если быть предельно честным, если вам не нравится математика, значит, вы не в той области, приятель, разработка игр сильно зависит от тригонометрии, линейной алгебры. С другой стороны, вы можете начать изучать математику и напрямую применять ее в играх, применяя практический подход. Это может снова пробудить ваш интерес к математике и облегчить вашу жизнь.
Для здоровья задействованного программного обеспечения важно, чтобы кого-то, кто чувствует себя так некомфортно с продвинутой математикой , не заставляли поддерживать ее таким образом. Тот, кто продвигал другого программиста, должен знать, что ему нужно заменить его другим экспертом по 3D-графике.

Ответы (5)

Кое-что, что я усвоил как из личного опыта, так и из наблюдений (в основном, наблюдая за своими детьми), состоит в том, что если вы убеждены, что не можете что-то сделать, вы будете бороться с этим. Вы просто, кажется, не прикладываете к этому силу ума, потому что просто знаете , что потерпите неудачу.

Так что я дам вам тот же совет, что и своим детям :) Вместо того, чтобы рассматривать всю проблему «Я не умею делать математику», разбейте ее на более мелкие части. Выберите то, что вы почти понимаете, а затем попытайтесь применить это к практическим задачам, для которых вы это используете. Помните, что математика — это процесс, алгоритм, как и программирование. Сделайте один шаг, затем следующий, примените правила, и вы получите ответ :)

Теперь, как управлять этим с вашим боссом? Ну, вы обсуждали со своим менеджером, что у вас проблемы? Если он или она не знает, то они не могут вам помочь. Вы могли бы сказать, что попытаетесь научиться, но это потребует времени и, возможно, некоторого обучения, которое могло бы помочь. Тогда менеджер может управлять риском оставить вас там или найти кого-то другого, кто возьмет на себя эту роль.

Я бы поговорил с вашим боссом, сказал бы им, где у вас возникли трудности, и что вам может потребоваться больше времени на эти задачи, пока вы пытаетесь понять сложность математики, стоящую за ними. Тогда, если вы действительно, действительно не можете этого сделать, вы сделали все, что могли, и убедились, что люди, которым нужно знать, делают :)

Они готовы научить меня, поскольку я медленно изучаю это некоторое время. Они возьмут на себя более сложные проблемы. Этого больше не происходит. В основном это сообщения об ошибках. Поэтому их нужно исправлять как можно скорее, так как их может ждать целая команда. Я чувствую, что у меня недостаточно времени, чтобы учиться, я чувствую, что мой босс может начать терять терпение, хотя это просто у меня в голове.
Если вы уведомили их о своих проблемах, и они готовы дать вам некоторое время, то они несут риск задержек, пока вы учитесь, а не вы. Держите своего менеджера в курсе вашего прогресса, сосредоточьтесь на обучении и скорости, когда вы будете лучше знакомиться со всем.
Если босс поручил вам его, зная, что вы все еще изучаете этот код и предположения, лежащие в его основе, тогда босс не может ожидать, что вы будете обрабатывать отчеты об ошибках так же эффективно, как те, кто годами пялился на этот код. И начальник, если он вообще компетентен, знает это и знает, что было принято обдуманное решение переназначить других людей и не тратить деньги на найм кого-то нового. Так что большая часть давления, которое вы испытываете, — по крайней мере, в хорошем случае — создается вами самими. Ставьте перед собой реалистичные цели, действуйте шаг за шагом и примите тот факт, что более медленные исправления все равно остаются исправлениями.
@кешлам Точно :)
Второй абзац имеет решающее значение. Вероятно, каждый столкнется в своей карьере с какими-то проблемами, которые поначалу кажутся непреодолимыми горами. Мой подход в таких случаях был именно тем, что рекомендуется здесь: найти слабое место (подзадачу, которая выглядит выполнимой) и начать откусывать. Уроки, извлеченные из первых кусочков, применяются на следующих этапах, пока человек не проложит туннель через эту гору. Самое приятное: однажды пройдя через этот процесс и увидев, что вы можете добиться успеха перед лицом невзгод, у вас будет больше уверенности, когда возникнет следующая такая проблема.
+1: Whether you think you can or think you can't, you're right - Henry Ford.
В частности, в случае с 3D-графикой очень помогает создание действительно простых игрушечных приложений, с которыми вы можете играть, чтобы понять преобразования. Это очень практичный способ разбить всю «3D-математику» на более доступные задачи, с которыми вы можете поэкспериментировать и почувствовать. И вот вам небольшой секрет: огромное количество программистов в играх на самом деле не до конца понимают всю используемую ими математику. Вероятно, у них есть некоторые познания в математике, но в основном они знают методы и способы их применения.
Вот очень полезный ресурс для изучения необходимой вам математики: euclideanspace.com . Охватывает широкий спектр тем от простых векторов до двойных кватернионов. Отказ от ответственности: я разместил на этом сайте небольшой материал о двойных кватернионах.
@marsh: Привет, у меня было кое-что, я бы назвал очень успешным подходом к обучению, когда дело доходит до программирования игр. В детстве мы играли в 3D игры. Друг узнал, что ты умеешь моделировать в 3d Studio MAX. Я попробовал поиграть с ним, и мне стало настолько интересно, что я буквально мог проводить ночи, просто пытаясь сделать что-нибудь классное (птицу, кактусы, руку и т. д.). В процессе я узнал массу ограничений, просто наткнувшись на них: объекты только односторонние (нормальная концепция), человеческие модели имеют швы (ультрафиолетовые текстуры плоские), n-угольники с более чем 4 сторонами — это мусор, если не плоские и т.д.
@marsh: в конце: есть больше неправильных, чем хороших способов смоделировать полет самолета (карданный замок), все органические формы аппроксимированы (тесселяция), вы даже не можете сделать идеальный круг с помощью инструмента Безье (по крайней мере, наиболее часто используемый рациональный с 4 ручками управления). Позже в жизни у меня было очень мало проблем с пониманием большинства математических концепций, стоящих за этим (проекции, кросс-векторные операции, вращения, мир, представление, матрицы моделей и т. д.). Понять это только на уровне «мысли» крайне сложно. Многие часы игры очень хорошо научили меня этим понятиям.
@marsh: Итак, математика в программировании игр — usedэто инструмент для достижения some goal. Например, матричный стек, который кажется очень пугающим (зачем лишний вес? 4 уравнения вместо 3 для 3d? Почему именно такой порядок умножения?), на самом деле прост, если вы думаете об этом в терминах моделирования: камера вон там (матрица обзора), которая относительно центра сцены (матрица мира), где стоит парень (матрица модели) и имеет суставы, из которых я непосредственно контролирую тазобедренный (корень IK- и иерархия FK-цепей), а остальное следует (локальная матрица преобразования).
Я думаю, что все здесь чрезвычайно упрощают, насколько сложным является конвейер рендеринга игровой студии AAA. Рендеринг — это не просто перемножение нескольких матриц. Это действительно не то, чему вы научитесь за пару выходных. Здесь мы говорим об овладении вершиной 3D-рендеринга в реальном времени. Маршу нужно решение для его текущей ситуации. Ни одного за пару лет. Обратите внимание, что я определенно не говорю, что это не обучаемый навык, но, как и со всеми сложными вещами, это займет много времени!
@RoyT.: Я согласен. Я сделал свой комментарий, имея в виду то, что я забыл написать. Все поначалу ошеломлены, когда сталкиваются с новым доменом. В конце концов, этому надо учиться, коротких путей нет. Это не значит, что нужно знать все в один момент. Лучше всего получить начальное приближение к предметной области и специализироваться на тех областях, где преобладают запросы на изменение. Это то, что можно сделать за неделю. Самое главное в самом начале — знать, какие части знать НЕ обязательно.
@Rekin, извините, я не знаю, что такое «приближение вводной области». Но я думаю, что в математике и 3D-рендеринге очень мало простых способов. У вас должна быть прочная основа, прежде чем вы сможете пропустить части и сосредоточиться на нескольких предметах. Но, кажется, мы отвлеклись от вопроса. Давайте просто согласимся с тем, что требуется нетривиальное количество времени, прежде чем у вас появятся полезные знания, которые вы сможете использовать на рабочем месте.

Все ответы до сих пор предполагают, что вы можете выучить всю математику 3D-графики (а я уверен, что вы можете), что вам это понравится (что может быть неправдой) и что вы можете выучить все это достаточно быстро, чтобы вы можете применять эти методы СЕГОДНЯ в производственной среде (что, вероятно, неверно).

Я думаю, что лучшее, что вы можете сделать, это поговорить со своим непосредственным руководителем. Сказать, что вы не в состоянии выполнять часть своей работы к собственному удовлетворению, не означает проявить слабость, это показывает, что вы критически относитесь к своей работе и способностям и хотите лучшего для компании. Не забудьте добавить (если хотите), что вы готовы изучить эти техники, но ищете курсы или наставника, который поможет вам в этом. Это отличная возможность улучшить себя и сделать себя более ценным для компании. (Вещи, которые менеджеры любят видеть).

Я согласен. «Изучай это» достаточно легко сказать, но когда большинство очных курсов бакалавриата по компьютерной графике едва касаются поверхности компьютерной графики, это не является разумным ответом в краткосрочной перспективе. В долгосрочной перспективе вы можете стать компетентным, да, но нужно что-то делать в краткосрочной перспективе, пока вы все еще ищете, что означает любое из слов.
@DavidTheWin +1. В моем университете мы обязаны изучать линейную алгебру и вплоть до исчисления II. Тем не менее, мы никогда не узнаем ничего, связанного с компьютерной графикой, если только вы не пройдете один курс по графике, предлагаемый раз в 2 года , и даже если вы его пройдете, вы едва коснетесь поверхности фактического программирования графики, и, конечно, не для видеоигр (мы просто создаем статические модели, которые не двигаются), и, конечно же , не в производственной среде, где можно работать на уровне C. +1 и тебе, Рой, твой первый абзац точен.

Будьте коммуникабельны и не бойтесь переборщить. Делайте все возможное, чтобы предоставлять точные оценки и рейтинги сложности задач. Если вам нужна помощь, спросите, если нет помощи на месте, довольно часто переполнение стека даст вам ответы быстрее, чем люди, с которыми вы работаете, если вы четко задаете вопросы и предоставляете правильные детали. Учитесь как можно больше и как можно быстрее, и как только вы поймете, что это такое, это не будет казаться таким сложным. Попробуйте найти несколько семинаров, чтобы получить больше опыта, или следуйте инструкциям в Интернете. Если вы прикладываете усилия, и ваша команда это видит, часто это идет вам на пользу. Большинство людей предпочли бы работать с увлеченным и целеустремленным человеком, чем со всезнайкой-островитянином.

У меня есть докторская степень по математике. Однажды мне пришлось объяснять линейную алгебру студенту после того, как несколько лет я никогда не перемножал матрицы. Я понял, что забыл правило умножения матриц*, но, что интересно, я все еще мог объяснить многое из линейной алгебры. Причина в том, что многие концепции линейной алгебры не касаются таких деталей, как умножение матриц.

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

  • как вещь эго, позвольте мне упомянуть, что я смог вывести правило для студента.
Правильно, и матрицы в 3D в основном представляют собой 4 упакованных вектора, которые описывают базисные векторы координат x, y, z и смещение начала координат. Также я сомневаюсь, что ему когда-либо понадобится выполнять часть умножения.
@joojaa: Да, и все это сводится к массивам массивов - это то, чему вы научитесь в течение первого месяца программирования.
Использование библиотеки = очень хорошо. Копирование кода, который вы не понимаете = очень плохо . Единственный способ использовать скопированный код — это изолировать его в самой библиотеке, четко помеченной как скопированный и с включенным исходным URL-адресом, чтобы будущие посетители знали, откуда он взят.
Это настолько плохая идея, что у нее есть имя — en.wikipedia.org/wiki/Cargo_cult_programming

Я был в таких ситуациях, как твоя, и никогда не бывает хорошо, когда ты теряешься и теряешься. Если это действительно работа вашей мечты, то единственный выход — разобраться в ней. Вы не можете вечно оставаться младшим программистом, выполняющим черную работу.

Ключ в том, чтобы найти кого-то, кто работал над кодом до вас, кто может вас наставлять. Это отношения, которыми вы должны хорошо управлять, потому что у вашего наставника будет своя работа, и у него не всегда будет время для вас. Для начала я бы попросил тех, кто раньше работал над этим кодом, посвятить с вами час или два и пройтись по нему. Не стесняйся. Задавайте вопросы, делайте заметки и т. д. Используйте время, которое этот человек посвятил вам. Надеюсь, вы узнаете достаточно, чтобы уверенно погрузиться в код. Если нет, то, возможно, эта работа все-таки не для вас.

После этого у вас наверняка появятся еще вопросы, но вы должны попытаться разобраться в них самостоятельно. Старайтесь использовать своего наставника только в крайнем случае. Делайте домашнее задание, чтобы не выглядеть глупо и не тратить их время. Объясните, как вы пришли к вопросам, которые у вас есть. Скажите что-нибудь вроде: «Я вычислил X и вычислил Y, но я не понимаю, как X и Y составляют Z». Если вы продемонстрируете, что изучаете этот материал и действительно стараетесь, люди будут намного более открыты и восприимчивы к вашим вопросам.

«Нельзя вечно оставаться младшим программистом, выполняющим черную работу». Совершенно верно, что-то я не учел.