Este ‘debate’ no se refiere tanto a los lenguajes (que son distintos, pero igualmente válidos) como a sus respectivos frameworks y máquinas virtuales. Yo sigo los blogs tanto del desarrollador de Irrlicht como el de Ogre. Y curiosamente, sus filosofías en dichas librerías también se extienden a sus gustos personales.
A Niko, al igual que con Irrlicht, le gusta programar en C++ a bajo nivel. No en vano, prefiero recomendar Irrlicht como librería para aprender, porque es como una capa por encima de las APIs gráficas, y le falta mucha funcionalidad. Pero es muy sencillita y abstrae lo suficiente sin marear, ideal para aprender.
En el polo opuesto, Steve prefiere abstracciones que permitan resolver problemas de forma general que, aunque suelan enmascarar lo que hay por debajo, lo ponen realmente fácil para añadir nueva funcionalidad. Por ello, opino que Ogre es la mejor opción para crear un juego sin aprender ni torta de gráficos. Sin embargo, hay que acostumbrarse al motor, lo que lleva un tiempo.
Recientemente han publicado varios posts en los que ambos autores hablan de Java o C#. A fin de cuentas, son lenguajes muy diferentes: Java es más sencillo (a pesar de los Generics y demás azucar sintáctico) y C# tiene más acceso a bajo nivel y control del compilador (por ejemplo, con sentencias de pre-compilador).
Yo estoy desarrollando mi PFC en Java. No engaño a nadie: si tuviera que elegir, saldría ganando Java porque es mi opinión al fin y al cabo. Pero dependiendo de la situación me decantaría por uno o por otro.
Java me parece más portable ahora mismo. Mono está en desarrollo, y no es algo “oficial” por mucho que Microsoft lo “apoye” a través de Novell. A Microsoft le interesa que Mono ayude a lavar su imagen. Ahora bien, centrándonos en el desarrollo de juegos ¿es posible usar Mono?. Tanto Java como Mono van a ser más lentos que C++ si TODO está programado en ellos.
Pero en la mayoría de los casos, lo que se hace es utilizar wrappers que llaman a código C++. En mi caso, apenas utilizo librerías de Java más allá de las colecciones (tablas has, listas y demás) y algo la parte de carga de imágenes para no depender de librerías externas a la hora de cargar texturas.
Por eso no es necesario que Mono haga todo lo que hace la máquina virtual de Microsoft. Solo es necesario librerías básicas y poder usar esos wrappers. En mi caso, también siento cierto apego por Java como lenguaje en sí, y por los entornos de desarrollo. Mono no tiene un Visual Studio para plataformas no-Windows. Sin embargo, tanto Netbeans como Eclipse son unos estupendos IDEs multiplataforma.
Respecto a Java, me gusta lo sencillo que es. Para mí, los generics han limpiado un poco el código y no han ‘pervertido’ el lenguaje (al menos, no tanto como Ortín suele decir). Cuando empecé a portar ciertas partes del SDE a Java, había momentos en los que costaba leer el código. Nada grave pero, por ejemplo, a veces tenía que buscar si un objeto.Param = 1 era un acceso a un parámetro ‘a pelo’ o usaba propiedades, que no es más que una forma de enmascarar los clásicos get y set de Java.
Ahora parece que a Miguel de Icaza le está yendo bien con Mono como plataforma de script para juegos. Y está claro que es una opción perfectamente válida. Yo no pido que se descarte a Mono de la ecuación, sino que se tenga en cuenta a Java que, muchas veces se le supone hasta menos eficiente que Python, por alguna razón. Quizás los applets le hayan dado esa fama a Java, pero en mi opinión, muchos de esos comentarios son “por seguir la corriente”. Es un cliché como puede ser meterse con Microsoft.
Y una vez más, termino una comparativa sin un claro ganador. He usado ambos lenguajes y ambos son muy cómodos. Sin embargo, prefiero inclinarme a pensar que la burbuja de Java todavía no ha estallado. Un lugar para cada cosa, y cada cosa en su lugar.

