Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Consejos sobre camino camino como programador

Iniciado por adrigm, 03 de Abril de 2012, 08:36:05 PM

« anterior - próximo »

adrigm

Buenas, sé que por el foro hay muchos temas sobre como empezar en el mundo de los videojuegos y demás. No es eso lo que yo vengo a preguntar.

Tengo clara a que parte del desarrollo de videojuegos me quiero dedicar, la programación y también más o menos clara la especialización que quiero tener algún día la Inteligencia Artificial.

Antes que nada decir que no soy un novato, pero tampoco un profisional. Tengo un cierto nivel programando en C++ y Python, así como experiencia haciendo juegos 2D con bibliotecas como SDL, SFML, Pygame y otras bibliotecas multimedia. Es decir, se de que va esto.

La duda es que aprender hoy en día. Yo según he visto en la industria indie puedo tener las siguientes opciones.

1. Ir por el camino de C++ hacer algunos juegos 2D con SDL, SFML y otras bibliotacas multimedia, más adelante seguir avanzando en el aprendizaje de C++ aprender a usar algún motor gráfico 3D como Ogre. Ir haciendo un portafolio de juegos y proyectos.

2. El tan de moda camino de los dispositivos móviles. Aprender Objetive-C o Java, programar para IOS o Android para intentar entrar al mercado por aquí. Aunque no sé porque pienso que si uno quiere ser profesional de verdad este no es el camino para hacer en el futuro juegos serios, me explico aprender Java está muy bien para hacer juegos para Android, pero si te sales de ahí no vas a lidiar con Java en ningún otro sitio en el mundo de los videojuegos. Lo mismo con IOS y Objetive-C. Pienso que no es la opción correcta, aunque si muy rápida y sugerente.

3. Juegos Web: Flash, HTML5, etc. Más de lo de arriba fuera de ese ámbito se queda limitado, para juegos casuales está bien para juegos serios no lo veo tanto.

4. Otros caminos. Seguro que vosotros tenéis mas opciones, espero comentarios.

En fin que los desarrolladores experimentados me den su consejo de por donde debería tirar para meterme en la industria. Un saludo.
http://razonartificial.com/ - Blog personal sobre desarrollo de videojuegos

AgeR

Buenas,

Por lo que dices, ya has hecho más que la mayoría de los que buscan trabajo en la industria, esto es, empezar haciendo juegos pequeños.

Te resumo: C++.
Te explico: Nosotros estamos buscando un programador C++ con un mínimo de experiencia profesional y/o amateur, y aunque tenemos un par de candidatos interesantes, ha sido mucho más difícil de lo que podría pensarse encontrar gente que cumpliera unos requisitos "simples" (la oferta está en el portal de Stratos).

Además con C++ puedes programar juegos igualmente para iOS y Android.

En cualquier caso, depende de lo quieras hacer. En España vas a tener bastante difícil especializarte en algo (hablas de IA...), ya que las empresas son demasiado pequeñas en general como para requerir gente especializada en una sola materia, por lo que si quieres trabajar en IA a medio o largo plazo tendrás que plantearte emigrar.

Un saludo!

[EX3]

Cita de: adrigm en 03 de Abril de 2012, 08:36:05 PM
El tan de moda camino de los dispositivos móviles. Aprender Objetive-C o Java, programar para IOS o Android para intentar entrar al mercado por aquí. Aunque no sé porque pienso que si uno quiere ser profesional de verdad este no es el camino para hacer en el futuro juegos serios (...) Pienso que no es la opción correcta, aunque si muy rápida y sugerente.
¿Por que piensas que no es camino correcto para hacer futuro? Justamente es una plataforma que esta teniendo tanto éxito o más que las grandes consolas. Se puede ser profesional en este mundillo haciendo juegos casuales, ya sean para iPhone, Android, Flash o PC/Mac e incluso consolas, no necesariamente haciendo títulos AAA. Sobre lo de rápido y sugerente, tiene más trabajo del que piensas hacer un buen juego para dispositivos móviles.

Cita de: adrigm en 03 de Abril de 2012, 08:36:05 PM
me explico aprender Java está muy bien para hacer juegos para Android, pero si te sales de ahí no vas a lidiar con Java en ningún otro sitio en el mundo de los videojuegos. Lo mismo con IOS y Objetive-C.
Si quieres trabajar en videojuegos no puedes (o no deberías más bien) casarte con una tecnología u otra, esto incluye a los lenguajes de programación. Yo soy aferrimo de .NET, Visual Studio, C# y XNA (y antes, durante 10 años, de Visual Basic 6.0 y mi propia libreria para trabajar con DirectX) pero también tuve que aprender Action Script y a trabajar con FlashDevelop y Flixel (una libreria para juegos en AS3) para poder desarrollar los últimos juegos Flash en los que he trabajado.

De todas maneras, ahora mismo existen opciones interesantes, algunas de pago y otras gratuitas en cierta manera como Unity3D, una de las más populares, para cubrir desarrollos de PC, Mac, Web (via player propio o exportando a Flash), iOS y Android usando un mismo lenguaje y un mismo entorno y framework. Hay muchas empresas que lo usan pero si como dices quieres "profesionalizarte" tendrás que mentalizarte en que tendrás que ser abierto a la hora de aprender cualquier lenguaje o herramienta según la plataforma, si no te vas a cerrar muchas puertas.

Piensa que en tu caso, quieres especializarte en programación de IA, el lenguaje debería ser lo que menos te importara así como la plataforma. En tu portfolio no deberían a valorar cuantos juegos "serios" has desarrollado en C++ si no cuantos juegos en general has desarrollado o participado/colaborado, ya sean para PC, consola, Android o Flash, sin importar el lenguaje, valoraran que tal desempeñas tu tarea como programador de IA.

Otra cosa a tener en cuenta, aunque te quieras especializar en IA, si acabaras entrando en un estudio pequeño o mediano tendrás que saber desenvolverte en otras áreas aunque no te especialices en ellas. Piensa que salvo estudios muy grandes nunca vas a encontrar ofertas para un programador exclusivamente de IA ya que no es común que los estudios pequeños/medianos puedan formar equipos tan diversificados y especializados.

Salu2...
José Miguel Sánchez Fernández
.NET Developer | Game Programmer | Unity Developer

Blog | Game Portfolio | LinkedIn | Twitter | Itch.io | Gamejolt

adrigm

Gracias por las respuestas.

Primero contesto a AgeR. Gracias por la recomendación, se que se pueden hacer juegos para plataformas móviles en C++ con cosas como Cocos2Dx, pero si vas a buscar trabajo en una empresa que desarrolla para IOS lo mas normal es que te pidan Objetive-C para integrarte en un equipo y para lidiar mejor con todos los componentes de Cocoa, por ejemplo.

En cuanto a la especialización, tengo claro que de momento no es lo principal, es el objetivo algún día primero hay que aprender las bases del desarrollo en todas áreas y ya luego especializarte, por eso por ahora a lo que me dedico es a programar juegos en general aparte de que para labrarte un portafolio no te queda otra que hacertelo todo tu.

De hecho ahora mismo estoy elaborando un pequeño Engine en C++ para juegos 2D para coger más nivel en C++ y tener una base para ir haciendo proyectos y prototipos, he publicado en proyecto en el foro: http://www.stratos-ad.com/forums/index.php?topic=15088.0

Ahora a [EX3]. Gracias también por la respuesta. Me explico en lo de que no pienso que sea el camino correcto. Si uno quiera empezar en este mundo creo que no es lo mejor empezar a programar en un lenguaje y plataforma tan especializada como podría ser IOS y Objetive-C o Android y Java. Pienso que sería perderse mucho en aprender particularidades de los sistemas y no en aprender desarrollo en general con el objetivo de o bien sacar algun proyecto por tu cuenta con lo complicado que es o con suerte conseguir un puesto en una pequeña empresa como programador de estos dispositivos. Que sería entrar en la industria, pero no sé hasta que punto esto es un buen terreno para mejorar en la industria en general o sería cerrarse a una plataforma en particular.

Lo mismo pienso de cosas como Unity, a ver si me explico mejor que creo que no lo he hecho bien. Con tecnologías como estas aprenderás un montón y es posible que si te especializas bien consigas trabajo, pero ¿Hasta que punto dependerás de una tecnología en concreto que vete tu a saber cuando cierran? Pienso que para ser un buen programador en este mundillo uno debe ser independiente y no casarse ningún sistema sino aprender los fundamentes del desarrollo y adaptarse a cualquier tecnología, por eso la idea de que mejor C++ y aprender conceptos de desarrollo que aventurarse a aprender las particularidades de una tecnología.

El problema creo es también la elección, te puedes arriesgas a prepararte para trabajar en una tecnología pongamos por ejemplo Unity te vuelves bueno programando para este sistema con la idea de buscar trabajo en una empresa que lo use. Bien, seguro que aprenderás bastante de desarrollo en general, pero si algún día cambias de empresa o se cambia la plataforma lo tendrás crudo pues tu solo estás acostumbrado a usar esa tecnología privativa.

Lo de la especialización en IA se que de momento es difícil, lo dejo para un futuro pues como bien dicen especialistas en un área solo los hay en la grandes compañías en juegos triple A.

Creo que el camino entonces es C++ conseguir un buen nivel, hacer proyectos interesantes conseguir mucha experiencia con bibliotecas estándares como la STL o Boost. Hacerte un buen portafolio y poco a poco ir dándote a conocer, el problema que le veo es que los estudios españoles que son la opción mas clara para entrar en el mundo profesional no suelen pedir esto sino alguien que sepa o Unity, o CoronaSDK o UDK y demás tecnologias especializadas.

En resumen que creo que si te decantas por una tecnología en concreto tendrás más posibilidades para conseguir un hueco en este mundillo, pero menos de avanzar a más. Y si te vas directamente a por C++ tendrás más dificil entrar en la industria pues suelen pedir buenos especialistas.

Os pido la opinión de que harían ustedes para progresar en este mundo que camino tomarían.

Por cierto soy estudiante de Ingenieria de Software en la universidad Politécnica de Madrid y la idea es cuando termine hacer el Master de videojuegos en la UCM. Pero creo que si quieres ser bueno aparte de esto hay que echarle muchas horas por tu cuenta y hacer juegos muchos juegos.
http://razonartificial.com/ - Blog personal sobre desarrollo de videojuegos

AgeR

Cita de: adrigm en 03 de Abril de 2012, 11:18:49 PM
Pero creo que si quieres ser bueno aparte de esto hay que echarle muchas horas por tu cuenta y hacer juegos muchos juegos.

Creo que eres de los que tienen las cosas más claras de cuantos han entrado en el foro buscando consejos sobre cómo entrar en la industria y demás  ;)

Ahora mismo, hay 3 opciones bastante claras: C++, Unity, Flash. Flash y Unity te serán más fáciles de dominar a fondo echándole horas, y puede ser una muy buena opción tal y como está hoy en día el mercado español. Eso si te quieres quedar en España. Si quieres salir fuera, sigo aconsejándote C++ (puedes mirar las ofertas que suelen publicarse en la revista Edge, en Gamasutra, etc... y hacerte una idea).

Desde nuestra experiencia, apenas tocamos nada nativo de iOS. Lo justo para lanzar la aplicación que contiene el juego, que está programado en C++ sobre un motor propio (usando OpenGL ES para gráficos, OpenAL para audio, etc...). El 99% es C++. No sé cómo trabajan otros, te cuento nuestra experiencia. De todos modos, hay gente por ejemplo haciendo juegos para iOS usando Flash o Unity, así que se podría resumir en que cada empresa, y cada juego son un mundo.

En resumen, dominar C++ te va a costar, por lo que a la par quizá sea interesante que también te metas con Unity o Flash, ya que tampoco viene mal conocer varias opciones porque, como te digo, cada empresa y cada juego son diferentes.

Un saludo.

[EX3]

Cita de: adrigm en 03 de Abril de 2012, 11:18:49 PM
Si uno quiera empezar en este mundo creo que no es lo mejor empezar a programar en un lenguaje y plataforma tan especializada como podría ser IOS y Objetive-C o Android y Java.
Todo depende. Si ya conoces Java y tienes experiencia en ese lenguaje Android no lo veo mal como escenario para aprender a desarrollar tus primeros juegos, yo diría que hasta en cierta manera te motiva un poco eso de poder ver y probar tus primeras creaciones en tu móvil :)

Cita de: adrigm en 03 de Abril de 2012, 11:18:49 PM
Lo mismo pienso de cosas como Unity, a ver si me explico mejor que creo que no lo he hecho bien. Con tecnologías como estas aprenderás un montón y es posible que si te especializas bien consigas trabajo, pero ¿Hasta que punto dependerás de una tecnología en concreto que vete tu a saber cuando cierran?
Pero esto te va a pasar siempre con cualquier lenguaje y herramienta que uses o se use. Aunque programes en C++ tendrás que actualizarte en como se implementan ciertas cosas o como se trabaja con APIs como OpenGL o DirectX. Lo que no puedes hacer tampoco es dar de lado una tecnología puntera del momento por que quizás caduque dentro de 5 o 7 años. Si es lo que se usa en la industria en ese momento te interesara aprenderla y dominarla o al menos saber desenvolverte básicamente con ella, pero no como única opción de cara a futuro a largo plazo, tienes que pensar en el futuro a corto plazo con este tipo de herramientas.

Cita de: adrigm en 03 de Abril de 2012, 11:18:49 PM
En resumen que creo que si te decantas por una tecnología en concreto tendrás más posibilidades para conseguir un hueco en este mundillo, pero menos de avanzar a más. Y si te vas directamente a por C++ tendrás más dificil entrar en la industria pues suelen pedir buenos especialistas.
Como dice Ager, nada te impide conocer, practicar y coger experiencia con otros lenguajes o herramientas. Esto seria lo que te aconsejaría, seguir con C++ y especializarte en el si así lo consideras, pero también conocer el resto de lenguajes y herramientas populares que se usan en la industria aunque sea solo por encima, controlando lo básico.

Salu2...
José Miguel Sánchez Fernández
.NET Developer | Game Programmer | Unity Developer

Blog | Game Portfolio | LinkedIn | Twitter | Itch.io | Gamejolt

Vicente

Haz juegos, con el lenguaje y herramienta que quieras, y para la plataforma que quieras, al final las cosas no cambian tanto de un lenguaje a otro realmente, y lo importante es que te pegues haciendo proyectos de principio a fin.

Que el dia de mañana tienes que cambiarte a otra herramienta? Pues te cambias y a correr, es el pan de cada dia en la informatica.

jmtu

No soy un profesional, ni un especialista, ni...pero olvídate de que si programas para Android/IOS.....no vas a aprender ha hacer juegos sino especializarte en esa plataforma/lenguaje. Aprenderás ha hacer juegos. Es como aprender un lenguaje de programación. En mis tiempos mozos aprendí basic con el C64 y allí aprendí los bucles, las bifurcaciones, las funciones, las variables, las constantes, el paso por valor, por referencia (esto último no estoy muy seguro de si fue entonces o más tarde, pero creo que entonces) y tooodo eso sigue valiendo hoy que programo en java, y en el pasado al hacerlo en C. Si aprendes a programar juegos, aprendes a programar juegos y tendrás que adaptar cosas si cambias de plataforma o lenguaje, pero si programas en C++ en una empresa que usa un motor licenciado y decide cambiarlo, también tendrás que adaptar cosas con el mismo lenguaje y la misma plataforma.
Así que, en resumen y como te han dicho los que sí son profesionales y llevan mucho en esto, sigue lo que estás haciendo, programando y terminando lo que haces y lo que aprendes por el camino lo podrás aplicar más tarde de una forma u otra. Y sí C++ sirve para Android, de hecho en la mayoría de ofertas para este te lo piden.
Es decir que vas bien

TrOnTxU

Cita de: adrigm en 03 de Abril de 2012, 11:18:49 PM
Creo que el camino entonces es C++ conseguir un buen nivel, hacer proyectos interesantes conseguir mucha experiencia con bibliotecas estándares como la STL o Boost. Hacerte un buen portafolio y poco a poco ir dándote a conocer, el problema que le veo es que los estudios españoles que son la opción mas clara para entrar en el mundo profesional no suelen pedir esto sino alguien que sepa o Unity, o CoronaSDK o UDK y demás tecnologias especializadas.

Llego un poco tarde, pero ojeando he visto lo de STL o Boost ... y no he puedo evitarlo, lo siento  ^^
Muchos te dirán que están suficientemente maduras y que son la bomba (hablo de gente "pro" con títulos en el mercado, no de cualquiera), y otros se horrorizarán hablando de fragmentacion de memoria, los malos que son los try/catch de los allocadores, la "complejidad" innecesaria en algunos casos de los iteradores, los fallos que siguen habiendo en muchas plataformas (hay gente que se ha tenido que reprogramar la STL entera para que los luchadores no salieran "en pelotas"), y que vivan los arrays de toda la vida (tambien te hablo de "pros").

Yo estaré más o menos al medio de ambas opiniones ... o quizás no ... en runtime NUNCA utilizo STL ni Boost, ni megaultratemplates que tardan "eones" en compilar, y algunos gcc directamente te lo escupen a la cara.
En cambio cuando hago herramientas en C++, basicamente programas de linea de comandos para compilar assets, etc. me "harto" de usar STL list, vectors, string, etc. Es muchismo más comodo.


En cuanto a lo que te pueden pedir, si es un estudio "más pequeño" que es lo más habitual aqui, buscarán una licencia "asequible" de una tecnologia, aunque esta esté cerrada, y buscaran a gente que controle de esa "tecnologia" (como es lógico).

Aprender estas "tecnologias especificas" como las llamas te pueden valer para "tomar contacto" con las "soluciones" a los problemas de desarrollo que ofrecen las mismas.
Ya que si quieres desarrollar tu propia version de alguna tecnologia (IA, fisicas, graficos, ...) lo primero es que pruebes lo que hay, como funciona y que se puede mejorar (según Picasso: "los grandes artistas copian, los genios roban").


Y como dices para avanzar en tecnologia hay que pegarle al C++, pero hay que pegarle mucho, muchisimo.
También hay empresas en España que demandan a gente "especializada", no nos engañemos.
Pero normalmente se busca a alguien con un "curriculum" si piensas en asignarle un subsistema del engine entero para él solito.


A mi no me parece tan mala idea que comiences a darle caña a Unity, UDK, etc., si llegas controlar algo, es un buen punto de comienzo para poder "entrar en la industria", una vez dentro todo cambia, comenzando por la percepción que puedas tener de la misma.

Una vez dentro si te ves con "coraje" para seguir (muchos colegas han sido "inteligentes", han desertado de los "jueguecitos", y han vuelto a trabajos más "tranquilos y bien pagados"), y estás dispuesto a seguir perdiendo horas por la noche en casa, y levantarte a las 7 y media al dia siguiente para ir al estudio, ... ¡Enhorabuena!, de repente un dia de das cuenta de que NO SABES NADA.
Pero al menos, te pagan al final de mes.

En fin espero no ser demasiado deprimente.
Un saludo y ánimo :)
Vicent: Linked-In  ***  ¡¡Ya tengo blog!!

julen26

Me gustaría agradecer la apertura de este tema y todos vuestros comentarios ya que me encuentro en la misma situación. Yo no puedo dar mi consejo ya que me identifico totalmente contigo, adrigm.  Aún así debo decir que estoy de acuerdo con que no hay que cerrarse las puertas con una tecnología concreta.

Personalmente estuve usando durante unos años el Game Maker para crear los juegos, con el cual llegué a completar un proyecto serio. Decidí  dar el salto hacia otro nivel mediante C++ con librerías como SDL y SFML. Actualmente uso SFML para un pequeño proyecto que estoy haciendo pero ya me estoy planeando empezar a tomar contacto con otras herramientas. Leo muy buenos comentarios por aquí sobre Unity.

También me he interesado por el desarrollo en dispositivos móviles, por supuesto. Es más, incluso me gustaría hacer un port de juegos en SFML a estos dispositivos. Así también podría entrar un poco en el mundillo de Android y iOS. El problema es que estoy a la espera de que SFML sea compatible con OpenGL ES y mientras tanto no encuentro una alernativa para desarollar fácilmente con C++ en Android y iOs que sea gratuita.

Resumiendo, aumentando el portofolio...
Saludos.

_eternal_

Hola!

He estao mirando un poco el codigo que tienes y esta bastante bien organizado.

Yo los consejos que te daria por lo que he visto es que sigas asi. No solo aprendiendo conocimiento de videojuegos como tales, algoritmos, formas de hacer las cosas en videojuegos sino tambien de como programar bien, robusto, con calidad, etc.... si algo he descubierto en esta industria es que el 70% de los programadores tienen mucho conocimiento de videojuegos en si, de como hacer las cosas, pero no escriben codigo robusto ni reutilizable ni nada. Para eso lo mejor muchos libros de C++, te recomiendo Andrei Alexandrescu y Herb Sutter, especialmente estos libros:
- Modern C++ Design
- Coding Standards
- Exceptional C++
- Exception style C++

Todos ellos muy buenos y para mi indispensables ya que sientan las bases de lo que yo creo que deberia ser un buen programador de videojuegos, que no es solo saber el algoritmo de A* o programar un QuadTree, sino muchas mas cosas.

Saludos!

TrOnTxU

#11
Cita de: _eternal_ en 31 de Mayo de 2012, 09:34:41 PM
... si algo he descubierto en esta industria es que el 70% de los programadores tienen mucho conocimiento de videojuegos en si, de como hacer las cosas, pero no escriben codigo robusto ni reutilizable ni nada.
...
Todos ellos muy buenos y para mi indispensables ya que sientan las bases de lo que yo creo que deberia ser un buen programador de videojuegos, que no es solo saber el algoritmo de A* o programar un QuadTree, sino muchas mas cosas.
...

???

¿Cuantos programadores de la "industria" conoces?

PS: un "int[64]" sigue siendo más rápido de compilar, y suele ser más eficiente asi como portable que un "vector<int>"
Vicent: Linked-In  ***  ¡¡Ya tengo blog!!

_eternal_

Cita de: TrOnTxU en 31 de Mayo de 2012, 09:41:02 PM
Cita de: _eternal_ en 31 de Mayo de 2012, 09:34:41 PM
... si algo he descubierto en esta industria es que el 70% de los programadores tienen mucho conocimiento de videojuegos en si, de como hacer las cosas, pero no escriben codigo robusto ni reutilizable ni nada.
...
Todos ellos muy buenos y para mi indispensables ya que sientan las bases de lo que yo creo que deberia ser un buen programador de videojuegos, que no es solo saber el algoritmo de A* o programar un QuadTree, sino muchas mas cosas.
...

???

¿Cuantos programadores de la "industria" conoces?

PS: un "int[64]" sigue siendo más rápido de compilar, y suele ser más eficiente asi como portable que un "vector<int>"

Conozco muchos.

TrOnTxU

Cita de: _eternal_ en 01 de Junio de 2012, 12:37:51 PM
Conozco muchos.

Pues yo lo dudo mucho, si conocieras a "gente de la industria" no te atreverias a decir que "no saben programar".

Suerte tienes, de que no se "muestre" tu "verdadera identidad", porque después de esa afirmación, si algún "inepto programador de videojuegos" recibiese tu curriculum durante un recruitment, lo dejaria, casi seguro, "bajo del montón". En esta "industria" si algo sobran son "listos sabelotodo", y si algo falta es gente humilde con ganas de aprender.


Un saludo.
Vicent: Linked-In  ***  ¡¡Ya tengo blog!!

Gallo

_eternal_ estas dando una opinión como si fuera un hecho XD. Yo que soy indie y con un dominio considerable en programación me está costando entrar, alguien de la industria en la mayoria de casos tendrá un dominio mayor seguro.

Por cierto no mencionas los libros Efective C++ y More Efective  C++ con los que básicamente no hace falta ninguno mas.






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.