Marco Russo

.NET, Business Intelligence e dintorni

Corsi

Miei blog in inglese

aprile 2006 - Posts

Vivere sviluppando videogame: riflessioni sul mercato del lavoro in Italia

Grazie a una segnalazione dell'autore ho letto questo interessante articolo su Game Programming Italia di Gianluca Masina che mi ha consentito di avere un'idea di un settore che conosco poco ma che su di me esercita un indiscutibile fascino.
L'articolo descrive la situazione del mercato italiano dei programmatori di videogame, illustrando i motivi per cui molti sviluppator, per coronare i loro sogni, sono dovuti emigrare all'estero. Sulla situazione specifica del mercato l'articolo dice già moltissimo, ma approfitto dello spunto per fare qualche considerazione in linea generale.

Chi mi conosce sa che da sempre affermo che non c'è progetto software più complesso e oserei dire "completo" che lo sviluppo di un videogioco. Prestazioni, tempi di risposta, uso oculato delle risorse, resa grafica, interfaccia utente e, ultimo ma non meno importante, creatività: tutti ingredienti indispensabili per la riuscita di un progetto, la sfida è nel riuscire a riunirli e farli convivere in un singolo team e quindi nel prodotto risultante.
Questo è il motivo per cui provo sempre una certa invidia e un senso di inadeguatezza quando, quelle poche volte che riesco a giocare, realizzo che la complessità con cui mi confronto quotidianamente è solo una estrema frazione di quella cui si è trovato di fronte chi ha sviluppato il videogame che sto usando in quel momento.

Ma veniamo al tema del mio post. Come dicevo, l'articolo offre alcuni spunti molto interessanti.

La cultura italiana
Andare in giro a dire che si sviluppano videogiochi non causa un forte ritorno di immagine e stima (al di fuori di una ristretta cerchia di persone che comprendono bene il valore della cosa).
Difficile trovare qualcuno che sia disposto a investire in progetti simili: altrettanto vero, soprattutto se si pensa che in Italia è comunque difficile trovare finanziamenti su un progetto d'impresa se non si dispone di garanzie reali sul capitale investito.

La formazione
Non esiste una "scuola" per programmatori di videogiochi in Italia, ma aggiungerei che non esiste una formazione "eccellente" neanche per lo sviluppo del software. Spesso ho visto che ci si concentra su alcuni specifici aspetti della progammazione (l'analisi, gli algoritmi, i linguaggi, ecc.) tralasciando la visione d'insieme, la valutazione architetturale, l'analisi delle prestazioni in un sistema complesso. Sarei felice di essere smentito da qualche studente o professore universitario, e suppongo che le eccezioni esistano, ma credo di poter dire che sui grandi numeri questo problema esista: in Italia deleghiamo al mondo delle imprese la formazione "professionale", specialmente nel campo dell'IT. Ma aziende che spesso sono di dimensioni medio-piccole e non hanno le spalle coperte per investire su progetti di formazione a medio-lungo termine, se assumono qualcuno devono avere un risultato più o meno immediato.
Io sono un privilegiato, visto che per il mio lavoro sono necessariamente a contatto con aziende che rappresentano la fascia migliore (investono di più in IT, capiscono il valore della qualità, vedono le cose con un orizzonte temporale maggiore del budget che hanno già terminato). Ma sono cosciente del fatto che questa non sia la situazione caratteristica nella maggioranza dei casi.
Dunque: chi deve fare formazione in Italia? Per essere pratici, chi oggi è studia deve necessariamente "arrangiarsi": non può presupporre che il suo interlocutore (scuola, università o datore di lavoro) faccia per lui le scelte migliori, è chi studia in prima persona che deve fare le scelte giuste, magari sacrificando più tempo di quello che sarebbe necessario per conseguire i risultati che gli sono richiesti nell'immediato (esami o progetti di sviluppo che siano). Questa strada ripaga nel futuro, perché consente di essere più appetibili sul mercato del lavoro, soprattutto (paradossalmente) se il panorama resta questo in Italia.
Attenzione, il mio non è né un auspicio né un modello, ma semplicemente una cinica considerazione di cosa è più efficace nella situazione esistente.

I pregiudizi
Cito testualmente dall'articolo: Si pensa che un grafico/programmatore inesperto possano subito essere produttivi e dare lo stesso contributo di un loro collega già nel settore da almeno cinque anni (e naturalmente più costoso).
Quanto sono d'accordo: questo pregiudizio è tanto infondato quanto diffuso. Chiaramente nel settore dei videogiochi il problema è più chiaramente individuabile, perché se il prodotto finale non è eccellente, difficilmente il videogame avrà successo, se mai arriverà sugli scaffali.
Però attenzione: in un qualsiasi progetto di sviluppo software questo problema è presente, solo che spesso si riesce a mascherarne le conseguenze, almeno a livello formale. Qualcosa viene rilasciato, qualcosa viene usato dagli utenti, solo che poi saltano fuori errori, problemi prestazionali e si fanno patch, si compra nuovo hardware e si cerca in qualche modo di mettere una pezza agli errori iniziali, magari mascherandoli come "non avevamo le specifiche", "l'utente ha cambiato idea" o "le richieste sottostimavano il carico di utenti". Ho ormai (ahimé) troppa esperienza per illudermi che queste scuse siano vere: se lo sono, non sono tutta la verità, ma solo una parte (a volte nemmeno la più importante).

Soluzioni
Difficile darne. Per i singoli, l'opzione è emigrare dove l'organizzazione del lavoro e le condizioni di mercato consentono di avere opportunità e prospettive interessanti.
Diverso il discorso per il sistema impresa e per il sistema creditizio. La selezione la farà il mercato, peccato che se il mercato non è più soltanto autoctono ma si allarga all'Unione Europea, che a sua volta si estende a nuovi Paesi, il tutto in un contesto dove le barriere doganali e linguistiche vacillano sempre di più... la selezione potrebbe essere molto dura.
Io sono sempre portato a vedere il lato positivo delle cose: nel cambiamento ci sono sempre molte opportunità da sfruttare, e in questo senso esistono (anche in Italia) imprenditori più illuminati di altri (talvolta lo sono le nuove generazioni, ma per fortuna ne esistono anche di meno nuove). Ma non si può pretendere di avere un paese di imprenditori, così come non si può pretendere di essere tutti imprenditori.
Certamente, è utile essere un po' imprenditori di sé stessi, ricordando che nella vita non c'è niente di costante tranne il cambiamento.

SQL Server 2005 SP1: problemi con servizio SSIS

Ho appena scritto un post in inglese su un problema che è molto probabile si abbia dopo l'installazione di SQL Server 2005 SP1 rispetto all'avviamento del servizio di SSIS (Integration Services.

Per fortuna sono possibili dei workaround, è tutto spiegato nel post.

Prestazioni NTILE

Recentemente ho dovuto implementare una tecnica di implementazione del calcolo dei quintili di una popolazione in SQL. SQL Server 2005 ha una funzione molto comoda (NTILE) che però si è rilevata molto meno performante di un algoritmo basato su RANK o ROW_NUMBER.

Tutti i dettagli in due post in inglese: uno mio e uno di Davide Mauri.

Approfitto dell'occasione per chiedere agli affezionati lettori se per problemi spiccioli di questo tipo non è un problema leggere il post in inglese o se invece preferirebbero una traduzione più ampia. I commenti sono benvenuti.

Lanciare diversi Explorer

Oggi ho terminato la mia parte per il Security Roadshow, tappa a Padova. Un gentile partecipante mi ha segnalato che è possibile eseguire explorer in un processo separato (quindi facendo anche un runas) utilizzando il parametro /separate (es. explorer.exe /separate), evitando così il "trucco" di ricorrere a Internet Explorer (iexploer.exe). Senza il parametro /separate il comportamento di default di explorer è di chiudere il processo se c'è un'altra istanza della stessa applicazione già in esecuzione nella stessa sessione.

Non si finisce mai di imparare.

SSIS: white paper su ottimizzazione prestazioni

Grazie a questo post di Jamie Thomson ho scoperto un white paper di Microsoft sull'ottimizzazione delle prestazioni di SSIS che mi era sfuggito. Lo metto nel blog per ricordarmene in futuro...

Il disco giusto per un notebook

Senza alcun dubbio in disco giusto per un notebook è qualcosa di simile a un ADTRON Flashbak da 2.5" SATA: transfer rate di un disco SATA, tempi d'accesso ridicoli, consumi bassi e rumorosità nulla.

Peccato che per ora un taglio decente costi più di un intero notebook, ma pare che sia ormai questione di uno o due anni l’arrivo di device più economici...

Dual boot con Windows Vista

Chi ha già provato qualche beta di vista probabilmente conosce già i trucchi del mestiere... ma io a distanza di un mese mi ero già dimenticato come abilitare il dual boot su un'installazione di Windows Vista, quindi credo sia utile appuntarmi qualche informazione sul blog a futura memoria.

Il boot.ini non è più usato, il nuovo boot manager va configurato con una "splendida" utility a linea di comando chiamata BCDEDIT.EXE, che si trova in \windows\system32 e si può usare anche facendo boot con una più vecchia installazione di Windows. Vediamo i comandi che è utile conoscere.

BCDEDIT /ENUM ALL visualizza tutte le configurazioni abilitate

BCDEDIT /DISPLAYORDER /ADDLAST aggiunge una voce al menu di boot (se ce n'è una sola il menu di boot non compare)

BCDEDIT /DEFAULT imposta la configurazione di default

Tra le configurazioni, di solito {ntldr} è quella che corrisponde al loader dei sistemi Windows legacy (fino a Windows 2003, insomma)

Se si installa Windows Vista in C:, magari tenendo altri sistemi operativi su altri volumi, bisogna fare attenzione a un dettaglio importante: i file NTLDR e NTDETECT.COM devono essere nella root di C: (sono file hidden e system, usare ATTRIB -S -H per vederli). Se non ci sono, copiarli da un'installazione di Windows 2003 (o Windows XP se non avete sistemi Windows 2003... ma attenzione che con NTLDR di Windows XP poi un Windows 2003 non parte). Il loader legacy legge poi il BOOT.INI come siamo abituati, ma ovviamente si possono mettere solo partizioni antecedenti a Vista.

Microsoft acquisisce ProClarity

La notizia è freschissima: Microsoft acquisisce ProClarity. Il client avanzato è decisamente la parte che mancava a Microsoft per completare l'offerta BI a 360 gradi. Con questa acquisizione, il prossimo Office e i prodotti ancora non annunciati (di cui ovviamente nessuno sa niente ma che da qualche parte qualcuno sta sviluppando) Microsoft comincia a diventare un player molto pesante nel mercato, non solo più nel settore server.

Personalmente spero che l'acquisizione da parte di Microsoft consenta (grazie ai volumi e al canale di vendita) di adottare politiche di licensing molto più consone per ProClarity rispetto a quelle esistenti (dove è teoricamente impossibile comprare una licenza singola per ProClarity Desktop, cosa che in Italia sarebbe importante per favorirne la diffusione in ambienti misti in cui si affianchi a Excel).

Al momento non ci sono dettagli operativi, spero di sapere al più presto quali saranno le nuove politiche commerciali.

Prestazioni marshaling in .NET 2.0

Facendo alcuni semplici test ho verificato che .NET 2.0 ha prestazioni nettamente migliori rispetto a .NET 1.1 per quanto riguarda il marshaling dei parametri. L'incremento va dal 10 al 42% (a seconda dei tipi di parametri) e stranamente ho visto i miglioramenti maggiori sui tipi più semplici (tipi isomorfi) rispetto a quelli più complessi (tipi non isomorfi).

Poiché non ho testato a fondo molti aspetti preferisco non riportare numeri e test, ma la cosa significativa che volevo segnalare è che non ci sono differenze apprezzabili tra un programma compilato per .NET 1.1 ed eseguito con il runtime di .NET 2.0 e lo stesso codice ricompilato direttamente con .NET 2.0.

Morale: non è necessario ricompilare con .NET 2.0 per ottenere dei vantaggi prestazionali. Certo, non è una novità e l'ho sempre sentito dire, ma dovendo verificare alcune cose piuttosto correlate, ne ho approfittato per avere un riscontro diretto.