Come promesso, in un mio precedente post, sono finalmente a spiegare i motivi per cui personalmente ho eletto C# a mio linguaggio di riferimento. Badate, questo non significa che io mi rifiuti di sviluppare in altri linguaggi, ma semplicemente che potendo scegliere, a ragion veduta abbraccio C#.

Il primo motivo è di carattere puramente affettivo. Le mie prime esperienze di programmazione seria le ho fatte in Ansi "C", e poi in C++ e C# ha il pregio di ricordarmelo. Certo, non è la stessa cosa in fatto di sintesi ma talvolta mi piace scrivere la chiamata ad un metodo, e il test del risultato sulla stessa riga come era abitudine indimenticata del buon vecchio C.

Il secondo motivo è di carattere più politico. Non sopporto l'arroganza, e tantomeno i moralisti. Perciò Java non fa per me. Già tempo fa ho avuto l'occasione di scrivere sul mio rapporto con certi programmatori Java, e trovo che sia ampiamente corretto quello che ha detto Lorenzo in risposta ad un mio post: E' troppo facile per il coniglio considerarsi vincitore quando gareggia con la tartaruga, ma pensare di poter considerare questa facile vittoria motivo di orgoglio e nobiltà è davvero troppo. Ho la pretesa di voler scrivere buon codice e ritengo di poterlo fare almeno tanto bene in C# quanto in Java. Se non di più. Inoltre considero C# anticonformista. E questo per me è addirittura una bandiera da portare. Anticonformista, nel senso che non si conforma alle morali dettate dai benpensanti. In che senso? Per quale motivo devo essere obbligato a fare try e catch di tutto quello che si muove? Questo è un conformismo. Voglio sentirmi libero di decidere io come, dove e quando trappare. Punto.

Terzo. In questi giorni ho scritto un articolo, che se tutto va bene uscirà a novembre, che mi ha dato l'occasione di approfondire alcuni dettagli implementativi dei compilatori C#2.0 e Java 1.5 (o 5.0 che dir si voglia). Il risultato di questo paragone mi ha fatto comprendere meglio perchè C# è meglio di Java, e non mi riferisco a feature del framework, ma solo esclusivamente al compilatore. Avrete già letto, quello che accadrà ai generics in ambito Java, e se ho ben chiaro cosa ha mosso i progettisti di C#, non ho altrettanto chiaro le finalità di quelli Java.

Quarto ed ultimo. Il mito della portabilità. Mi è sempre andato stretto, il dovermi confrontare con questa caratteristica che confesso mi lascia spesso interdetto. Ma più e più volte mi sono chiesto: ma vale veramente la pena costringere il mio cliente a spendere il 10-20% in più sull'hardware per poter far girare una applicazione talmente generica da poter funzionare ugualmente su Windows che su Linux o Mac? La risposta a questa domanda non la so. Ma certamente se metto assieme il risparmio in termini di risorse macchina, e la maggiore produttività del linguaggio, la bilancia per me pende di certo su C#.

Questi sono i miei perchè.

Buonanotte.


Commenti (7) -

# | Maurizio Tammacco | 13.09.2004 - 21.01

Sono completamente d'accordo con te. E non solo per i motivi politici. Considera che io provengo dal VB .NET, ma ho deciso di abbracciare C# completamente. Si parla tanto di uguaglianza dei linguaggi, ma C# è notevolmente più puro dal punto di vista object-oriented, e quindi anche più sicuro.

# | Daniele Proietti | 14.09.2004 - 03.34

Sono abbasanza d'accordo con le argomentazioni, volevo solo capire che cosa intende Maurizio con "...più puro dal punto di vista object-orientcted"; se stiamo parlando della sintassi sono d'accordo (anche se siamo nell'ambito del gusto personale), ma il funzionamento ed il codice IL prodotto dai due linguaggi è identico, per cui non è vero che il codice C# è più sicuro di quello VB.NET.

Certo che in fase di compilazione il compilatore C# fa un controllo più approfondito ed evita quindi alcuni errori comuni, ma se opportunamente impostati i parametri "option explicit" ed "option strict" non vedo una minore sicurezza nei programmi VB.NET.

# | verbat | 14.09.2004 - 06.28

questo spazio è tropppo piccolo per commentare, ma lo faccio qui:

http://verbat.blogspot.com/2004/09/c-why-not.html.



(E per rispondere al commento qui sopra: ovviamente C# come tutto il framework .net non è affatto puro dal punto di vista OO, lo è solo se gareggia con una tartaruga procedurale)

# | Andrea Boschin | 14.09.2004 - 11.21

Per chi è curioso, ho risposto a Verbat nei commenti del suo blog.

# | Mirage | 02.12.2004 - 03.29

Mi dispiace, ma non sono per niente d'accordo con quello che hai detto. Tanto per cominciare, C# è troppo simile a Java . Java è è un linguaggio affermato perchè in grado di creare applicazioni efficienti e potenti. C# cos'ha in più di Java? Da quanto mi sembra, il pacchetto di classi di Java è molto più ampio di quello di C#, e quindi non penso che quest'ultimo possa competere con il Java. Grazie per l'ascolto.

# | Alessandro | 04.12.2007 - 21.43

Scusate , sono un programmatore di microcontrollori quindi non ho ben chiaro l'ambiente di alto livello. Ma..... Non bastava C++? Cosa posso fare con Java o con C# che non posso fare con C++? Non potevano farli per C++ questi framework? A me sembra solo una lotta commerciale Microsoft vs Tutti che obbliga noi poveri disgraziati a perdere tempo con mille dialetti informatici.

# | Andrea Boschin | 04.12.2007 - 21.51

no, evidentemente C++ non è sufficiente. A prescindere dal fatto che per .NET esiste la possibilità di scrivere in managed-C++, la scelta di passare ad un ambiente managed è dettata dalla necessità di scaricare il proprio lavoro di incombenze che può gestire meglio un automatismo piuttosto che il programmatore. La gestione della memoria è una di quelle cose che il c++ porta ad errori e problemi. In ambiente managed questo problema non sussiste perchè è il Garbage Collector e gestirla. E comunque va riconosciuto che il primo linguaggio "managed" è stato Java.

Aggiungi Commento