Java, PHP, Node js... E se la vera sorpresa fosse .NET ?

Perché il linguaggio di Microsoft merita quanto i grandi dello sviluppo web…

immagine illustrativa dell'articolo “Java, PHP, Node js... E se la vera sorpresa fosse .NET ?”

Ho letto recentemente un articolo intitolato ❝ Perché Node.js è migliore di PHP e .NET ?

E quindi, mi sono sentito motivato a fare il punto su ciò che .NET / C# offrono davvero oggi ! Perché sì, ci sono dibattiti che dividono da sempre: Carbonara con o senza panna ?, Pizza alta o bassa ?, Java, PHP, Node.js o .NET. Per quanto possa sembrare strano, nel piccolo mondo degli sviluppatori, la battaglia infuria da decenni.

Certo, ognuno di questi linguaggi ha le sue qualità, i suoi casi d’uso, la sua filosofia.

PHP, motore dell’esplosione del web dinamico, è riuscito ad evolversi nel tempo. Ma il suo passato, ricco di libertà stilistiche e approcci piuttosto vari, pesa ancora sulla chiarezza e coerenza di certi progetti moderni. Java, solido e molto presente nell’industria, resta un pilastro del backend e di Android. Si evolve con cautela, al ritmo di aggiornamenti misurati, per non compromettere la stabilità di un enorme ecosistema già in produzione. JavaScript mostra un’agilità impressionante, onnipresente dal frontend al backend con Node.js, ma al prezzo di un ecosistema in continua mutazione, dove ogni trimestre porta la sua nuova tendenza.

E poi c’è .NET e C#, spesso relegati nel campo delle tecnologie Microsoft, troppo in fretta scartati per pregiudizi, per mancanza di visibilità, o come se fosse una brutta parola… brrrr!

🟣 Spoiler: non è affatto così !

Se hai già scritto del codice Java, probabilmente hai già urlato davanti a una NullPointerException uscita dal nulla, quell’errore temuto che si presenta quando si cerca di usare una variabile… che in realtà non contiene nulla. E che, invece di avvisare gentilmente, fa tutto saltare senza preavviso.

In C#, dalla versione 8, i tipi nullable con annotazioni (string?, int?) permettono di intercettare in fase di compilazione ciò che Java solitamente lascia passare fino al runtime… questione di prevenire prima di punire. Va bene, lo ammetto: le versioni più recenti di Java hanno introdotto miglioramenti nella gestione del null. Ma non è né nativo, né così integrato come in C#. E onestamente, non sono sicuro che risolva tutti i casi.

Anche le espressioni lambda sono leggibili:

var books = myDb.Books.Where(b => b.Author == "agatha-christie").ToList();

Perché .NET non è solo un linguaggio. È un ecosistema completo, una cassetta degli attrezzi unificata e coerente, con una base comune per coprire il web (ASP .NET Core), il desktop e il mobile (.NET MAUI), o anche il cloud con Azure.

Ecosistema .NET multipiattaforma per web, mobile, cloud, desktop e IA.

Con .NET 6, 7 e 8 si scrive una sola applicazione e la si esegue su Linux, Windows, macOS, Power, Android o iOS, senza cambiare stack e senza moltiplicare gli strumenti. Il tutto con lo stesso SDK e un solo comando:

dotnet build

Oltretutto, se vuoi distribuire la tua app, basta una sola riga per containerizzarla con Docker:

docker build -t myapp .

Visual Studio può generare automaticamente un Dockerfile, costruire l’immagine e pubblicarla, senza scrivere nemmeno uno script. Da riga di comando, l’immagine viene costruita in pochi secondi, è multipiattaforma e pronta per essere inviata dove vuoi. Il contrario, nella maggior parte degli stack citati sopra, bisogna assemblare tutto a mano: scrivere il Dockerfile, gestire le dipendenze, configurare l’ambiente, orchestrare il tutto con strumenti esterni… insomma, è macchinoso, fragile e raramente unificato.

.NET Core ha davvero raggiunto una piena maturità tecnica, e non è un caso. Veloce, leggero, scalabile, combina prestazioni solide e un’architettura multithread, affermandosi come una soluzione ideale per i backend moderni. Con circa 610.000 richieste al secondo rilevate negli ultimi benchmark TechEmpower, si posiziona davanti alla maggior parte degli stack PHP e Node.js, anche in scenari concreti con database. È quindi riconosciuto come uno dei framework più efficienti per progetti enterprise e backend web.

❝ .NET è perfetto per le applicazioni di livello enterprise… Node.js eccelle nel tempo reale, ma .NET vince in prestazioni CPU e sicurezza. ❞
TechMagic

E per sfruttarlo davvero al massimo, servono strumenti all’altezza per scrivere codice, fare debug, testare e distribuire in buone condizioni. Qui, è difficile fare meglio di Visual Studio (o JetBrains Rider, se sei il tipo esigente). Forse è l’IDE più comodo e completo sul mercato.

Debug passo-passo anche nel codice asincrono, completamento automatico “IntelliSense” potenziato, gestione dell’hot reload per modificare il codice in esecuzione e vedere i cambiamenti senza riavviare l’applicazione, profiling integrato per monitorare e analizzare il consumo di CPU, memoria o tempo di esecuzione… tutto è pensato per accelerare il ciclo di sviluppo e rendere più affidabile la delivery.

E se sei un fan della riga di comando, del versionamento pulito e dell’automazione, .NET CLI, i workflow GitHub Actions e gli strumenti DevOps ti permettono di orchestrare tutto: compilazione, test, deploy e persino pubblicazione nel cloud.

IDE Visual Studio per progetto C# con strumenti di sviluppo e debug.

Microsoft (e la community .NET Foundation) spinge C# ad evolversi rapidamente, ma nel modo giusto. Ricordiamolo: C# (pronunciato C sharp) è il linguaggio di riferimento per .NET (dotnet). Ogni due anni, una nuova versione: stabile e coerente, senza rompere le precedenti. Aggiunte moderne, come il pattern matching, che oggi permette di scrivere condizioni molto più leggibili rispetto a una serie di "if" o "switch". Non serve più verificare il tipo e poi fare il cast: C# lo fa per noi:

if(obj is Person p && p.Age > 18)
	Console.WriteLine($”{p.Name} è maggiorenne”);

Oppure i record type, un modo semplice per dichiarare oggetti immutabili, perfetti per rappresentare dati di business o DTO (Data Transfer Object), con uguaglianza per valore, destrutturazione e anche supporto per with (copia con modifica).

public record Book(string Title, string Author);

Poi puoi fare:

var book1 = new Book(“1984”, “Orwell”);
var book2 = book1 with {Title = “Animal Farm”};

E dato che i record si confrontano per valore:

book1 == book2 // false, perché i titoli sono diversi

Un’altra novità che semplifica la vita: i top-level statements. Non serve più un Main() per avviare un programma:

Console.WriteLine("Hello Aumerial!");

E questi sono solo alcuni esempi. C# si affina a ogni versione, rendendo strumenti e script più leggibili e rapidi da scrivere. È pulito, utile e pragmatico.

Allora sì, forse l’hype è altrove...

Ma i progetti seri cercano stabilità, prestazioni e un’architettura semplice che si possa far evolvere senza dover rompere tutto. Ed è esattamente quello che offrono .NET e C#: un backend solido, una UI seria e una piattaforma affidabile che funziona ovunque.

Perché alla fine, cos’è davvero il vero lusso nello sviluppo ? Usare uno strumento affidabile, piacevole da usare ogni giorno, coerente da cima a fondo, e abbastanza completo da coprire ogni esigenza, dal web all’embedded.

Con .NET è tutto centralizzato: un solo linguaggio, un solo runtime, un solo ambiente di sviluppo. Che tu stia sviluppando una REST API, un’app mobile, un servizio cloud, un’interfaccia desktop o persino un videogioco con Unity… userai sempre la stessa sintassi, gli stessi concetti, lo stesso ambiente e molto spesso lo stesso punto di ingresso (program.cs).

Un solo framework, una sola competenza, un solo linguaggio da padroneggiare.
Una vera forza e un reale vantaggio quando si vuole industrializzare, formare un team o semplicemente mantenere il controllo.

Allora, la prossima volta che un collega ti dice:
Java, PHP e Node.js sono meglio !

Fagli una sola domanda:
Hai mai davvero provato C# ? 😉


Quentin Destrade