Autore Topic: Come diventare un game developer?  (Letto 2465 volte)

Offline TheKaneB

  • Human Debugger
  • *****
  • Post: 5292
  • Karma: +20/-23
    • Mostra profilo
    • http://www.antoniobarba.org
Come diventare un game developer?
« il: 05 Novembre 2011, 21:19:19 »
Spesso mi è capitato di rispondere a domande di questo tipo.
Di solito guardo bene negli occhi il tizio e cerco di capire che tipo è. Quasi sempre, infatti, il tipo in questione non ha la più pallida idea di cosa significa programmare un software complesso e al massimo ha imparato a fare poco più di un hello world, si cimenta magari un pochino con qualche tool o editor grafico e magari ha anche fretta di raggiungere risultati tangibili entro l'altro ieri.

Ad esempio, qualche settimana fa, un ragazzo che ha letto il mio profilo su un forum di programmazione, mi ha scritto una mail in cui mi diceva, in breve:

Citazione
Ciao Antonio, sono X di tale forum,

sto pensando in maniera ambiziosa,forse non realizzerò mai ciò che sto per chiederti ma spero tu possa darmi una mano.
Non voglio esserti di peso,volevo "solo" chiederti come si programmano giochi per 360...
Mi spiego meglio, frequento il tale anno di tale istituto tecnico, e se non fosse stato per passione mia e di un paio di compagni di classe non avremmo saputo mai cosa sia un oggetto(a scuola fanno fare VB ma lo trattano come un linguaggio strutturato),quindi abbiamo conoscenze,paradossalmente,autodidattiche della materia indirizzo di scuola,poichè i docenti non vogliono aggiornarsi e molti fanno scelte di cui non sono per niente manco lontanamente interessati.
Poichè il mio sogno è programmare videogames su console xbox e ps3 volevo chiederti dei cenni generali su come crei mondi virtuali(3D modelling e mapping),come controlli giocatori,autoveicoli,etc (insomma gli oggetti) , che studi hai frequentato e se hai dovuto frequentare corsi molto costosi.
Voglio realizzare il mio sogno e anche se attualmente sono lontano(ho provato a fare qualcosina in blender e anche se io amo il 3d ,potrei tranquillamente gettarmi nel cesso) vorrei avvicinarmi.

Grazie dell'attenzione , have nice day!

In poche parole mi sta dando queste informazioni:
- Sono consapevole di non capire niente di programmazione, ma sono in grado di studiare autonomamente
- Non so da che parte cominciare
- Sono giovane e spensierato, e non ho mai seriamente studiato matematica e algoritmi che sono cose per me ignote
- Sono incosciente e cieco, quindi mi butto volentieri a capofitto in una impresa di proporzioni titaniche perchè sono anche un po' masochista

Non sapevo se mandarlo direttamente a cagare o se dargli una possibilità, ma siccome avevo 10 minuti liberi, gli ho scritto questa risposta, che riporto per intero
Citazione
Ciao,

la tua è la classica domandona da un milione di dollari :D

Programmare videogiochi di un certo livello richiede una passione profonda che ti sostenga durante i lunghi anni di studi pesanti che dovrai affrontare. Studiare un linguaggio è solo uno degli aspetti, e anche uno dei meno importanti oserei dire...

Le cose veramente importanti sono, in ordine:

- Sapere studiare cose astratte e teoriche in modo autonomo (è diverso rispetto a studiare un linguaggio da autodidatta, perchè non si tratta di cose pratiche ma qui intendo roba tipo teoremi matematici complessi e altre cose simili)
- Una profonda conoscenza della matematica, specialmente Analisi, Geometria, Algebra lineare, Matematica discreta e combinatoria (che poi è la base comune di Grafica 2D/3D, Fisica e AI)
- Una profonda conoscenza dell'architettura dei calcolatori, partendo dalla struttura di un flip-flop fino alla pipeline out-of-order di una CPU moderna
- Elasticità mentale (essere portati per i giochi di logica come gli scacchi o cose simili)

e in seconda istanza, bisogna conoscere:
- C++ a livelli eccellenti
- Il funzionamento di un compilatore nel dettaglio (molti game engine includono degli interpreti o compilatori per vari linguaggi di scripting proprietari, ed in generale molti giochi si basano su virtual machines particolari come le avventure grafiche punta e clicca)
- Saper implementare correttamente almeno 15-20 Design Patterns diversi, avendo coscienza dei rispettivi pregi e difetti e degli specifici campi di utilizzo (MVC, Singleton, Listener, Delegate, Publisher-Subscriber, Private Implementation, Abstract Base Class, Factory, Manager, Functor e così via...)
- Conoscere molto bene il funzionamento di un sistema operativo, in particolar modo le problematiche relative a Filesystem, gestione della memoria e programmazione multithreading (mutex, semafori, monitor, algoritmi di scheduling, prevenzione dei deadlock, ecc...)
- Conoscere molto bene il funzionamento dei protocolli di networking e saper implementare correttamente un sistema client server e comprendere le problematiche relative alle comunicazioni real-time, la ridondanza, il fault tolerance, ecc...

Una volta acquisite queste basi, si può iniziare a parlare di videogames, partendo dalla struttura di un Game Engine e passando per le varie problematiche legate al game design, la definizione di specifiche, le metodologie di sviluppo in team (in questo campo si usano molto le metodologie Agile Development come SCRUM, EE e simili, anche se io preferisco metodi più classici che meglio si adattano a team grandi ad esempio il Testing Driven Development e il Design by Contract).

Poi ti specializzi su un settore che ti piace di più, come lo sviluppo di Tools, Graphics Programming, Engine, Shaders, Sound, Physics, AI, Game DataBase, Scripting, ecc...

Io ad esempio sono specializzato in Engine e Scripting, ho implementato varie virtual machine con sistemi di scripting avanzati, programmato sistemi a basso livello di astrazione (per sistemi multiplatform) sopra i quali si costruiscono gli strati più astratti come il Graphics Engine e il Physics Engine, ecc... Per questo motivo sono particolarmente ferrato in Architetture degli elaboratori, Algoritmi e Sistemi Operativi.

Una volta che il tuo cervello si sarà del tutto spappolato, capirai che la differenza tra XBox, PS3, Wii, Sarcazzo è solo un frammento insignificante di tutto quello che conosci e ti basterà studiare un paio di settimane la documentazione tecnica di quella particolare piattaforma, che influenzerà soltanto un 1-2% di tutto il codice di un gioco (ed il 5-10% del codice del solo engine).

Spero di averti spaventato, anche perchè tutta questa fatica non ti garantirà alcun lavoro in futuro, quindi faresti meglio a studiare come si programma un sistema gestionale per stampare fatture, che più o meno ti impiegherà 1/10 del tempo e ti farà guadagnare molto di più e molto più in fretta :D

Pubblico questa risposta perchè, sostanzialmente, mi toccherebbe riscriverla 10 volte al mese (si, sono bombardato da bimbimin.... ehm, aspiranti game developers, almeno 2-3 volte alla settimana). Adesso, quantomeno, posso liquidarli tutti con 3 righe di email e un link a questo thread :-D
« Ultima modifica: 01 Gennaio 1970, 02:00:00 da Guest »

Seiya

  • Visitatore
Re: Come diventare un game developer?
« Risposta #1 il: 05 Novembre 2011, 21:25:40 »
avrai certamente distrutto le ambizioni di questo giovane sviluppatore  :lol:
« Ultima modifica: 01 Gennaio 1970, 02:00:00 da Guest »

Offline Allanon

  • Administrator
  • Synthetic Voodoo
  • *****
  • Post: 3498
  • Karma: +17/-4
    • Mostra profilo
    • http://www.a-mc.biz
Re: Come diventare un game developer?
« Risposta #2 il: 05 Novembre 2011, 22:22:35 »
lo hai sgretolato, ma se reagisce positivamente alla tua risposta potrebbe avere la volontà adeguata ad affrontare una simile avventura  :D

...oppure attendere gli innesti di apprendimento rapido che abbiamo visto in Matrix...
 :lol:
« Ultima modifica: 01 Gennaio 1970, 02:00:00 da Guest »

Offline Allanon

  • Administrator
  • Synthetic Voodoo
  • *****
  • Post: 3498
  • Karma: +17/-4
    • Mostra profilo
    • http://www.a-mc.biz
Re: Come diventare un game developer?
« Risposta #3 il: 05 Novembre 2011, 22:23:47 »
...la realtà è che Antonio non vuole troppi concorrenti nel suo stesso campo e li stronca sin dall'inizio  :lol:  :lol:  :lol:  :lol:  :lol:  :lol:
« Ultima modifica: 01 Gennaio 1970, 02:00:00 da Guest »

Offline TheKaneB

  • Human Debugger
  • *****
  • Post: 5292
  • Karma: +20/-23
    • Mostra profilo
    • http://www.antoniobarba.org
Re: Come diventare un game developer?
« Risposta #4 il: 05 Novembre 2011, 22:26:49 »
Citazione da: "Allanon"
...la realtà è che Antonio non vuole troppi concorrenti nel suo stesso campo e li stronca sin dall'inizio  :lol:  :lol:  :lol:  :lol:  :lol:  :lol:

 :shhh:  :whistle:
« Ultima modifica: 01 Gennaio 1970, 02:00:00 da Guest »

AmigaCori

  • Visitatore
Re: Come diventare un game developer?
« Risposta #5 il: 05 Novembre 2011, 22:40:19 »
:) Da "buttare" nella sezione FAQ ;)

Mandarlo a cagare sarebbe stato semplice e veloce, dargli una possibilita' e' stato "umano" :) sei stato un grande, anche se NON seguira' la strada della programmazione, avra' capito che per realizzare i propri sogni bisogna impegnarsi. :)

Gli hai dato una possibilita', ben fatto. :)
« Ultima modifica: 01 Gennaio 1970, 02:00:00 da Guest »

Offline Amig4be

  • Human Debugger
  • *****
  • Post: 6000
  • Karma: +45/-27
    • Mostra profilo
    • Commodore Computer Blog
Re: Come diventare un game developer?
« Risposta #6 il: 05 Novembre 2011, 22:57:12 »
Per me ci sei andato troppo pesante :D

Alla fine magari potrebbe anche specializzarsi in un particolare ambito, ad esempio lui ha detto di amare la grafica 3D e di avere provato a usare Blender, potevi dirgli di insistere...  8-)

Offline TheKaneB

  • Human Debugger
  • *****
  • Post: 5292
  • Karma: +20/-23
    • Mostra profilo
    • http://www.antoniobarba.org
Re: Come diventare un game developer?
« Risposta #7 il: 06 Novembre 2011, 00:06:45 »
Si infatti ho cercato da un lato di spaventarlo, dall'altro di fargli capire cosa c'è dietro i giochi della "Xbox360 e PS3" che lui ha citato, si intende cioè roba di livello professionale. Se mi avesse detto "giochi per iphone" allora sarebbe stato molto diverso :-)
Continuando la discussione, gli ho poi consigliato di studiare i tutorial presenti su www.gameprog.it e www.gamedev.net e di cominciare con un clone di Tetris, R-Type e Super Mario in SDL :-)
« Ultima modifica: 01 Gennaio 1970, 02:00:00 da Guest »

Offline Allanon

  • Administrator
  • Synthetic Voodoo
  • *****
  • Post: 3498
  • Karma: +17/-4
    • Mostra profilo
    • http://www.a-mc.biz
Re: Come diventare un game developer?
« Risposta #8 il: 06 Novembre 2011, 00:18:52 »
@Antonio
quindi ammetti che ci avevo preso io!  :lol:  :lol:  :lol:
« Ultima modifica: 01 Gennaio 1970, 02:00:00 da Guest »

Offline cdimauro

  • Human Debugger
  • *****
  • Post: 4291
  • Karma: +7/-95
    • Mostra profilo
Re: Come diventare un game developer?
« Risposta #9 il: 06 Novembre 2011, 06:59:04 »
Citazione da: "dsar"
Be' dai, per fare giochi non ci vuole proprio tutto quel casino, tutta la roba che hai elencato, soprattutto i design pattern, sono per progetti molto grossi.
Alla fine per fare giochi chiunque comincia dalle cose più semplici (io cominciai con le SDL che sono un pugno nei maroni dato che sono low level).

Ci sono le librerie Allegro che per cominciare sono ottime, ho visto programmatori scarsi (la struttura dati più complicata che sapevano implementare era la lista) che le hanno usate con successo per giochini platform semplici o alcuni remake. La cosa ottima è che puoi buttarti nel low-level se ne hai bisogno, e mi pare che ora abbiano integrato il driver per OpenGL.

Gli unici requisiti sono la fantasia e il problem solving. L'algebra lineare è utilissima ma per iniziare i metodi porci del newbie's problem solving vanno più che bene. L'importante è cominciare, ottenere risultati ed essere soddisfatti. Poi col tempo si ottimizza, approfondendo su libri specifici sull'argomento o più specialistici.
Antonio ha volutamente esagerato parlando di praticamente tutto ed è vero che in un gioco "di spessore" un singolo programmatore non arriverà a coprire tutto quello scibile. Però è stato chiesto lo sviluppo su XBox 360, e non è certo la stessa cosa di sviluppare con le SDL.

Diciamo che la verità sta in mezzo? :P

Tags: