domingo, enero 23, 2011

El trabajo de hacer videojuegos - programador

Cuarta entrada en el blog de P*, traducida al castellano:

Saludos, es Simón, el nuevo programador.

En el desarrollo de un videojuego participan muchas personas: artistas, planificadores, programadores, músicos, etc. A groso modo, los artistas producen los modelos de los personajes y las animaciones, los planificadores crean las mecánicas y la narrativa del juego, los programadores escriben el código que hace funcionar el juego, y los músicos componen la banda sonora y efectos de sonido.

Dado que soy un programador, no quisiera quedarme con una explicación tan basta como la anterior. Me gustaría explicar más a fondo qué es lo que hace un programador. Como todavía soy novato no comprendo cabalmente lo que implica ser un programador, pero por lo menos me gustaría explicar lo que he aprendido hasta el momento.

El trabajo de un programador es producir software. Todos saben lo que es software, ¿verdad? Software son programas cuya función es manipular datos y que se ejecutan en computadoras. Y su vez, un programa es una serie de instrucciones escritas en un lenguaje que la computadora es capaz de entender.

Por ejemplo, el sistema operativo de una computadora es software, el browser que ustedes están usando es software, la aplicación que se encarga de reproducir música en una computadora es software. Los videojuegos también son software.

Como los videojuegos son software, manipulan datos al igual que cualquier otro software. Por supuesto, son datos que tienen que ver con juegos. Por ejemplo, supongamos que en un juego tenemos la siguiente regla: "si el jugador toma 100 monedas, su vida se incrementa en 1". Les mostraré cómo podría ser la función que se encarga de esta regla. Digamos que esta función es ejecutada cada vez que el jugador toma una moneda. Si escribimos la función de manera sencilla, podría verse algo así:

int coins = 0;
int lifes = 3;

void takeCoin(){
   coins++;
   if( coins == 100 ){
      coins = 0;
      lifes++;
   }
}

El código de arriba declara las variables coins y lifes como números enteros. El valor inicial de coins es 0 y el de lifes es 3. Luego, se declara la función takeCoin(). El contenido de takeCoin() significa:

Incrementar en 1 el valor de la variable coins;
si el valor de coins es igual a 100, asignar 0 a coins e incrementar en 1 el valor de lifes

Variables, enteros, funciones, igualdad... ¡Programar es pura matemática! Yo no le recomendaría el trabajo de programador a alguien que no es muy amigo de la matemática.

Para mí, el trabajo de programador es un trabajo muy satisfactorio. El código que uno escribe hace funcionar juegos, o le da soporte al desarrollo de juegos. Lo que uno produce se difunde por todo el mundo y llega hasta cada usuario. Los jugadores en cada rincón del planeta se divierten gracias al software que uno hace.

A mí me gustaría darle algunos consejos a las personas que quieren entrar a la industria de los videojuegos, a aquellas personas que se quieren convertir en programadores. Pero como todavía soy novato decidí ir a preguntarles a los programadores séniors.

Le pregunté a cinco programadores qué debería estudiar en la universidad o en una escuela vocacional una persona que quiere convertirse en programador de videojuegos. Obtuve las siguientes respuestas:

- álgebra lineal e inglés.
- muchas cosas: matemática, física, etc.
- que se ponga a desarrollar cosas en el lenguaje C ó C++. No importa lo que desarrolle, o si es en la escuela o por su cuenta. 
- si quiere ser programador de videojuegos, lo mejor que puede hacer es hacer un videojuego. Uno aprende mucho más en el proceso de hacer un juego que lo que puede aprender a través de un libro. Luego sería bueno que estudiara aquellas cosas que fueron necesarias en el desarrollo. Además, uno debería pulir aquellas áreas en las que uno es bueno, sin importar el campo de estudio. Uno nunca sabe cuándo esos conocimientos pueden ser útiles.
- partiendo de la premisa que uno ha estudiado las bases que se enseñan en la universidad/escuela, lo ideal es que uno experimente aquellas cosas que todavía no ha experimentado. Eso es válido tanto para los juegos como para cualquier otra cosa. Experiencia de vida. Inclusive es importante divertirse a fondo. Pienso que en el momento en que uno va a dar ideas para un videojuego, mientras más experiencias uno tenga mucho más amplia será su capacidad de aportar. Tanto en juegos como en lo que sea, lo ideal es hacer las cosas que uno todavía no ha hecho.

Además, hice otra pregunta: para convertirse en un buen programador de videojuegos, ¿qué tipo de habilidad debe uno cultivar? Me respondieron lo siguiente:

- resaltar en algo. Ser una persona muy humana.
- un buen programador de videojuegos es aquel que tiene curiosidad de averiguar lo que no sabe. Además, debe tener espíritu lúdico.
- tener la habilidad de proactivamente retar aquello que uno no tiende o que uno no sabe. Tener la actitud de querer siempre crecer. Más que hablar de habilidades concretas, es la postura ante la vida y el estar preparado.
- la habilidad de comunicarse. No importa cuanto uno sepa de programación, si uno no se puede hacer entender no sirve de nada. Es importante tanto escuchar como hablar. Y dentro de eso, es importante tener la habilidad de entender lo que quiere decir el interlocutor. Adicionalmente, creo que es importante poder ampliar la conversación
- más que una habilidad, lo que hay que hacer es meterse en un ambiente donde uno pueda conectarse con muchos programadores aventajados. No importa que tan talentoso sea una persona, si está en un ambiente limitado su crecimiento también será limitado. Como en nuestra era, a través de Internet uno puede intercambiar con muchos programadores aventajados, creo que poco a poco veremos cada día más excelentes programadores.

Esas fueron sus respuestas.

Creo que yo no pude transmitir adecuadamente el encanto del trabajo de programador, pero me conformaría con que lo que he escrito sea de utilidad a quienes no sabían mucho sobre este trabajo. Además, me alegraría que los consejos de arriba le sean de utilidad a quienes se sienten atraídos por la programación.