<< Regresar a todos los tutoriales
Fundamentos para la Programación de VideojuegosPor: Luis Vazquez Gomez |
La primera parte de este artículo es una traducción (no oficial) del texto "Game Programming, An Introduction" publicada en www.gamecareerguide.com
La autora original es Jill Duffy y el texto fue publicado en 08/20/2007.
Aquí está el link para la versión original en ingles.
El artículo fue traducido por Gonzalo de Gamedev mx
¿Qué es la Programación en lo que respecta a Videojuegos?
La Programación se refiere al código que se encuentra en el centro de cualquier videojuego. Programación son las matemáticas y lógica que hacen que el juego suceda.
Dentro de la mayoría de los estudios de videojuegos, la programación cuenta más para más para muchas personas que cualquier otra disciplina. La industria de Videojuegos algunas veces encajona varias áreas específicas bajo el término pantalla de "Programación", para incluir Programación de Juego, Programación de IA, Programación de Motores, Programación de Herramientas y Programación de Network.
¿Qué es lo que hacen los Programadores?
Los Programadores son gente de Matemáticas y Ciencia, y más especialmente, álgebra, cálculo y gente de ciencias de la computación. Es común que los programadores posean un título (o un conocimiento avanzado) en Ciencias Computacionales.
Antes que los programadores encuentren trabajo dentro del negocio de la industria de los videojuegos, necesitan tener una firme compresión y experiencia de un lenguaje de programación, usualmente C++, pero muchos otros necesitan saber Ensamblador, C o Java.
C++ es el lenguaje más común y usado en la industria hoy en día. Más y más programadores también se están volviendo verdados en lenguajes de Scripting (usalmente usados para el Script de la jugabilidad, pero no son usados para el código soporte y más largo del juego), tales como Perl, Lua, Ruby o Phyton. Una persona que esté interesada en convertirse en programador debe poder definir los términos de SDK, API, lenguaje orientado a objetos (y si no los conoces, será mejor que los vayas estudiando).
¿Cuánto dinero hace un Programador?
El salario promedio anual de un programador, a lo largo de todos los niveles de experiencia, es de US$80,886. El salario promedio anual de un programador con menos de 3 años de experiencia es de US$65,833 (estas estadísticas fueron tomadas del documento Game Developer Salary Survey 2006).
Esta información está relacionada principalmente al salario en USA y Canadá, sin embargo en México es muy diferente. El salario promedio mensual de un programador puede ir de los $9,000 (pesos mexicanos) hasta los $30,000. Incluso puede ser más o menos, ya que esto es algo que depende exclusivamente de la empresa en la que se labora.
¿Qué títulos de trabajo puede tener un Programador?
-Programador Jr.
-Programador de Juego
-Programador Líder / Líder de Programación
-Director Técnico (sin relación con el futbol n_n)
-Programador de IA (Inteligencia Artificial)
-Programador de Motor (Engine)
-Programador o Ingeniero de Herramientas
-Programador o Ingeniero de Network
-Programador de Gráficos
-Programador de Audio
¿Qué tipo de personas o personalidades son mejores para un buen Programador?
Los Programadores deben de poder buscar respuestas a las diversas preguntas que tengan y encontrar soluciones a los problemas que se encuentran. En una oración, los Programadores deben de ser fuertes autodidactas.
Sin embargo, es crucial que los Programadores también sepan como comunicarse efectivamente con otros, ya que su trabajo requiere que su compartan conocimiento cada día. Desgraciadamente, esto es contrario del estereotipo de programador reclusivo. Los Programadores de Juegos no pueden en lo absoluto cerrarse, especialmente cuando se trabaja en grandes juegos de consola, ya que deben interactuar constantemente con otros miembros del equipo. Tener mucha paciencia y una gran disposición van por el camino.
La segunda parte de este artículo es una traducción (no oficial) del texto "So You Want To Be A Game Programmer?" publicado en www.gamecareerguide.com
El autor original es Marc Mencher y el texto fue publicado en 04/07/2006.
Aquí está el link para la versión original en ingles.
¿Así que quieres ser un Programador de Videojuegos?
Los Artistas de Juegos crean maravillosos paisajes y personajes bizarros; los Diseñadores de Juegos escriben los documentos que traman como el juego debe jugarse. Pero sin el código de programación, todo lo que habría en un juego serían imágenes bonitas y un montón de palabras. Los Programadores de Juegos --también conocidos como Ingenieros de Software-- crean el código que hace que el juego trabaje.
De todas las disciplinas de la programación, programar para juegos puede ser una de las más difíciles y retadoras. Eso se debe a las muchas disciplinas de programación y habilidades que el programador de juegos debe tener bajo su cinturón -- gráficos, animación, detección de colisiones, networking, físicas, bases de datos, GUI (Graphical User Interface / Interfase Gráfica de Usuario), audio y mucho más. Pero, por difícil que la programación de juegos pueda ser, es también la disciplina de la programación que más recompensa. ¡Imagina lo que se debe sentir es ser capaz de ir a Game Planet y ver tu juego arriba en los estantes!.
A su nivel más básico, el trabajo de un programador es el de traducir una solución a un problema en un lenguaje que la computadora pueda entender. Esta habilidad, por supuesto, no es suficiente. Para tener una carrera existosa en la industria de los videojuegos, debes de poder escribir o "cortar" código que sea eficiente, rápido y reusable. Ese código debe de ser flexible... y también el programador.
Se esperará de ti que frecuentemente puedas completar tareas o crear nueva tecnología en un área que sea poco familiar para ti. Esto también tomará lugar en un ambiente de producción, lo que significa que no solo deberás de estar aprendiendo, sino que tienes que estar aprendiendo bajo un tiempo límite (deadline). Un aspecto positivo adicional del trabajo es que muy rara vez te podrás aburrir. Cada nuevo proyecto promete una exploración en nuevos y desconocidos territorios. Puedes esperar encontrar el mismo trabajo de programador en un motor de juegos (game engine) en un proyecto, construir herramientas en otro, y desarrollar rutinas de la lógica del núcleo del juego en otro.Y, sobre todo lo demás, los programadores de juegos deben de estar absolutamente apasionados en hacer juegos y resolver problemas que nadie ha visto o nunca pensó antes.
¡Suena Genial!, ¿Dónde firmo?
Tranquilo! ¿Estas seguro de que tienes lo que se necesita para ser un Programador de Juegos? Aún cuando hay gente que comunmente tienen diferentes niveles de habilidades, hay ciertas habilidades centrales que todo programador de videojuegos necesita. Veamos tres casos ejemplo del conjunto de habilidades y discutir cómo uno puede avanzar por estos tres puntos. Recuerda que la mayoría de las compañias de juegos no tienen un programa formal de internado o entrenamiento. Ellos usan tecnologías avanzadas hasta el maldito límite, para hacer eso, buscan gente que pueda entrarle e inmediatamente contribuir en el desarrollo de un proyecto. Si tu puedes hacer todas las cosas listadas en cualquiera de las tres categorías, entonces vas por buen camino:
Nuevo en la Programación: Apenas has comenzado a trabajar con un nuevo lenguaje de programación. Puedes ser estudiante de preparatoria (vocacional) o alguien con un interés casual en la programación. Si esto suena como tu, has lo siguiente:
-Selecciona un lenguaje a la vez para aprender. Uno bueno para iniciar es C++ o Java.
-Si tienes un libro de texto asociado con la clase (de programación) que estas tomando, ¡léelo!. Hay información valiosa y ejemplos de código para revisar en los libros. No los ignores.
-Escribe todo los ejemplos de código de tu libro y experimenta con ellos.
-Experimenta con las listas código para aprender como los diferentes operadores funcionan.
-Una vez que empieces a aprender estatutos condicionales como ciclos de "while", ve si puedes crear un juego de "Adivina el número". Después trata de hacer un juego de "El Ahorcado".
-Si usando C, C++ o cualquier otro lenguaje que use apuntadores, asegúrate de sentirte agusto con el concepto y uso de los apuntadores por completo, y úsalos en una gran variedad de formas.
-Aprende cuantos aspectos puedas del lenguaje. Una vez que hayas hecho un juego de "Adivina el número" y "el Ahorcado", ve si puedes cambiar o re-implementar las funciones de tu programa para usar nuevas técnicas que vayas aprendiendo. Esta es una de las mejores formas para aprender un lenguaje ya que sabes los resultados de tu juego. Modificarlo puede hacer un mejor juego y más robusto. Al mismo tiempo, también iras mejorando tus habilidades de programación.
Mientras estas en eso, aquí hay algunos tipos para los nuevos programadores:
-Prepárate para FRUSTRARTE. Esta es una parte integral de un programador y se quedará contigo a lo largo en el futuro.
-No te rindas si algo se pone difícil. Esto puede sonar como un viejo cliché pero todos los programadores atraviesan las primeras etapas de problemas y tienen que poder superarlos. Darse por vencido muy fácil puede ser una señal de que la programación no es la profesión para ti.
-Aprende como funciona el DEBUGGER.
-¡Comenta tu código! Es muy difícil ayudar a alguien cuando te toma 40 minutos averiguar lo que esa persona esta haciendo. Comentar es la clave para convertirte en un programador profesional y trabajar en equipos de desarrollo.
-Lee todo lo que puedas sobre el lenguaje. Observa y aprende de tus errores. Siempre podrás seguir aprendiendo de un lenguaje aún cuando lo hayas estado usando por un largo tiempo.
-Mira el código de otras personas y como es que lo organizan. ¿Qué tan fácil es de leer el acomodo?, ¿Qué tan fácil es de leer tu código para otros programadores?.
Algo de Experiencia en Programación: Has completado un curso o estudiado un lenguaje por algo tiempo, probablemente más de nueve meses. Puedes escribir programas que solucionan problemas simples y, posiblemente, has escrito unos cuantos pequeños juegos de aventura basados en texto. En este punto, el siguiente paso es comenzar a trabajar con algunas herramientas para juegos. Busca algunas librerías para juegos y SDKs tales como Allegro y CDX. Son gratuitas o shareware y pueden descargarse de internet. Si tu ya estas en esta etapa, lo siguiente es tu lista de "Cosas por Hacer" para mejoramiento:
-Lee la documentación de la librería de juego de tu elección. Busca ejemplos de código fuente y date ideas de como las cosas trabajan en la organización de la librería. Leer documentación es una habilidad importante que debes tener. Si te atraviesas con algo que necesitas pero no conoces, necesitarás la habilidad de investigar y aprender por tu cuenta. Esta habilidad de adaptar y sobrellevar te hace un componente valioso en un equipo de desarrollo.
-Trabaja con la librería para solucionar problemas básicos. Debes de escribir ejemplos o "conducir" programas para solucionar problemas tales como: Dibujar un simple sprite en la pantalla; mover el sprite a lo largo de la pantalla; probar colisiones con los objetos de la pantalla; reproducir algunos sonidos; probar la conexión de entrada con algunos mecanismos como teclados, mouse y joystick; encontrar un engine existente y crear algunos mapas simples.
-Después, trabajar con esas herramientas y programas que has construido, escribe un juego simple. Un juego similar al original Asteroids sería perfecto. Eso debería de tomarte como dos semanas. No te preocupes si te toma más tiempo; solo asegúrate de terminarlo.
Programando ya por un Tiempo: Tal vez comenzaste a programar en la preparatoria y has progresado en la universidad. En este punto, podrías ser un estudiante de mitad de semestre o por terminar de la carrera de Ciencias Computacionales o Ingeniería en Sistemas. También podrías ser un desarrollador entusiasta buscando lograr una transición de ser un programador de bases de datos hacia la industria de videojuegos. Tu conocimiento en sintaxis y tipos de información te ayuda a escribir mejores programas y juegos. En todo caso, debes de poder completar todas las tareas que han sido enlistadas anteriormente y ahora necesitas atacar los grandes problemas. Un trasfondo en Ciencias Computacionales o un programa de entrenamiento en videojuegos sería muy benéfico. Mis sugerencias para ti son estas:
-Escribe un cargador (loader) para archivos de bitmap y wave (sonido)
-Escribe un engine para mapas de mosaicos (tile map)
-Crea un engine de IA basado en estados (state-based AI)
-Trata de simular algunos modelos de física de Newton básica en juegos 2D.
-Escribe un RPG retomando lo clásico de los juegos de NES.
-Aprende Windows MFC y métodos de programación básicos para Win32
-Aprende código básico Ensamblador para procesos para Pentium
-Aprende DirectX
-Aprende conceptos básicos de 3D
-Trabaja con algún engine 3D existente y trata de conseguir algunos conceptos básicos
-Comienza un proyecto grande con algunos amigos. Concéntrate en crear un plan de trabajo durante el curso de la producción y seguirlo lo mejor que puedas. Asegúrate de percatar cuando tus planes salieron mal y trata de encontrar formas de anticiparte previendo errores similares en futuros proyectos.
Y aquí hay algunos tips para programadores experimentados:
-Trata de enfatizar lo robusto de tu diseño. Has las cosas lo más elegante que puedas sin causar problemas en el desempeño. No dudes en usar métodos de Programación Orientada a Objetos, al menos que la plataforma lo prohíba.
-Asegúrate de que tengas habilidades de grupo sólidas. Esta es una de las habilidades más criticas para tener dentro de la industria de videojuegos. Es muy seguro que los estudios no te contraten si creen que no pueden convivir efectivamente durante mínimo 3 meses, aún cuando tengas un conjunto de habilidades impresionantes.
-Lee lo más que puedas sobre la industria de videojuegos y sobre las técnicas que se utilizan.
-Escribe código limpio. Pide a alguien más que revise tu código para ver si es fácil de entender.
¿Tienes "lo que se necesita"?
Cuando una empresa comienza una búsqueda por un candidato programador en particular, ellos tendrán seguramente muchas espectativas acerca del tipo de PERSONA que idealmente quisieran encontrar. Seguramente encontrarán que hay algunas cualidades deseadas que son específicas para una compañía en particular (tales como la habilidad de hablar otro idioma), pero existen algunas cualidades generales que te harán un empleado de gran valor en cualquier compañía.
Actitud de Equipo: Probablemente la cualidad particular más importante en un ambiente de producción, la actitud de equipo implica dejar se pensar en uno mismo y dedicación hacia el equipo y proyecto sobre los intereses personales. Si gente en tu proyecto están más preocupados sobre que encargo o puesto les darán en un proyecto, petulantemente estableciendo "quién es el indicado", o gastando su tiempo en señalar a los otros, las posibilidades de que tu proyecto pueda salir por la puerta a los estantes no son para nada buenas.
Pro-Activo: Estos son los programadores que no necesitan una constante supervisión. Una vez que se asignan una tarea, ellos se supervisan a si mismos. Ellos preguntarán a otro programador del equipo por información cuando y solo si la necesitan. Ellos irán con el diseñador y harán preguntas relacionadas al tipo de implementación de sus tareas. Ellos irán con el artista y buscarán cualquier recurso (asset) que necesiten para la tarea. Esta habilidad de ser Pro-Activo permiten a un coordinador el asignar una tarea y alejarse sabiendo que no tendrán que estar sobrellevando todos los aspectos diferentes a cumplir de esa tarea en particular. Los Pro-Activos valen su peso en oro.
Seguimiento: La habilidad de seguir las tareas hasta el final, tanto a un nivel micro como macro, es una cualidad de gran valor. Hay una emoción con el inicio de cualquier nueva tarea. Es algo nuevo y exitante y generalmente no tendrás dificultad en iniciarla. Algunas veces, sin embargo, al menos un 10% de la tarea puede tomar el 90% del tiempo que se tiene. Cuando estas trabajando en ese 10%, puede ser un poco doloroso. Habrá momentos cuando tendrás retro-alimentación de los diseñadores y artistas que te obliguen a regresar, revisar el mismo código/funciionalidad una y otra vez. Puede ser tedioso, pero rara vez atinas a algo como un comportamiento la IA de un personaje en la primera vez. La perfección vendrá con el tiempo.
Comunicación: Comunicar -- y comunicar bien-- con otros en un ambiente de equipo es extremadamente importante. Una de las tendencias más grandes que tienen los programadores cuando comunican es usar mucho "término de programador" o argot. Esto puede vidrear (hacer llorar) los ojos de casi cualquier artista, diseñador o productor. Es un raro talento para un programador el poder comunicarse con otros en un lenguaje que ellos puedan entender. Esto no es fácil; puede tomar tiempo para perfeccionar, pero bien vale la pena el esfuerzo.
Responsabilidad: Tomar responsabilidades sobre lo que has hecho o sobre lo que se supone que debes hacer va de mano en mano con todas las demás cualidades. Aquellos que acepten la responsabilidad y, de hecho, busquen más son aquellos que suben a un estatus de Líder de Programación y se convierten en una piedra angular de cualquier equipo.
Por último pero ciertamente no lo menos...
Cuando todo esta dicho y hecho... cuando hayas adquirido las habilidades adecuadas, determinado que tienes las cualidades necesarias para el trabajo, y convencido que la carrera de programador de juegos es el camino que quieres llevar... debes de considerar cuando el sueldo que buscas es poco.
Salarios, como en todo trabajo, dependen de donde estas sentado en la cadena alimenticia. Si estas en el fondo (y asocialo con programador Jr.), en algún lugar en medio (un programador Sr o de nivel medio), o en lo más alto (un líder de programación o un director/VP de ingeniería), tu cheque será diferente.
Sin importar esto, debes de estar consciente de que en promedio el salario es más bajo de los programadores en la industria de videojuegos cuando se compara con programadores de otros negocios en una posición similar o experiencia y educación. Si este es el caso, ¿porqué alguien querría trabajar por menos dinero haciendo el mismo trabajo?.
La verdad de las cosas es que, mientras las habilidades de programación pueden parecer similares, los trabajos son completamente diferentes. En un proyecto de videojuego, tu tienes un buen momento trabajando en una pieza de entretenimiento. También puedes tener más horas libres y no tienes que vestir traje para trabajar (al menos que tu gustes). Por último, debes de imaginar si realmente quieres trabajar en un proyecto escribiendo drives para impresoras o un proyecto haciendo el próximo Doom. La mayoría de la gente que ama hacer juegos hace el sacrificio del dinero por un trabajo al que aman ir todos los días. Dale una pensada antes de que dirigirte a toda velocidad a la próxima oficina de contratación de algún estudio de videojuegos.
Quiéres publicar tus comentarios, inicia sesión dando click aquí.
Si no estás registrado, ¿qué esperas? Registrate aquí y disfruta de las ventajas de estar registrado

