C# Cosa ne pensate del linguaggio di programmazione C#?

JunkCoder

Moderatore
5 Giugno 2020
751
599
345
Personalmente lo ritengo un ottimo linguaggio e lo preferisco a Java, anche se la sintassi e' abbastanza simile e oramai con .NET Core e .NET e' cross-platform, resta molto piu' performante. Quando devo realizzare un programma che non richiede lavoro a basso livello e' la mia prima scelta: e' moderno, permette uno sviluppo rapido, se non ti importa dell'ottimizzazione estrema puoi lasciar fare al garbage collector, le librerie sono piu' mirate dei "framework" giganteschi che vediamo in altri linguaggi e tanti altri motivi.
 

kernelspace

Utente Bronze
17 Giugno 2021
88
57
45
macche cross platform. e poi e' roba interpretata, che io non definisco esattamente linguaggio ma piuttosto scripting. Con tutto il rispetto per chi lo ama, per me porcherie net / m$ che ti fanno restare nel mondo m$ per sempre.
 
Banner pubblicitario per Bright Data su Inforge.net azienda di vendita Proxy, Data Collector e Content Unlocker
Supporta Inforge con una donazione

JunkCoder

Moderatore
5 Giugno 2020
751
599
345
macche cross platform. e poi e' roba interpretata, che io non definisco esattamente linguaggio ma piuttosto scripting. Con tutto il rispetto per chi lo ama, per me porcherie net / m$ che ti fanno restare nel mondo m$ per sempre.

Sei un po' prevenuto con la Microsoft, e ti capisco, ma con .NET si sono comportati bene, il runtime e' opensource e cross-platform si, finche' non parli di IoT tutti i sistemi sono supportati da C#. E' semi-compilato in codice IL e tramite il CLR ottiene ottime performance, sicuramente non e' scripting, in quei linguaggi l'interprete legge il codice cosi' com'e'.
Forse ti riferisci al vecchio .NET Framework che era solo per Windows, ma ormai .NET (il successore di .NET Core) sta prendendo il sopravvento e si continuera' con quello opensource.
 
  • Mi piace
Reactions: 0xbro

Eoloprox

Utente Electrum
20 Marzo 2016
404
26
112
Se posso dire la mia, mi sono affacciato al c++ all'inizio, ma è davvero molto più difficile del c#, ad intuito lo ho compreso molto più al volo del c++.

La meta è fare dei gestionali in windows, e perchè no come tutti iniziare dalla manovalanza in ambito professionale, a riguardo delle ricerche di mercato il c# come è messo?
 

JunkCoder

Moderatore
5 Giugno 2020
751
599
345
Se posso dire la mia, mi sono affacciato al c++ all'inizio, ma è davvero molto più difficile del c#, ad intuito lo ho compreso molto più al volo del c++.

La meta è fare dei gestionali in windows, e perchè no come tutti iniziare dalla manovalanza in ambito professionale, a riguardo delle ricerche di mercato il c# come è messo?

Assolutamente si, C++ da' piu' liberta' e quindi lascia anche piu' responsabilita' al programmatore, oltre al fatto che punta ad essere piu' minimale e leggero per qualunque tipo di hardware anche con poche risorse a disposizione.

Se la meta e' fare gestionali per desktop i piu' comuni sono proprio .NET oppure in Java, tralasciando quelli browser-based. Non so fornirti le percentuali di mercato ma la stragrande maggioranza sono realizzati in uno di questi tre modi.
 
  • Mi piace
Reactions: Eoloprox
Supporta Inforge con una donazione
Banner pubblicitario per Bright Data su Inforge.net azienda di vendita Proxy, Data Collector e Content Unlocker

gabrielesilinic

Utente Bronze
24 Febbraio 2019
51
8
36
come ogni altro linguaggio ha cose in cui è ottimo e altre in cui non lo è

preferisco C# a java comunque in quanto java ha delle funzioni mancanti che praticamente ogni linguaggio moderno e talvolta passato ha, come ad esempio gli argomenti di funzione con valore di default, java devi scrivere ogni singola e inutile cagata

per questo se dovrò usare java proporrò kotlin, molto più flessibile nonostante alcune stranezze in sintassi

C# è ottimo probabilmente per gestire un API di un software, magari uno in C++ secondo me in quanto non ha tutto l'overhead di pyhton o un linguaggio totalmente interpretato, è con tipi statici e altre funzioni che lo rendono performante, facile da usare, e aiutano ad evitare bug (vedi javascript e typescript)

il C# perfetto sarebbe un C# dove anziche usare un sistema di garbage collection si usi un sistema di reference counting con più una leggera garbage collection che controlla che nullla si sia "incastrato" ad esempiò in caso di riferimenti circolari tra oggetti

C# è il re del cross platform e dei videogiochi, a volte il re delle app per i buisness

per quanto riguarda il web invece C# è carino e cuccioloso, ha il potentissimo database access dietro pronto per combattere ma non sembra ci sia una maniera per avere un hosting a basso costo come con Python, node.js o PHP

ogni linguaggio ha qualcosa in cui è forte, trova il progetto, trova il linguaggio, e se sei un bravo programmatore potrai fare un progetto pure in COBOL (io l'ho quasi fatto, sfortunatamente era solo una demo)

comunque la mia scuola insegna C# come linguaggio principale, e non lo fa per caso, sigifica che molto probabilmente c'è mercato, ma in ogni caso cambiare linguaggio non è difficile, in una settimana solitamente ci riesci
 

kernelspace

Utente Bronze
17 Giugno 2021
88
57
45
Ultima modifica:
ogni linguaggio ha qualcosa in cui è forte, trova il progetto, trova il linguaggio
Si, e io direi, trova la tua passione/amore quindi trova il progetto e dunque il linguaggio. Cosa intendo, se uno al bar delal scuola ti parla di python, C, assembly, C#, non e' che scelgo di imparare un linguaggio perche' il nome "python" mi intriga, o fa moda, ecco (ricordo di un datore di lavoro figlio di papa che mi diceva di sviluppare un programma in python senza sapere cosa fosse, gli piaceva il nome, ma totalmente inadatto a quello che voleva fare a suo tempo). Scelgo il settore che mi piace e da li il linguaggio. Oltre al fatto che comunque un buon programmatore in genere conosce almeno 3 linguaggi diversi. Ricorderei anchge di avere sempre in testa la distinzione di un vero linguaggio di programmazione (della cpu) e un linguaggio interpretato da un binario interprete.

Se ti piace il basso livello, connesso all'elettronica e all'embedded, ad esempio, campi d'interesse saranno piuttosto C, C++, ambiente linux, bash scripts etc.
Se ti piace il mondo m$, database, app per PC e quant'altro, C# pare sia certo molto utilizzato in quanto molto produttivo. Anche in Linux ormai dovrebbe essere ben supportato anche se non mi viene in mente un app famosa ora.

Alcuni linguaggi interpretati come python poi aiutano un po tutti i settori.
 

Eoloprox

Utente Electrum
20 Marzo 2016
404
26
112
Grazie delle vostre riflessioni, mi sono molto utili perchè dopo una attenta analisi, direi che la percentuale di convinzione di fare mio il C# è salita notevolmente, tralasciano (per adesso) i vari C e C++... Iniziai in passato a studiare il C++ ma dopo un okkiata il C# lo intesi subito, finalmente posso dirmi convinto della scelta! GRAZIE INFINITE A TUTTI VOI!
 
Banner pubblicitario per Bright Data su Inforge.net azienda di vendita Proxy, Data Collector e Content Unlocker
DOWNLOAD

St3ve

Utente Platinum
12 Ottobre 2011
2,110
1,405
665
Qualcuno l'ha provato su linux? Ho sentito dire che funziona anche meglio che su windows, ma da quando l'hanno rilasciato open source non l'ho mai provato. Mi pare di aver capito che a novembre, quando rilasceranno la versione 6, dovrebbero unire gli Xamarin tools al .NET framework e dovrebbero aggiungere un'interfaccia grafica multipiattaforma (MAUI). È già disponibile la preview, qualcuno l'ha provata?

C# è il re del cross platform e dei videogiochi, a volte il re delle app per i buisness
Mica tanto. Fino a qualche anno fa girava solo su windows e, sebbene recentemente sta prendendo piede anche su linux (almeno per il deploy), è ancora abbastanza single platform. Write once, run everywhere era il motto di java... che te lo ritrovi anche sul frigorifero, non solo sui 3 sistemi operativi principali. La verità è che se non usi windows sei veramente poco incentivato ad utilizzare C# e solo recentemente si sta cambiando un po' tendenza, proprio perché pare che il deploy su linux funzioni veramente bene. Nei videogames penso che si usi quasi solo grazie a Unity.

In generale io preferisco Java a C#, senza tirare in ballo altri linguaggi (Java e C# sono praticamente identici). Principalmente perché conosco Java e non conosco C#, ma in generale credo che Java tende ad essere fin troppo criticato. Quando lo guardi bene e non ti lasci sviare dai problemi superficiali ("è troppo verboso") alla fine capisci che è un linguaggio molto solido. Uno che è qui per restare, non come molti linguaggi di programmazione moderni che oggi interessano a molti e domani non guarda più nessuno (e.g., dart).

Oltre al fatto che comunque un buon programmatore in genere conosce almeno 3 linguaggi diversi.
Da una parte sono d'accordo perché, paradossalmente, imparare un linguaggio di programmazione ti chiude la mente verso quel linguaggio: i linguaggi di programmazione sono bravi ad insegnarti a non pensare a ciò che non si può fare. A un certo punto, le soluzioni fuori dagli schemi non sono più contemplate. Se impari tanti linguaggi di programmazione impari anche ad aprire gli occhi, a maggior ragione se i linguaggi che scegli di imparare sono significativamente diversi tra loro perché, parliamoci chiaro, tra Java e C# a momenti non cambia nemmeno la sintassi. D'altro canto dobbiamo scontrarci con la realtà dei fatti: i guru usano e conoscono quasi solo il loro linguaggio preferito. Se aspiri a diventare il prossimo Linus Torvalds, per esempio, ti basta conoscere solo C, bash e assembly (e lo stesso vale per molti altri programmatori famosi). Jack of all trades, master of none.

e poi e' roba interpretata, che io non definisco esattamente linguaggio ma piuttosto scripting

Ricorderei anchge di avere sempre in testa la distinzione di un vero linguaggio di programmazione (della cpu) e un linguaggio interpretato da un binario interprete.
Mi piacerebbe avere il tuo punto di vista a riguardo. Qual è questa differenza e perché è significativa?
 
  • Mi piace
Reactions: 0xbro e kernelspace

kernelspace

Utente Bronze
17 Giugno 2021
88
57
45
Se aspiri a diventare il prossimo Linus Torvalds, per esempio, ti basta conoscere solo C, bash e assembly (e lo stesso vale per molti altri programmatori famosi). Jack of all trades, master of none.
Bella questa di Jack, non la conoscevo. Si sono daccordo, no tuttologia. Cmq. nel kernel linux ci programmo da anni, contribuisco al kernel per passione, dicamo che C e' fondamentale. Ma ai non Torvalds nella vita poi tocca fare anche altro. Nel mio caso, mi arrangio bene in c, c++, bash, perl, lua, qualcosa di python, e altro, quel che puo servire in un azienda embedded.

Mi piacerebbe avere il tuo punto di vista a riguardo. Qual è questa differenza e perché è significativa?
Non parlo della possibilita' di utilizzare binari puri /librerie anche nei linguaggi interpretati. Parlo solo che il risultato di una compilazione C sono codici operativi letti dalla cpu, mentre di un programma interpretato sono codici operativi che un altro programma interpreta e traduce in codice per la cpu. Per il resto sappiamo che su moderni PC un programma interpretato puo essere performante come uno in C. Dico solo di tenere presente, casomai, la differenza.
 

St3ve

Utente Platinum
12 Ottobre 2011
2,110
1,405
665
Non parlo della possibilita' di utilizzare binari puri /librerie anche nei linguaggi interpretati. Parlo solo che il risultato di una compilazione C sono codici operativi letti dalla cpu, mentre di un programma interpretato sono codici operativi che un altro programma interpreta e traduce in codice per la cpu. Per il resto sappiamo che su moderni PC un programma interpretato puo essere performante come uno in C. Dico solo di tenere presente, casomai, la differenza.
Sì, questa è la differenza pragmatica che conoscevo già, però tra te che mi dai l'impressione di preferire i linguaggi compilati in nativo e @gabrielesilinic che cita il garbage collector come uno dei difetti di C# cercavo di dirottare la discussione verso scripting vs. puri e high-level vs low-level.

Se hai intenzione di scrivere codice multithread, valutare quando è possibile deallocare la memoria è parecchio difficile e anche implementare un refcounting non è banale. Rust ci ha provato e ha sostanzialmente fallito (pratico quanto una pigna in culo) mentre Go, principalmente grazie al garbage collector, ci ha preso in pieno. E anche senza tirare fuori il multithraeding, non è un caso che la maggior parte dei linguaggi di programmazione che implementano il paradigma funzionale usano garbage collector: sembra un lusso, ma permette di effettuare ottimizzazioni (e.g., strutture dati persistenti) complesse da implementare esplicitamente. Al giorno d'oggi i garbage collectors tendono a funzionare davvero molto bene.

Per quanto riguarda codice nativo o bytecode/interpretato, l'unica differenza rilevante che mi viene in mente riguarda le performance... ma come ha fatto presente DispatchCode, molti linguaggi semi-compilati hanno un compilatore JIT o AOT e in molti linguaggi la differenza rispetto al C è meno tangibile di quanto ci piaccia credere. I tempi in cui il C era il linguaggio più veloce sta finendo, soprattutto considerando che il più delle volte quando usi un linguaggio "a basso livello" devi legarti le mani e, per questioni di praticità, rinunciare al parallelismo.

Anch'io sono rimasto un po' con la vecchia mentalità che nativo è meglio (no al bytecode e no agli interpreti) e la memoria me la gestisco da solo, ma è da un po' di tempo sono propenso a cambiare opinione.
 
  • Mi piace
Reactions: JunkCoder
Supporta Inforge con una donazione
DOWNLOAD

JunkCoder

Moderatore
5 Giugno 2020
751
599
345
Quoto St3ve, anch'io amo nativo e gestire le cose come piace a me, però devo riconoscere che con certi linguaggi il vantaggio di rapidità e comodità nello sviluppo non è trascurabile. Faccio un esempio che mi è capitato a lavoro l'anno scorso: mi hanno incaricato di iniziare un nuovo progetto e l'ho fatto in C++ impiegando 5 mesi, dopo ho cambiato azienda ed è saltato fuori che anche loro avevano bisogno di un software quasi identico ma lo volevano in C# e ci ho impiegato 2.5 mesi (ho più o meno la stessa conoscenza ed esperienza tra C++ e C# ed ho tralasciato il tempo del periodo di ricerca e progettazione). I risultati oltre al tempo di sviluppo che è importantissimo sono stati:
  • Il software in C++ più leggero su CPU e RAM.
  • Di velocità molto simile, non ho fatto microbenchmark.
  • Il software in C# più stabile, durante i test ho dovuto affrontare pochi bug e non mi ha dato sorprese nemmeno su altre versioni di OS.
  • Dimensione dei binari ridotta in C# (dovuto al fatto che in C++ ho dovuto implementare molte cose già presenti in .NET).
Ovviamente poi ci sono molti casi dove non sono intercambiabili (oltre ad ambienti lowlevel), ad ogni modo dopo questa esperienza valuto più spesso di usare C#, soprattutto grazie anche al supporto dei puntatori e di istruzioni unsafe che a volte sono necessarie.
 
  • Mi piace
Reactions: 0xbro

gabrielesilinic

Utente Bronze
24 Febbraio 2019
51
8
36
Ultima modifica:
Mica tanto. Fino a qualche anno fa girava solo su windows e, sebbene recentemente sta prendendo piede anche su linux (almeno per il deploy), è ancora abbastanza single platform. Write once, run everywhere era il motto di java... che te lo ritrovi anche sul frigorifero, non solo sui 3 sistemi operativi principali. La verità è che se non usi windows sei veramente poco incentivato ad utilizzare C# e solo recentemente si sta cambiando un po' tendenza, proprio perché pare che il deploy su linux funzioni veramente bene. Nei videogames penso che si usi quasi solo grazie a Unity.
dipende di quanti anni fa parli, dal 2017 C# funziona su differenti piattaforme anche per via del .NET Core, e no, non solo unity usa un API C#, è solo il più famoso, c'è monogame, stride3d, godot (anche se per quest'ultimo il supporto C# è ancora in beta) e altri che non ricordo
ammetto che tutto ciò è stato inizialmente possibile solo grazie al progetto mono, poi microsoft ha visto il potenziale di tale progetto e lo ha preso sotto la sua ala, lo finanzia tutt'ora