En esta entrado voy a intentar trazar una hoja de ruta para alguien que quiere empezar en el mundo del desarrollo de videojuegos, esta será la primera de varias que iremos viendo.
Según avancemos en la hoja de rutas iremos ramificando y especializándonos en la rama que más nos guste ya que es importante para nuestra carrera como desarrolladores que alcancemos un nivel de maestría en nuestra especialización.
¿Por qué una hoja de ruta para ser desarrollador de videojuegos?
En varios directos del canal de YouTube, comentarios y encuestas que he ido pasando, hay ciertas preguntas que se repiten: ¿qué hago para empezar en videojuegos? ¿qué me recomiendas para ser programador? o incluso, ¿por dónde empiezo?
Además sé por experiencia personal, que cuando estás empezando vas un poco perdido y una pequeña guía siempre va bien, al menos para tener una referencia y ya adaptarla a nuestras necesidades.
No pretendo que sigas esta guía al pie de la letra y si te sales ya no vale, lo que quiero es darte referencias y aportar mi punto de vista.
Primer escalón del desarrollador de videojuegos
Aquí vamos a diferenciar 2 categorías o sub-niveles. La primera, me gustaría dedicarme al desarrollo de videojuegos pero no me decido por qué perfil, y la segunda, sé que especialización me gusta pero apenas estoy empezando.
Apenas estoy empezando es subjetivo, si ya tienes varios años de experiencia pero aun cojeas de algunas cosas que voy a comentar, tal vez deberías parar a coger aire, repasar esas cosas y seguir corriendo.
Lo que vamos a ver es la base sobre la que vas a edificar todo tu conocimiento y si no es sólida igual se tambaleara en el futuro.
Me quiero dedicar a los videojuegos pero no sé que rama
Supongamos que te quieres dedicar a los videojuegos pero no tienes claro si como programador, artista, diseñador, etc.
Lo primero va a ser tomar una decisión porque necesitas especializarte, no conozco a nadie que sea el amo en 2 áreas, lo que no quita es que tengas conocimientos de ambas, pero no puedes ser experto en las 2. Te pongo un ejemplo muy básico:
Imagina que dedicas 1 año a programación y otro año a otra especialización y estás buscando trabajo. Por otro lado, tenemos otro desarrollador que ha dedicado esos 2 años a mejorar como programador.
Teniendo en cuenta sólo esto, ¿quién crees que es más probable que encuentre trabajo como programador?
Lo mismo con la otra especialización que has estado estudiando, habrá otra persona que ha dedicado 2 años solo a esa especialización, te llevan un año de ventaja.
Y ojo no confundir entre perfiles “híbridos”, como el technical artist, esto es una especialización y no vale la de soy programador y artista, pues soy technical artist. Esto no va así, el technical artist tiene sus especializaciones que aprender, y dentro del technical artist podrías encontrar varias ramas.
Vale, tengo que tomar una decisión, ¿cómo lo hago?
Yo te recomiendo que busques tanto libros generalistas como vídeos/tutoriales generales de desarrollo de videojuegos. También te recomiendo que aprendas a trastear con varios engines que requieran poca programación o tengan facilidades para programar visualmente.
Aquí tienes muchísima variedad, los más famosos seguramente sean Unity y Unreal, en Unity han integrado Bolt para la programación visual, con cajitas, y en Unreal tienes los Blueprints.
A parte, tienes engines un poco más sencillos, o que la curva de dificultad no es tan alta al principio, tienes game maker, rpg maker, cocos 2d y si buscas encontrarás más.
Lo importante es que te decidas por uno, empieces a ver tutoriales y que hagas un juego completo, pero algo muy sencillo.
El objetivo de este juego es que toques un poco todas las áreas para que después tú mismo puedas hacer análisis de qué te ha gustado más y entonces empieces a buscar material sobre esa especialización.
En resumidas cuentas, te toca conocerte a ti mismo y aquí poco te pueden ayudar los demás.
Un libro que te puede ayudar a conocer más sobre Unity y el desarrollo de videojuegos es Curso de programación. Videojuegos. escrito por Ricardo de la Rosa Vivas, a quien hemos entrevistado en el canal, te dejo aquí su entrevista: entrevista a Ricardo de la Rosa, Indie Game Developer.
Learning C# by Developing Games with Unity 2020 es otro libro centrado en el desarrollo de videojuegos y Unity, en ingles.
Otra forma de ir profundizando en qué te gusta, es que participes en varias Game Jams y en cada una alternar rol que desempeñas.
Esto es muy buena práctica porque una jam de 48 horas, por ejemplo, puede suponer mucha presión en muy poco tiempo y vas a ver si te sientes cómodo en ese rol bajo esa presión, porque no todos los días de tu carrera laboral van a ser chachi guays, habrán momentos duros y es importante que te guste lo que haces.
Otro criterio de selección
Otra forma de decidirte, que no te recomiendo que sea el criterio principal, es que mires las oportunidades laborales y los sueldos.
La puerta de entrada para un programador no es la misma que para un artista o un diseñador, por ejemplo.
Por mi experiencia, hay más puestos de programador que del resto de especializaciones, esto hace que por probabilidad sea más fácil entrar.
Otra especialización como la de diseñador, es bastante más difícil porque básicamente hay muchos menos puestos de trabajo. Con un diseñador puedes hacer un juego, pero vas a necesitar más programadores, y esto crecerá según vaya creciendo ese juego.
Obviamente coge estos números con pinzas, es un ejemplo muy simple, pero lo que quiero que entiendas es que no es una proporción 1 a 1.
Si tu objetivo es llegar a diseñador, tal vez te sea más fácil empezar por otro puesto, como programador o QA y luego moverte a diseñador cuando ya tengas algo de experiencia. Conozco varios casos que hicieron esto y ahora están diseñando.
Si buscas gente para hacer una game jam, o este primer proyecto, en The Power Ups tenemos un grupo de Discord con un montón de desarrolladores y encontrarás un canal para buscar equipo, te puedes pasar por ahí y preguntar.
Quiero ser programador de videojuegos
Vamos ahora con la otra categoría, ya sé que especialización quiero y en concreto quiero ser programador.
Voy a hablar de la especialización de programador porque básicamente es mi rama. Si quieres saber sobre otras especializaciones, déjamelo en los comentarios y me buscaré la vida para encontrar a alguien que nos pueda recomendar una hoja de ruta para esa especialización.
Entonces… con qué quieres ser programador, eh…
¿Pero qué programador? ¿Quieres gameplay? ¿IA? ¿Network? ¿Cliente-Servidor? ¿Quieres hacer engine? ¿Te quieres especializar más en el meta del juego, o en sistemas transversales?
Nuevamente te toca decidir hacia dónde te quieres enfocar, piensa en el largo plazo, ¿dónde te ves en 3 o 5 años?
Aquí te va a tocar decidir, o al menos pensar, donde va a estar tu carrera profesional, ¿estás dispuesto a moverte a otro país? O tienes claro que no vas a salir del tuyo?
Estas preguntas importan, porque si me dices que quieres hacer engine pero no conoces ninguna empresa en tu país que utilice su propio motor, lo tienes crudo si no sales fuera a buscar.
Tampoco te martirices, pero dale una pensada, es una variable a tener en cuenta.
¿Qué debería aprender en este nivel?
Quiero aclarar que este nivel no lo considero junior, es el paso previo, es la base sobre la que vas a construir tu seniority.
En este nivel deberías sentar las bases, aprende un lenguaje de programación a nivel Dios, te recomiendo C# o C++ en función de tus prioridades.
[descargar_libro_solid]
Si quieres dedicarte al bajo nivel, programación gráfica, trabajar desarrollando un motor o lo que te mola es optimizar y llegar hasta el mínimo detalle, C++ tendría que ser tu principal lenguaje.
Si por otro lado quieres enfocarte más en alto nivel y no bajar tanto a los detalles, hacer juegos cliente-servidor, o el propio servidor, C# te lo pondrá más fácil.
Está claro que esto no es blanco o negro, y que los conocimientos que aprendas en un lenguaje los podrás trasladar a otro, pero para eso tienes que tener una buena base y decidirte por alguno.
Aprende estructuras de datos, pero no solo a consumirlas, aprende lo que hay por debajo, haz tu propia lista utilizando un array, que añada los elementos al final, si eliminas un elemento por el medio que lo redistribuya, si se queda sin espacio que crezca…
Haz también un Diccionario, una tabla Hash, un árbol binario, etc. En el mundo real es muy probable que no tengas que implementar esto, pero son unos conocimientos que vas a necesitar para resolver problemas más complejos.
Aprende también los diferentes tipos de memoria, que es la memoria dinámica, el heap, la memoria caché, cómo nos afecta esto, y por favor, ¡no caigas en la tentación de optimizarlo todo!
En esta fase somos un lienzo en blanco, absorbemos e imitamos, y muchas veces nos quedamos en la superficie cuando nos dicen: «mejor esta estructura a esta otra», o «el foreach es malo», etc.
Cuando recibas esta información, lo primero, verifícalo, asegúrate de que es así, no tengas fe ciega en nadie, no te fíes ni de lo que te digo yo y compruébalo tu mismo para sacar tus conclusiones.
En el canal tenemos un vídeo, que te dejo por aquí arriba, donde hablamos de esto y te proporciono un proyecto en Unity que te permitirá validar y medir todas estas afirmaciones, saca tus propias conclusiones.
Te aconsejo que te centres en tener un código legible y mantenible sobre un código súper optimizado, como dice Martin Fowler en su libro Refactoring: un código legible siempre se puede transformar en un código óptimo cuando sea necesario.
Por último, te recomiendo que busques un buen libro/curso especializado en el lenguaje que elijas, que no sea algo general y que exprima ese lenguaje.
Aquí puedes encontrar los libros de Scott Meyers para C++ como: Effective Modern C++ o Effective STL, entre otros.
En el tema C# podríamos encontrar: Pro C# 8 with .NET Core 3: Foundational Principles and Practices in Programming, entre otros.
También te recomiendo el libro de Clean Code, o Código Limpio si lo prefieres en español, el autor es Robert C. Martin, uno de los autores de los principios SOLID.
Este libro no te va a ayudar a perfeccionar el lenguaje, pero te va a dar muy buenas prácticas para que tu código se entienda, sea legible y mantenible. Aprovecha que estás empezando para poner una buena base.
Aprende inglés
Esto es transversal a todos los perfiles y niveles en el desarrollo de videojuegos, aprende inglés. No solo porque la mayoría del material está en inglés, sino porque no conocer este idioma te cerrará muchas puertas.
En la mayoría de empresas en las que he estado esto es un requisito imprescindible, ya que la empresa no solo va a contratar gente de tu país, es muy probable que contraten a gente de fuera o que tengas que colaborar con equipos extranjeros.
Cuando necesites soporte integrando cualquier SDK, ten por seguro que te atenderán en inglés.
Conclusiones
Podemos sacar varias conclusiones, la primera es que debes especializarte y pensar en el largo plazo de tu carrera. ¿Quieres ir a bajo nivel, o prefieres alto nivel? ¿Programar engine, o centrarte en gameplay?
Elijas la rama que elijas, o el lenguaje, los conocimientos qué aprendas serán comunes a ambas, pero necesitas centrarte en algo para empezar, después ya ampliaremos.
Otra conclusión es que no todos los roles dentro del desarrollo de videojuegos tienen la misma dificultad de entrada, ya que el número de puestos de trabajo no es el mismo.
Sabiendo esto también tendrás que meditar sobre si estás dispuesto a dejar tu país para irte fuera y trabajar en ese puesto que persigues, o prefieres apostar por un puesto que tenga más probabilidades en tu país/región.
Desde luego, lo que quiero que tengas muy claro, es que necesitas una buena base sobre la que construir, sino asientas estos conocimientos, en el futuro tendrás que volver aquí porque andarás perdido.
Libros mencionados
- Curso de programación. Videojuegos.
- Learning C# by Developing Games with Unity 2020.
- Effective Modern C++.
- Effective STL.
- Pro C# 8 with .NET Core 3: Foundational Principles and Practices in Programming.
- Clean Code, o Código Limpio.
- ¿Cómo empezar en el desarrollo de videojuegos?
- Patrones de diseño – Template Method
- Patrones de diseño – Service Locator
- Cómo aumentar el rendimiento de tu equipo en Unity
- Patrones de diseño – Composite
- Devlog #00 – Empezamos proyecto nuevo