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.

24 comentarios:

  1. wow! Gracias por el post! me siento más motivado, por cierto bastante interesante, como la gente ve desde su perspectiva el mundo de un programador.

    En fin saludos y suerte!

    ResponderEliminar
  2. jeje. Buena entrada.Programar es un arte o una ciencia exacta? Yo creo que las 2. Lo importante es hacer las cosas bien y hacerlas con pasión.
    En cuál lenguaje desarrollas Simón. C, C++?. Saludos de un aspirante a programador de videojuegos.

    ResponderEliminar
  3. anónimo 2: me temo que no me dejan decir qué lenguaje usamos :(

    ResponderEliminar
  4. Encontré tu blog por casualidad...por buscar una imagen de un conejo apareció tu escultura de la nieve, por cierto muy buena hahah me leí todo el post y al querer leer mas me encontré con este. Se ve que tu trabajo es muy interesante, justamente ayer me había esta cuestionando acerca de los videojuegos y como se lograba programarlos, me considero mas artista que matemática y no se nada sobre programación pero sin embargo es uno de mis sueños hacer un videojuego, pienso que seria un gran reto para mi...la motivación esta pero me falta el conocimiento, fue una linda coincidencia leer tu post :) me saco de algunas dudas.

    ResponderEliminar
  5. Yo creo que otra forma muy buena de aprender más acerca de la programación en viendo el codigo fuente de otros (teniendo las bases claro) y para eso cualquier proyecto open source nos puede servir de gran manera

    ResponderEliminar
  6. “Tanto en juegos como en lo que sea, lo ideal es hacer las cosas que uno todavía no ha hecho. Experiencia de vida. Inclusive es importante divertirse a fondo.”

    “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.”

    “No importa que tan talentoso sea una persona, si está en un ambiente limitado su crecimiento también será limitado.”

    No soy programadora pero estas frases aplican a cualquier profesional que quiera mejorar en lo que hace... No sabes cuan bien me hicieron esas frases hoy... Realmente se nota por como escribes, que te gusta mucho lo que haces y disfrutas tu experiencia... Ojala tenga el placer de conocerlo Simon. Tratare de aplicar estos concejos en mi vida profesional también.

    ResponderEliminar
  7. Hola Simon, te envidio por el trabajo que haces yo desde siempre he querido ser realmente desarrollador de videojuegos, tengo varias preguntas para ti:
    1-Ya que estas en Japon, te gustaria estar en un proyecto al lado del maestro Hideo Kojima, has oido hablar de el no?
    2-Que es el motor grafico de un video juego? tiene que ver con el lenguaje de programacion, e oido del Motor Unreal Engine.
    3-cual es la demanda de programadores de videojuegos tanto en japon como en europa y Estados unidos.

    ResponderEliminar
  8. Gabriel:

    1- sí, por supuesto que sé quién es Hideo Kojima. Sin embargo, si pudiera escoger al lado de qué gran maestro me gustaría trabajar, escogería al maestro de los maestros: Shigeru Miyamoto.

    2- el motor gráfico de un juego es una parte del motor de juego. Se encarga de realizar todos los cálculos que tienen que ver con la visualización del juego, como calcular las luces, texturas, efectos, shaders, etc.

    Unreal Engine no es un motor gráfico, es un motor de juego. Debe incluir entre una de sus partes un motor gráfico.

    3- en Japón todas las compañías contratan nuevos programadores todos los años. El número depende del tamaño de la compañía. No sabría decir cómo funciona la cosa en Europa o EEUU. Sin embargo, puedes revisar los websites de compañías que te interesen; siempre tienen una sección de "recruitment" o "jobs". Ahí puedes ver cómo está la demanda hoy en día.

    ResponderEliminar
  9. Terrible el terremoto en Japón. Simón espero que esté bien y sus conocidos también.

    ResponderEliminar
  10. veo que esta es la ultima entrada del blog asi que solo espero que estés bien y si puedes informar de como estan las cosas por allí.

    ResponderEliminar
  11. Sigo siempre tu blog.

    Espero estés bien, al igual que tus amigos en Japón.

    Un abrazo desde Chile.

    ResponderEliminar
  12. hola! ¿estas bien? espero que tu y tus amigos lo esten! avisa si puedes de que estas sin ningun peligro! suerte y que Dios te cuide.

    ResponderEliminar
  13. Yo también sigo siempre tu blog desde Maracaibo, espero que este bien y todos tus conocidos.

    ResponderEliminar
  14. espero que estés bien Simón y todos los muchachos y muchachas en Platinum Games también, son espeluznantes las imágenes que salen en televisión

    ResponderEliminar
  15. Hey! estas bien? y tus amigos, la gente de Platinum Games? espero que no les haya pasado nada malo, el terremoto, el tsunami y la alerta nuclear han sido horribles D: por favor dejanos saber si estas bien.

    ResponderEliminar
  16. Hola.. El esta bien. En Osaka no fue tan fuerte. Esta al sur del pais y el terremoto y la planta nuclear con problemas estan al norte. El escribió que estaba bien
    Saludos

    ResponderEliminar
  17. gracias a todos por escribir y por preocuparse. Discúlpen que no haya escrito antes. Sí, gracias a Dios todo está bien por aquí. Mis amigos y la gente de P* también están bien.

    Espero escribir un poco sobre el terremoto pronto.

    ResponderEliminar
  18. bien que estes bien ;D igual la gente de P* pasaba por la pagina e imagine q todo bien pues lanzaron trailers de Anarchy Reigns asi que asumí que todo estaba bien, aun que no te reportabas, hablo por todos cuando digo que nos alegra saber que te encuentras bien

    ResponderEliminar
  19. Hola Simón, que bueno que estás bien ! me hubiera gustado ir de voluntario, de verdad, pero no tengo dinero para viajar y no sé de que otra forma podría haber ido.
    Te cuento, que lo primero que hago al llegar al trabajo, es encender la radio y revisar si hay entradas nuevas jeje Espero que, sin complicarte, pronto puedas publicar una nueva entrada.
    Saludos

    ResponderEliminar
  20. Hola Simón, desarrolle una aplicación con todos los kanjis, para ipod, pc, etc. Esta traducido al castellano, ingles e italiano, vos crres que pueda enviar lo que desarrolle a alguna empresa de software y tenga exito. Saludos

    ResponderEliminar
  21. Anónimo: la verdad es que no puedo juzgar si tendrás éxito o no. No sé qué hace, o qué problema resuelve, tu aplicación. Sin embargo, no pierdes nada intentando vender tu aplicación a empresas de software, ¿verdad?

    ResponderEliminar
  22. S por su puesto, o tambien crear una pequeña empresa, que complemente el soft con flash cards y complentarlo con libros u juegos didacticos

    ResponderEliminar
  23. Hola Simón, nada más paso a comentar algo que no tiene importancia, pero me parece bueno señalarlo, el código que escribiste tiene cierto "agujero", no se cómo llamarlo.

    Supongamos que el código completo fuera el que escribiste, no faltaría una función o evento o bucle que ayude a lograr las 100 monedas que se necesitan para que la función takeCoin() se llevara a cabo?.

    De verdad que no me las quiero dar de "Smart Ass", ni nada, supongo que ése código lo escribiste así en pos de la simplicidad.

    Muchos éxitos, me encanta tu blog!!! :D

    PD: No leas mi blog, no hay nada de importancia, ni personal, ni que merezca tu tiempo. Es un ejercicio que estoy haciendo para ver qué tal pega. Saludos :)

    ResponderEliminar
  24. lokoplus: no sé si entendí bien tu duda.

    En este ejemplo, la función takeCoin() es invocada cuando el jugador toma una moneda. No hace falta otra función para lograr las 100 monedas, ya que takeCoin() es la que se encarga de incrementar el contador de monedas.

    Por supuesto, hace falta una función que juzgue cuándo el jugador está suficientemente cerca de una moneda como para considerar que éste la ha tomado. Esa función debería ser invocada en cada iteración del juego.

    Eso es lo que quise decir con: "Digamos que esta función es ejecutada cada vez que el jugador toma una moneda".

    Dime si no me expliqué bien, o si no entendí tu duda.

    ¡Gracias por tus palabras! ¡Y gracias por leer el blog!

    ResponderEliminar