Ho trovato molto interessanti i due post dove ha avuto luogo il “confronto” tra native code e managed code. Ognuno dei due blogger ha voluto giustamente dire la sua, descrivendo accuratamente i punti di forza dell’uno o dell’altro ambiente. Credo però che come al solito la verità non sta né da una parte né dall’altra. I vantaggi del native code sono indiscussi, mentre secondo me quelli dovuti al managed sono piuttosto oscuri e, volendo dirla tutta, riguardano soprattutto lo sviluppatore.
Cosa importa al cliente finale se sviluppiamo in C++ piuttosto che in VB.NET ? Nulla. Anzi, tutte le volte che preparo un’analisi e un’offerta per il mio software indico sempre in che cosa scriverò il programma, evidenziando per esempio qualcosa tipo: VB.NET, linguaggio di programmazione Microsoft evoluto e adatto agli standard moderni, possibilità di usare SQL Server, pubblicare sul Web, utilizzare palmari, bla bla bla.
Ma il cliente mi guarda stranito, e allora spiego io a voce, davanti a lui, cosa significa. Mettevi un attimo nei suoi panni: lui vuole spendere poco (!!), vuole un prodotto funzionante subito, il prima possibile. E qui entra in gioco la grande differenza. Se scrivere un software in C# mi porta via 4 settimane, in C++ quanto porterebbe?
Produttività.
Ecco la parola magica, ecco (credo) dove tutta l’architettura .NET abbia fallito. Oddio, fallimento è una parola grossa: d’altronde, per far evolvere VB le cose devi pur cambiarle, per far convergere tutto nel grande framework le cose devi pur cambiarle, e i cambiamenti non sono mai indolori e mai lo saranno. Come (mi sembra) abbia detto Andrea Saltarello nel suo blog, l’adesione a .NET è stata inferiore alle aspettative proprio per la scarsa produttività (almeno iniziale) dei programmatori (come me) con .NET. Scarsa dovuta alla “difficile” (per alcuni, fra cui me) conversione da vecchi progetti C/VB6 in managed code.
Tutte le altre considerazioni tecniche che sono state fatte secondo me passano in secondo piano: come giustamente è stato detto, un’applicazione “Hello world” in native code ha x linee di codice, mentre in C++ la linee diventano y*x, però in C++ il periodo di sviluppo diminuisce drasticamente, perché gran parte delle linee di codice vengono prodotte dal compilatore. Nonostante quindi l’apparente perdita di prestazioni, i vantaggi sono innumerevoli e indiscussi, basti guardare la (giusta e motivata) diffusione di C/C++ ai suoi tempi e VB al giorno d’oggi – mi riferisco esplicitamente alle classiche applicazioni di office-automation in cui sono un po’ più ferrato. Con il managed code la faccenda è più complessa, e riassumendo i punti dolenti si riassumono in:
1. difficoltà iniziale a traslare vecchi progetti. Nel mio caso, questa situazione ha portato a gestire i progetti in diversi modi: mantenere i vecchi progetti nel linguaggio, produrre nuovi software in VB.NET/C#
2. perdita di prestazioni considerevoli. E, attenzione, non mi riferisco banalmente a vedere le dimensioni in Kb di notepad.exe, o al numero di risorse occupate. Ovvio che passando dal FW il sistema ha un carico di lavoro maggiore. Però effettivamente lavorando con applicazione managed sembra davvero tutto più lento (tempi di reazione dei forms dalla semplice visualizzazione a qualcosa di più complesso, per esempio)
3. managed secondo me (attualmente) significa espressamente applicazioni windows forms o asp.net. Si possono creare web services, servizi, però (almeno è il mio punto di vista) se devo sviluppare componenti lato server ottimizzati e ad un certo livello (evitando memory leak, etc.) credo sia meglio usare altri linguaggi a basso livello
Oggi, proprio in questo periodo, sto raggiungendo una buona velocità di esecuzione con .NET e quindi il fattore “scarsa produttività” comincia a calare Ma questo potrebbe non valere per chissà quanti altri sviluppatori. Le prestazioni invece, non so, può essere che mi sbagli io a vederla in questo modo, e comunque dipende dalla qualità del codice o dalle caratteristiche hardware del PC su cui si lavora.
In conclusione, nonostante i punti dolenti, credo che il managed code abbia dei forti vantaggi sul native: ma questo vale dal mio punto di vista. Una volta acquisita dimestichezza e un certo modo di pensare le applicazioni, con .NET si sviluppa davvero alla svelta, la qualità della UI è notevole, la pulizia del codice che si raggiunge mi piace davvero molto. Quindi per me non c’è paragone: sviluppando prevalentemente applicazioni Windows Forms per uffici (agenzie di spettacolo, veterinari, applicazioni gestionali, etc.) sarebbe un incubo programmare tutto in C++, per cui non cambierei il managed code con nessun’altra cosa al mondo.
Managed Code Vs Native Code (5 - 3)
Il managed vince il derby, ma la difesa non si è dimostrata solida e si è fatta trovare impreparata in situazioni in cui avrebbe dovuto dare di più.
:-)))