Un programador de juegos es la persona que toma la visión del diseñador y la hace funcionar realmente en el motor de juego que usamos. Trabajo en el equipo de programación de juegos móviles en Kwalee, así que para nosotros es principalmente Unity. Por ejemplo, si el diseñador quiere que un dado ruede de una manera particular, escribiré el script para manejar la lógica. También colaboramos con artistas de juegos para asegurarnos de que nuestros juegos no sólo se vean increíbles, sino que también logren un gran rendimiento en los dispositivos.
En este blog, me basaré en mis cinco años trabajando en Kwalee para compartir ideas esenciales y consejos sobre ser un programador de juegos. Te guiaré a través de algunos de los lenguajes, herramientas y principios que usamos, mis consejos de carrera, así como consejos para principiantes y avanzados.
¿Qué Hace Un Programador De Juegos?
Escribimos el código y ayudamos a que el juego se convierta en realidad. Mientras que los diseñadores de juegos crean los conceptos y los artistas de juegos crean los recursos, un programador creará la experiencia funcional y jugable. Creamos y optimizamos el rendimiento del juego y solucionamos cualquier problema que se identifique.
Nos aseguramos de que un juego se sienta genial y funcione con un alto rendimiento. Para hacer esto, debemos asegurarnos de que el código en sí mismo sea limpio y expandible, lo cual es más difícil de lo que crees. Usamos estándares de codificación para mantener una calidad consistente en todos nuestros equipos - un documento que puede contener estándares de nomenclatura, formato, etc. Sin embargo, a veces las cosas no siempre son tan sencillas y de vez en cuando puede que necesites pensar fuera de la caja para lograr que las cosas se hagan a tiempo.
Nuestras responsabilidades también incluyen asegurarnos de que el juego funcione bien en el hardware del usuario final. Por ejemplo, en nuestros juegos móviles, necesitamos evitar que los dispositivos más antiguos se calienten demasiado, por lo que trabajamos con artistas para optimizar la cantidad de draw calls. Un draw call es un comando enviado desde la Unidad Central de Procesamiento (CPU) a la Unidad de Procesamiento Gráfico (GPU) para renderizar un objeto en la pantalla - le dice a la GPU que dibuje elementos gráficos como texturas, mallas o shaders. Necesitamos minimizar la cantidad de estas draw calls en nuestro juego porque tener demasiadas puede causar problemas como caídas de velocidad de fotogramas o parpadeo. Hay muchas maneras de resolver esto, pero cosas como agrupar múltiples objetos en un solo draw call o reducir la cantidad de texturas y materiales únicos puede ayudar. Esto es especialmente importante para móviles, ya que hay tantos dispositivos diferentes en el mercado, todos con especificaciones técnicas variadas.
¿Cuáles Son Los Principales Lenguajes De Programación De Juegos?
La mayor parte de nuestro tiempo como programadores de juegos en el día a día la pasamos escribiendo scripts en uno de una variedad de lenguajes de programación - después de todo, somos desarrolladores de software de un tipo diferente. Hay muchos lenguajes para elegir. Algunos parecen más fáciles que otros, pero una vez que has aprendido y dominado uno, definitivamente puedes aprender otros - el principal desafío es lograr un primer acceso al campo.
Aquí hay una introducción a algunos de los lenguajes de programación de juegos más populares:
- C# - un lenguaje de programación versátil y popular ampliamente utilizado en el desarrollo de juegos. Es uno de los más fáciles de aprender si eres un principiante. Una de sus mejores características es la recolección automática de basura - por lo que gestiona la asignación de memoria por ti - muy útil para programadores ocupados como nosotros.
- C++ - en contraste, este es un lenguaje no gestionado, por lo que debes asignar y liberar memoria manualmente, lo que lo convierte en un paso más grande en complejidad y dificultad. Sin embargo, permite una mayor velocidad, control y rendimiento.
- Java - al igual que C#, Java tiene su propia gestión de memoria y recolección de basura, lo que facilita a los desarrolladores manejar la memoria sin atascarse en los detalles. Es ampliamente utilizado en desarrollo web y aplicaciones empresariales, y aunque (discutiblemente) puede que no sea la opción principal para el desarrollo de juegos, sigue siendo una opción sólida para crear aplicaciones escalables y eficientes.
- Swift - este es el lenguaje nativo de Apple para crear aplicaciones y juegos para iOS y macOS. Sin embargo, esto significa que es menos útil para el desarrollo multiplataforma - ya que nuestro objetivo es siempre publicar nuestros juegos móviles en Android e iOS.
¿Cómo Convertirse En Programador De Juegos?
Hay diferentes maneras de convertirse en programador de juegos. Mi camino es bastante convencional - estudié Diseño y Programación de Juegos en la Universidad de Staffordshire. Originalmente, pensé que iba a entrar en el arte de los juegos - siempre fui muy apasionado por el arte de niño, además realmente disfruté los módulos de arte en la universidad, pero mientras estuve ahí descubrí que realmente disfrutaba creando jugabilidad. Podría tomarme varios días crear un solo modelo de alta poligonización, pero podría hacer que un pato volara y explotara en la mitad del tiempo. Prototipar me permite ver el resultado rápidamente justo frente a mí.
Sin embargo, la belleza de programar juegos es que es accesible para la mayoría de las personas incluso si no llegas a través de un camino tradicional. Tuve amigos en la universidad con 50 años o más - nunca es demasiado tarde para experimentar algo nuevo. En Kwalee, incluso hemos contratado a alguien que aprendió principalmente a través de videos de YouTube e hizo un juego por diversión. Hoy en día hay tantas oportunidades para talentos frescos y ansiosos. Al mirar portfolios de estudiantes más nuevos, tienen mucho más bajo el brazo. Vemos talento fantástico sobresalir y es un momento emocionante en la industria.
Una pregunta que probablemente te intriga es: ¿afectará la IA la programación como carrera? Puede ser extremadamente útil, y está mejorando. Perfecto si necesitas que te expliquen algo o estás atascado en un problema. Puedes usarla para solucionar errores o refactorizar ("limpiar") tu código insertándolo en el último ChatGPT. Sin embargo, cuando miramos los portfolios queremos ver el trabajo que has hecho y del cual estás orgulloso, la IA está bien para usar, pero intenta no usarla como reemplazo de tus propias habilidades.
¿Cómo Es Un Día Típico En La Vida De Un Programador De Juegos?
Permíteme dar un ejemplo basado en mi vida. Soy un Programador Principal (lo llamo mi trabajo soñado) por lo que es una gran mezcla de trabajo práctico y gestión de otros programadores!
Un día típico en mi mundo es llegar, tomar un latte, y luego verificar cualquier error o bloqueo para el equipo de QA. Verificar con el equipo para ver si alguien necesita que haga algo para desbloquear su trabajo. Luego, se enciende la música y se sube la lista de tareas. Compartiremos videos de progreso a través de Slack para recibir comentarios rápidos, mientras también alternamos entre 2-3 proyectos para ayudar a los miembros de mi equipo. También pasamos mucho tiempo invirtiendo en sistemas compartidos para hacer nuestra programación más eficiente - todo necesita mantenerse, actualizarse y corregirse regularmente para mantener las cosas funcionando sin problemas.
Consejos Para Principiantes En Programación De Juegos
Si estás empezando y aspiras a ser un programador completo, ¡aquí están mis consejos para principiantes!
- Hay tanto para aprender en línea, en YouTube y hay tantos juegos de ejemplo que no tienes excusa para no aprender! Los motores populares son gratuitos y muy divertidos de usar!
- En el extremo opuesto del espectro, puede que tenga 30 años, pero deberías intentar leer el influyente libro "Design Patterns: Elements of Reusable Object-Oriented Software" de los llamados autores Gang of Four, que introdujo algunos de los cimientos de los patrones de juego que usamos todos los días en programación.
- Puedes tener tus propias ideas, pero asegúrate de comenzar con algo simple para que estés fundado en lo básico.
- Cuando no estás atado a un proyecto comercial, puedes escribir tanto código como quieras, así que diviértete mucho creando cosas insanas.
- Crear un portafolio es realmente clave (y así fue como conseguí mi trabajo). Pero ten mucho cuidado de no simplemente subir el mismo trabajo estándar de la uni, porque veremos muchas aplicaciones con estos. Incluso pasar un día extra rehaciendo y agregando más funciones te ayudará a destacar.
- Crear tu propio juego real también es una idea inteligente - es muy barato poner un juego en Google Play, así que lanza algo que puedas mostrar a los reclutadores/publicadores/familiares/mascotas en tu teléfono. Podrías incluso ganar unos cuantos miles de dólares al año hasta que consigas un trabajo exclusivo a tiempo completo, ¡eso es un bonus! O podría tentarte a hacer tu propio juego completo y asociarte con un editor.
- No solo te limites a aprender sobre programación - aprende sobre arte, diseño, QA y otras disciplinas con las que interactuarás. Por ejemplo, vale la pena entender los métodos de QA porque puedes caer en la trampa de asumir que algo funciona, pero necesitas jugarlo como usuario, no como alguien que escribió el código y tiene una vista definida de cómo esperas que 'debería jugarse'. Sé destructivo, intenta las cosas al azar que la gente podría hacer, presionando botones aleatorios y otros comportamientos extraños.
Consejos Avanzados Para Programadores
Aquí tienes algunos de los consejos que me han ayudado a pasar de junior, a programador, a senior a líder.
- Siempre puedes beneficiarte de más aprendizaje, y recuerda que sin errores no podemos aprender!
- Si realmente te apasiona algo - podrías especializarte más. Por ejemplo, si te encanta jugar con shaders y pipelines de renderizado, aprende más sobre cómo usar shaders gráficos para expandir tu capacidad de renderizar efectos visuales complejos y usar pipelines de renderizado para optimizar el rendimiento o hacer algunos efectos impresionantes.
- Podrías hacer algo realmente genial, como un sistema complejo, subirlo a una tienda de activos para exhibirlo si tu contrato lo permite y mostrar tu trabajo avanzado. Podrías desarrollarte en un nicho como un tipo particular de programador, como programador de jugabilidad, programador de servidor, programador gráfico o programador multijugador.
- Alternativamente, puedes ir por la ruta de gestión como yo, y mentorear a personas. Mi táctica para progresar en mi carrera ha sido absorber nuevas responsabilidades. Primero, comencé mejorando cosas pequeñas, es decir, pequeños cambios de flujo de trabajo.. Luego hice los procesos más fáciles usando plantillas para ahorrar tiempo al crear nuevos proyectos. Luego tuve un gusto por la tutoría y la gestión, lo cual me ayudó a ganar más confianza y ahora participo en revisiones entre compañeros, revisiones de código, organizando talleres y liderando equipos en proyectos.
Ya sea que estés trabajando como parte de un equipo o como gerente, es tan importante dar elogios como dar críticas constructivas. Al revisar el código, es bueno entusiasmar a las personas!
¿Cuáles Son Los Principios Clave De La Programación De Juegos?
Hay algunos temas clave que simplemente deben incluirse en un blog sobre programación de juegos. Estos son algunos de los aspectos más importantes que consideramos.
Control de Versiones/Control de Fuente
Así como tienes puntos de guardado en los juegos, hay puntos de guardado en el desarrollo de proyectos. Actúan como almacenamiento general para el proyecto y permiten que tres o cuatro programadores trabajen en un sistema simultáneamente, creen un cambio y lo envíen al servidor. Nos permite rastrear esos cambios y retroceder fácilmente si algo se rompiera. Si dos desarrolladores trabajan en el mismo archivo, ese archivo se convertirá en parte de una fusión, si hay conflictos, entonces podemos resolverlos manualmente o elegir los cambios de un individuo para aplicar. Esto sucederá mucho al usar Prefabs o Escenas dentro de Unity.
Estos términos a veces se superponen, pero en general, el control de fuente se centra en el código y el control de versiones incluye todos los archivos del proyecto, activos y documentación.
Cuando comienzas a usar el Control de Fuente, puede sentirse un poco aterrador para comenzar, puede parecer muy abrumador y cuando se trata de conflictos, puede que te sientas inseguro sobre qué hacer. Pero la naturaleza del control de versiones te ayuda a guardar momentos en el tiempo, así que si estás actualizando frecuentemente y usando mensajes detallados de commit, es increíblemente útil y seguro. Puedes revertir a múltiples puntos, tener múltiples ramas, etc. Piénsalo como la red de seguridad de los desarrolladores, para que podamos evitar una versión de Toy Story 2 de Pixar - accidentalmente eliminada y luego recuperada de un disco duro en la casa de su Director Técnico, en su lugar está todo guardado de manera segura en el servidor.
Programación Orientada a Objetos
Este es el tipo de programación que utilizamos principalmente en Kwalee. Utiliza objetos para representar cosas reales o conceptos abstractos, y tiene como objetivo organizar la base de código usando principios que reflejen cómo vemos e interactuamos con objetos en el mundo real. Ayuda a mantener sistemas complejos organizando el código en clases distintas que puedes reutilizar, escalar y mantener más fácilmente.
Por supuesto, hay debate sobre si es bueno o no. Si bien no es el de mayor rendimiento, funciona bien. Al igual que con los lenguajes, cada uno tiene sus pros y contras y deberías aprender uno para empezar y entender cómo funcionan los lenguajes y compiladores (traductores de código humano a código de máquina). También puedes considerar otros tipos, como la programación funcional que lo trata más como matemáticas, la programación lógica que usa hechos y reglas o la programación procedural que usa datos paso a paso.
Patrones de Programación
Estas son cosas maravillosamente útiles - soluciones reutilizables que pueden ayudar con problemas comunes que enfrentarás en tu diseño de software. Te dan una plantilla para solucionar un problema, así no tienes que reinventar la rueda cada vez y puedes seguir soluciones probadas.
Por ejemplo, el patrón de diseño Singleton te ayuda a asegurarte de que solo haya una instancia de una clase como un administrador de configuraciones de juego en todo tu juego, y te da un punto de acceso global a ella. El código para este patrón significa que solo existe una instancia de la clase SettingsManager, por lo que no necesitas recrearlo o duplicarlo cada vez que lo necesites.
También está el Patrón de Fábrica, que puede ayudarte a crear objetos de una manera más organizada y flexible. Puedes definir métodos para generar tipos específicos de objetos, como personajes o elementos, basándote en parámetros de entrada, permitiendo que crees fácilmente más objetos de un tipo similar sin comenzar desde cero cada vez.
Espero que este blog te haya dado un gusto por la programación de juegos, ya seas nuevo en el campo o un programador experimentado! Si eres una persona trabajadora pero divertida, encajarías en nuestro equipo, así que descubre más sobre carreras en Kwalee. De lo contrario, puedes aprender sobre nuestros juegos móviles o publicación y conocer más sobre lo que ofrecemos como desarrollador y editor.








