Me asignaron un trabajo que no puedo hacer

Soy un recién graduado que se mudó al otro lado del país para conseguir el trabajo de sus sueños en la programación de juegos. Trabajé en una empresa independiente durante un año y luego fui contratado por una de las empresas más grandes. Este es un sueño hecho realidad para mí, ya que fue la única razón por la que fui a la escuela. Soy bastante nuevo en la industria y estoy luchando por sentirme competente.

De todos modos, he estado trabajando en este trabajo durante casi un año como programador generalista. Somos un equipo bastante pequeño en la empresa. Mi trabajo ha consistido principalmente en refactorizar código, características y corrección de errores. Trabajé con otra persona que tiene mucha más experiencia. Fueron ascendidos y ya no programan. Me han dado su trabajo.

El problema es que son programadores gráficos. Gran parte de mi trabajo ahora es matemática en 3D. Dejé las matemáticas en el grado 10, lo hice de nuevo en la universidad y apenas aprobé. Soy terrible en matemáticas, y no lo disfruto. Mi nuevo trabajo es sobre un tema del que no sé absolutamente nada. Si bien esto no es algo malo, ya que aprendí muchas cosas e idiomas cuando comencé este trabajo, ahora soy la línea principal de apoyo para muchos equipos grandes. Tengo la tarea de resolver errores en una canalización de gráficos, mientras que apenas puedo hacer la multiplicación de matrices. No sé nada de terminología y nada de matemáticas.

¿Cómo le digo a mi jefe que no soy apto para este trabajo? Me preguntaron mis habilidades matemáticas en la entrevista y les dije que no eran buenas. En su momento dijeron que no importaba.

Parte del problema también es que ya no hay nadie para hacer estas tareas. Soy muy consciente de que la respuesta al problema puede ser absorberlo y solucionarlo.

Si es importante, esta es una empresa muy grande y es posible que se transfiera a un nuevo equipo. Pero me gustaría evitarlo a toda costa porque disfruté del equipo y del trabajo.

¿Tiene a alguien que pueda servir como mentor para los temas de matemáticas en 3D?
Obviamente, has dominado temas significativos y difíciles. Puedes hacer lo mismo con las habilidades matemáticas. El problema es que requerirá mucho tiempo y atención, y es mucho más difícil si lo hace usted mismo (o incluso con un mentor informal) fuera de la estructura de un curso con tareas y exámenes serios. No hay atajos con esas cosas.
¿Podría agregar si está interesado en intentar aprender a hacer el camino 3D o si prefiere no hacerlo? La mejor respuesta si quieres profundizar en ello con el "¡No sé lo que estoy haciendo, pero lo intentaré!" es muy diferente a la mejor respuesta si quieres decir "En realidad no disfruto de ese tipo de trabajo".
No lo disfruto, pero siento que es porque no disfruto las cosas en las que soy malo. No quiero que esta sea mi elección de carrera. Pero no lo odio.
Los comentarios no son para una discusión extensa; esta conversación se ha movido a chat .
Creo que la gente ha esbozado excelentes maneras de lidiar con esto. Pero siendo brutalmente honesto, si no te gustan las matemáticas, estás en el campo equivocado amigo, el desarrollo de juegos es pesado en trigonometría, álgebra lineal. Por otro lado, puedes empezar a aprender matemáticas y aplicarlas directamente a los juegos, con un enfoque práctico. Eso podría aumentar tu interés por las matemáticas y hacerte la vida más fácil.
Es importante para la salud del software involucrado que alguien que se siente tan incómodo con las matemáticas avanzadas no lo soporte así. Quien ascendió al otro programador debe saber que necesita reemplazarlo con otro experto en gráficos 3D.

Respuestas (5)

Algo que he aprendido tanto de la experiencia personal como de la observación (principalmente observando a mis hijos) es que si estás convencido de que no puedes hacer algo, tendrás dificultades para hacerlo. Parece que no le aplicas el poder del cerebro porque sabes que fallarás.

Así que les daré el mismo consejo que les doy a mis hijos :) En lugar de ver todo el problema de "No puedo hacer matemáticas", divídalo en partes más pequeñas. Elija algo que casi entienda y luego intente aplicarlo a los problemas prácticos para los que lo está usando. Recuerde, las matemáticas son un proceso, un algoritmo, al igual que la programación. Da un paso, luego el siguiente, aplica las reglas y obtendrás la respuesta :)

Ahora, ¿cómo manejar esto con tu jefe? Bueno, ¿le ha comentado a su gerente que está teniendo problemas? Si él o ella no lo sabe, entonces no puede ayudarte. Podría decir que intentará aprender, pero llevará tiempo y tal vez algo de capacitación que pueda ayudar. Luego, el gerente puede administrar el riesgo de mantenerlo allí o encontrar a otra persona para que asuma ese rol.

Hablaría con su jefe, le diría dónde tiene dificultades y que puede demorar más en estas tareas mientras intenta comprender la complejidad de las matemáticas detrás de esto. Entonces, si realmente no puedes hacerlo, has hecho todo lo posible y te aseguraste de que las personas que necesitan saber lo hagan :)

Están dispuestos a enseñarme, ya que lo he estado aprendiendo lentamente durante un tiempo. Se harían cargo de los problemas más difíciles. Esto ya no está sucediendo. Estos son en su mayoría informes de errores. Por lo tanto, deben repararse lo antes posible, ya que es posible que todo un equipo esté esperando. Siento que no tengo suficiente tiempo para aprender, siento que mi jefe se está impacientando, aunque eso solo está en mi cabeza.
Si les ha notificado sus inquietudes y están preparados para darle algo de tiempo, entonces ellos corren el riesgo de demoras mientras aprende, no usted. Mantenga a su gerente actualizado sobre su progreso, concéntrese en aprender y la velocidad llegará a medida que se familiarice con todo.
Si el jefe te asignó, sabiendo que todavía estás aprendiendo este código y las suposiciones detrás de él, entonces el jefe no puede esperar que manejes los informes de errores tan eficientemente como aquellos que han estado mirando este código durante años. Y el jefe, si es que es competente, lo sabe, y sabe que se tomó una decisión deliberada para reasignar a las otras personas y no gastar el dinero para contratar a alguien nuevo. Entonces, gran parte de la presión que sientes es, al menos en el buen caso, autogenerada. Fíjese objetivos realistas, tómelos paso a paso y acepte que las soluciones más lentas siguen siendo soluciones.
@keshlam Exactamente :)
El segundo párrafo es crucial. Es probable que todo el mundo se encuentre con algunos problemas en su carrera que al principio parecen montañas insuperables. Mi enfoque en esos casos ha sido precisamente lo que se recomienda aquí: encontrar un punto débil (una subtarea que parezca factible) y empezar a mordisquear. Las lecciones aprendidas de los primeros mordiscos se aplican a las siguientes etapas hasta que uno ha atravesado esa montaña. La mejor parte: una vez que haya pasado por el proceso una vez y haya visto que puede tener éxito frente a la adversidad, tendrá más confianza cuando surja el siguiente problema.
+1: Whether you think you can or think you can't, you're right - Henry Ford.
Una cosa que ayuda mucho en el caso de los gráficos 3D, en particular, es crear aplicaciones de juguetes realmente simples con las que puedes jugar para comprender las transformaciones. Esta es una forma muy práctica de dividir la totalidad de las "matemáticas 3D" en tareas más accesibles con las que puede experimentar y familiarizarse. Y aquí hay un pequeño secreto: una gran cantidad de programadores en juegos en realidad no entienden completamente todas las matemáticas que usan. Es probable que tengan alguna base en matemáticas, pero sobre todo conocen las técnicas y cómo aplicarlas.
Aquí hay un recurso muy útil para aprender el tipo de matemáticas que necesita: euclideanspace.com . Cubre una variedad de temas, desde vectores simples hasta cuaterniones duales. Descargo de responsabilidad: Contribuí con una pequeña cantidad de material sobre cuaterniones duales a este sitio.
@marsh: Hola, tenía algo que llamaría un enfoque de aprendizaje muy exitoso en lo que respecta a la programación de juegos. Cuando éramos niños, solíamos jugar juegos en 3D. Un amigo descubrió que podías modelar en 3d Studio MAX. Intenté jugar con él y me interesó tanto que, literalmente, podía pasar noches tratando de hacer algo genial (un pájaro, un cactus, una mano, etc.). En el proceso, aprendí un montón de restricciones, simplemente golpeándolas: los objetos son de un solo lado (concepto normal), los modelos humanos tienen costuras (las texturas UV son planas), los n-gons con más de 4 lados son basura si no plano, etc.
@marsh: ctd .: hay más formas incorrectas que buenas de modelar un avión volando (bloqueo de cardán), todas las formas orgánicas son aproximadas (teselado), ni siquiera puede hacer un círculo perfecto con una herramienta Bezier (al menos la racional más utilizada). con 4 manijas de control). Más tarde en la vida, tuve muy pocos problemas para comprender la mayoría de los conceptos matemáticos detrás de esto (proyecciones, operación de vectores cruzados, rotaciones, mundo, vista, matrices de modelos, etc.). Es extremadamente difícil entender estas cosas solo en el nivel del "pensamiento". Muchas horas de juego me han enseñado muy bien los conceptos.
@marsh: Entonces, las matemáticas en la programación de juegos son useduna herramienta para lograr some goal. Por ejemplo, la pila de matrices, que parece muy intimidante (¿cuál es el peso adicional para 4 ecuaciones en lugar de 3 para 3d? ¿Por qué este orden particular de multiplicación?) es realmente simple si lo piensas en términos de modelado: Oh, entonces puse cámara allá (view matrix), que es relativa al centro del escenario (world matrix), donde se para un chico (model matrix) y tiene articulaciones, de las cuales la que controlo directamente es la de la cadera (raíz de IK- y jerarquía de cadenas FK) y el resto sigue (matriz de transformación local).
Creo que todos aquí están simplificando demasiado lo complejo que es el proceso de renderizado de un estudio de juegos AAA. Renderizar no es solo multiplicar algunas matrices. Realmente no es algo que se aprende en un par de fines de semana. Estamos hablando de dominar el pináculo de la representación 3D en tiempo real aquí. Marsh necesita una solución para su situación actual. Ni uno para dentro de un par de años. Tenga en cuenta que definitivamente no estoy diciendo que no sea una habilidad que se pueda aprender, pero como con todas las cosas complejas, ¡llevará mucho tiempo!
@RoyT.: Estoy de acuerdo. Hice mi comentario, con algo en mente, que olvidé escribir. Todo el mundo se siente abrumado al principio, cuando se enfrenta a un nuevo dominio. Al final, uno tiene que aprenderlo, no hay atajos. Eso no quiere decir, uno tiene que saber todo en un momento. Lo mejor es obtener una aproximación de dominio introductoria y especializarse en áreas donde dominan las solicitudes de cambio. Esto es algo que se puede hacer, en un plazo de semanas. Lo más importante desde el principio es saber qué partes NO tienen que ser conocidas.
@Rekin, lo siento, no sé qué es la "aproximación de dominio introductoria". Pero creo que hay muy pocos atajos cuando se trata de matemáticas y renderizado 3D. Debes tener una base sólida antes de poder saltarte partes y concentrarte en algunos temas. Pero parece que nos estamos desviando de la pregunta. Solo aceptemos que se necesita una cantidad de tiempo no trivial antes de que tenga un conocimiento útil que pueda usar en el piso de trabajo.

Todas las respuestas hasta ahora suponen que puede aprender todas las matemáticas de gráficos 3D (que estoy seguro de que puede), que disfrutará haciéndolo (lo que podría no ser cierto) y que puede aprender todo lo suficientemente rápido para que puede aplicar estas técnicas HOY en un entorno de producción (lo que probablemente no sea cierto).

Creo que lo mejor que puede hacer es hablar con su supervisor directo. Decir que no puede realizar una parte de su trabajo a su propia satisfacción no es mostrar debilidad, muestra que es crítico con su propio trabajo y capacidades y que quiere lo mejor para la empresa. Asegúrate de agregar (si quieres) que estás dispuesto a aprender estas técnicas pero que estás buscando cursos o un mentor que te ayude a hacerlo. Esta es una gran oportunidad para mejorar y hacerse más valioso para la empresa. (Cosas que a los gerentes les encanta ver).

Estoy de acuerdo. "Aprender" es bastante fácil de decir, pero cuando la mayoría de los cursos de informática de pregrado de tiempo completo apenas rascan la superficie de los gráficos por computadora, no es una respuesta razonable a corto plazo. A largo plazo, puede volverse competente, sí, pero es necesario que se haga algo a corto plazo mientras aún está buscando el significado de cualquiera de las palabras.
@DavidTheWin +1. En mi universidad, estamos obligados a aprender álgebra lineal y hasta cálculo II. Sin embargo, nunca aprendemos nada relacionado con los gráficos por computadora a menos que tome el curso de gráficos que se ofrece una vez cada 2 años , e incluso si lo toma, apenas rasca la superficie de la programación de gráficos real, y ciertamente no para los videojuegos (solo creamos modelos estáticos que no se mueven), y ciertamente no en un entorno de producción donde está bien hacer un trabajo de 'nivel C'. +1 a ti también Roy, tu primer párrafo es perfecto.

Sea directo en la comunicación y no tenga miedo de sobrecomunicarse. Haga todo lo posible para proporcionar estimaciones precisas y calificaciones de complejidad para las tareas. Si necesita ayuda, pregunte, si no hay ayuda localmente, a menudo el desbordamiento de pila le dará respuestas más rápidas que las personas con las que está trabajando si hace preguntas claramente y proporciona los detalles correctos. Aprende todo lo que puedas lo más rápido que puedas, una vez que entiendas las cosas, no parecerá tan complicado. Intente encontrar algunos talleres para obtener más experiencia o siga algunos tutoriales en línea. Si está haciendo un esfuerzo y su equipo lo ve, a menudo eso lo beneficiará. La mayoría de la gente preferiría trabajar con alguien apasionado y motivado que con un sabelotodo que es una isla.

Tengo un doctorado en matemáticas. Un día tuve que explicarle álgebra lineal a un estudiante después de algunos años de nunca haber multiplicado matrices. Me di cuenta de que había olvidado la regla de multiplicación de matrices*, pero, curiosamente, aún podía explicar mucho álgebra lineal. La razón es: muchos conceptos de álgebra lineal no se tratan de detalles como cómo multiplicar matrices.

En su trabajo, puede simplemente usar una biblioteca o copiar y pegar código. Lo importante es entender las ideas, que es algo en lo que quizás no seas malo. Nunca lo sabrás a menos que lo intentes.

  • como una cuestión de ego, permítanme mencionar que pude derivar la regla para el estudiante.
Derecha, y las matrices en 3D son en su mayoría 4 vectores empaquetados que describen los vectores de base cordinados x, y, z y el desplazamiento del origen. También dudo que alguna vez necesite hacer la parte de la multiplicación.
@joojaa: Correcto, y todo se reduce a conjuntos de conjuntos, que es algo que aprendes durante el primer mes de programación.
Usar una biblioteca = muy bueno. Copie y pegue el código que no entiende = muy mal . La única forma de usar código copiado y pegado es aislarlo en una biblioteca propiamente dicha, claramente marcado como copiado y pegado y con la URL de origen incluida, para que los futuros visitantes sepan de dónde es.
Es una mala idea que tenga un nombre: en.wikipedia.org/wiki/Cargo_cult_programming

He estado en situaciones como la tuya, y nunca es una buena sensación estar abrumado y perdido. Si este es realmente el trabajo de tus sueños, entonces la única opción es descubrirlo. No puedes seguir siendo un programador junior haciendo tareas domésticas para siempre.

La clave es encontrar a alguien que haya trabajado en el código antes que usted y que pueda ser su mentor. Esta es una relación que debes manejar bien, porque tu mentor tendrá su propio trabajo que hacer y no siempre tendrá tiempo para ti. Para empezar, le pediría a quienquiera que haya trabajado antes en ese código que dedique una o dos horas contigo y lo analice. No seas tímido. Haz preguntas, toma notas, etc. Aprovecha el tiempo que esa persona te ha dedicado. Con suerte, aprenderá lo suficiente como para sumergirse en el código con confianza. Si no, entonces tal vez este no sea el trabajo para ti después de todo.

Después de eso, seguramente tendrá más preguntas, pero debe tratar de resolverlas por su cuenta. Trate de usar a su mentor solo como último recurso. Haz tu tarea para no quedar como un tonto y hacerles perder el tiempo. Explica cómo llegaste a las preguntas que tienes. Di algo como: "Descubrí X y descubrí Y, pero lo que no entiendo es cómo X e Y forman Z". Si demuestra que está aprendiendo estas cosas y realmente lo está intentando, la gente será mucho más abierta y receptiva a sus preguntas.

"No puedes seguir siendo un programador junior haciendo tareas domésticas para siempre". Muy cierto, algo que no había considerado.