Vil vi skal bruke .NET 7 til alt: - Men i Norge brukes det mest til backend

- MAUI trenger nok litt mer kjærlighet, tror .NET-utvikler Tobias Moe Thorstensen.

Vi tar en lang prat med utvikler og .NET-entusiast Tobias Moe Thorstensen i Ensō om nye .NET 7. 📸: Ensō
Vi tar en lang prat med utvikler og .NET-entusiast Tobias Moe Thorstensen i Ensō om nye .NET 7. 📸: Ensō Vis mer

- Jeg jobber med .NET hver eneste dag!

Det forteller Tobias Moe Thorstensen, utvikler i konsulentselskapet Ensō og ivrig .NET-bruker. Også på prosjektet han sitter på er det C# og .NET det går i.

- Utviklingsteamet jeg er en del av utvikler og vedlikeholder backend-løsninger som tilbyr API-er, både REST -og SOAP-tjenester, vi gjør data- og domenemodellering og andre ting sluttbrukeren nødvendigvis ikke legger så godt merke til, forteller han.

Men Microsoft vil gjerne at vi bruker .NET til mye mer enn bare backend. Og et skritt på veien er utgivelsen av .NET 7, som kom nylig.

Vi tok en prat med Thorstensen om hva som er nytt, hva det vil si for bruken av plattformen og hvordan du selv kan komme i gang om du er nysgjerrig.

Så da er den her, .NET 7. Alt i alt; hvor fornøyd er du med utgivelsen?

Alt i alt fornøyd, men jeg registrerer en viss misnøye med Microsofts rammeverk for utvikling av multiplattform brukergrensesnitt, MAUI.

En kjapp titt i GitHub repoet til MAUI kan en se at det finnes, i skrivende stund, 1,9 tusen åpne issues, hvorav 1,3 tusen av disse har label-en "bug".

Her trengs det nok litt mer kjærlighet for å kunne kalle det "Production Ready".

Microsoft markedsfører .NET som plattformen du kan bruke til alt. Spørsmålet er om norske utviklere faktisk bruker den til alt. Og svaret er nok nei.
Microsoft markedsfører .NET som plattformen du kan bruke til alt. Spørsmålet er om norske utviklere faktisk bruker den til alt. Og svaret er nok nei. Vis mer

Hva er de viktigste nyhetene i .NET 7 synes du?

Den absolutt største nyheten, i mine øyne, er støtte for Native Ahead of Time (AOT)-kompilering. Native AOT gjør at koden kompileres direkte til native maskinkode for en valgt plattform, for eksempel Linux x86/x64, Windows x86/x64 eller ARM, fremfor via Intermedia Language (IL) og Just-In-Time (JIT)-kompilering når koden eksekveres.

Fordelen med Native AOT er lavere minnebruk, raskere oppstart og størrelsen programmet bruker på disken. Dette vil ha spesielt positiv påvirkning på skybaserte applikasjoner som kjører i orkesteringsløsninger, eller funksjoner som Azure Functions, Google Cloud Functions eller AWS Lambda, hvor betalingsmodellen er 'Pay-As-You-Go' for benyttede ressurser være seg CPU, minne og så videre.

«Det høres kanskje ut som en litt snodig funksjonalitet, men jeg er sikker på at dette kommer til å bli brukt mye.»

I C# 11, som ble lansert sammen med .NET 7, har vi fått støtte for "Raw String Literals". Dette betyr at utviklere nå mye enklere kan håndtere string-variabler med whitespace, linjeskift og andre spesialkarakterer uten å escape disse:

string longMessage = """
    This is a long message.
    It has several lines.
        Some are indented
                more than others.
    Some should start at the first column.
    Some have "quoted text" in them.
    """; 

En annen funksjonalitet jeg setter pris på er et nytt keyword: "Required".

I C# er det vanlig å gjøre objektinitialisering, det vil si å instansere et nytt objekt og sette verdier på properties direkte uten å gå via konstruktøren. Ulempen med en slik tilnærming er selvfølglig at man ikke under opprettelsen av et objekt kan mene noe om hva som er et absolutt minimum av informasjon for å representere meningen med objektet i en gitt kontekst.

For eksempel gir ikke et objekt som representerer et kredittkort spesielt mye mening uten å definere egenskaper ved det, som for eksempel utløpsdato, utsteder, innehaver av kortet og kortnummer og så videre.

Dette er naturlig informasjon å kreve inn som parametere til en konstruktør, men i C# 11 får utviklere nå muligheten til å fjerne den eksplisitte definerte konstruktøren som bare setter verdier, og markere hver property som "Required". Mangler du å sette påkrevde properties får man byggfeil. Det høres kanskje ut som en litt snodig funksjonalitet, men jeg er sikker på at dette kommer til å bli brukt mye.

Devclass tar opp skjær i sjøen for .NET 7, blant annet dette med en manglende standard for å tegne GUI i .NET, og treg utvikling av det som skal være det; MAUI. Hva gjør .NET 7 for å bedre dette?

Microsoft ønsker at MAUI skal være den naturlige etterfølgeren til Xamarin, WPF og UWP, hvor målet er å slippe å skrive UI-komponenter mer enn én gang, og som opptrer som de er skrevet for den spesifikk plattformen applikasjonen kjører på.

Dette har vist seg på være mer utfordrende enn først antatt, og jeg tror det har gått litt prestisje i å lansere MAUI raskeste mulig, fremfor med best mulig kvalitet, dessverre.

.NET 7 gjør i så måte ingenting utover bugfixer og nye features for MAUI, for å bøte på problemet DevClass tar opp.

I hvilken grad blir det mer aktuelt å gjøre .NET-utvikling på andre OS-er enn Windows framover, med .NET 7?

Det har helt siden .NET Core ble lansert i 2016 vært aktuelt å utvikle .NET-løsninger på andre OS-er enn Windows. Personlig benytter jeg meg av en MacBook Pro med Rider som utviklingsverktøy.

Videreutvikling av .NET, tilhørende programmeringsspråk og toolingen rundt har høy prioritet hos Microsoft. Dette er ikke noe som kommer til å endre seg med det første, så en kan være sikker på at det er en plattform som stadig får ny funksjonalitet, bugfikser og ytelsesforbedringer.

Plattformen er også tilgjengelig som åpen kildekode slik at alle kan bidra til å gjøre kommende versjoner enda bedre.

Hva brukes egentlig .NET mest til i Norge i dag?

.NET har en lang historie som strekker seg tilbake til starten av 2000-tallet, nærmere bestemt 2001 da første betaversjon av .NET ble lansert.

Helt frem til .NET Core ble lansert i 2016, var det vanlig å utvikle både frontend og backend i .NET når man først var inne i økosystemet. Frontend-løsningene som ble utviklet var desktop-applikasjoner, enten kjørende på brukeren fysiske maskin eller som del at et virtualisert miljø.

I dag, uten å ha håndfaste bevis eller et statistisk grunnlag som kan underbygge min påstand, vil jeg si at .NET for det meste brukes til backend-utvikling.

Med utgivelsen av .NET 7 fortsetter Microsoft å pushe ideen om én plattform til alle slags applikasjoner.
Med utgivelsen av .NET 7 fortsetter Microsoft å pushe ideen om én plattform til alle slags applikasjoner. Vis mer

Når det er sagt, finnes det produksjonssatte frontend-løsninger som er skrevet i Microsofts WebAssembly-rammeverk Blazor. Når MAUI blir stabilt nok vil jeg tro at vi ser enda flere frontendløsninger hvor .NET blir benyttet, være seg apper til iOS og Android, eller applikasjoner til smart-tver.

Vi kommer heller ikke utenom bruken av .NET når man utvikler løsninger som kjører i Azure. Det er ingen tvil om at Microsoft prioriterer .NET plattformen når de utvikler tooling og SDK-er for Azure-tjenester.

Til slutt skal vi heller ikke glemme at .NET er kryssplattform, som gjør det mulig å kjøre .NET-applikasjoner på Raspberry PI, Beagleboard og lignende. Plattformen kommer med utvidelser for å kommunisere med sensorer og I/O på disse enhetene. Hvor utbredt dette er i Norge er jeg dog usikker på.

Men Microsoft vil jo at .NET skal brukes til alt mulig, inkludert web. Hvor realistisk tror du det er at folk begynner å bruke .NET til alt dette framover?

Det avhenger veldig mye av adopsjonsgraden til WebAssembly og Blazor, og hvorvidt MAUI blir en suksess eller ei.

Jeg tror ikke vi med det første ser en massiv oppsving i popularitet for for eksempel Blazor på bekostning av React, Angular eller Vue. Jeg tror dette til syvende og sist handler om preferanser og kompetanseområde.

Med tanke på hva .NET 7 bringer til bordet, vil jeg anbefale å sjekke ut Microsofts egne artikler om nye funksjonalitet og forbedringer:

For mange kan .NET virke litt uoverkommelig svært, og kanskje litt forvirrende. Hva er ditt beste tips til noen som har lyst til å komme seg i gang?

Jeg ville først og fremst valgt meg et utviklingsverktøy.

De mest populære utviklingsverktøyene, Visual Studio og Rider, kommer enten i gratisversjon eller så har sistnevnte 30 dagers gratis bruk. En kan også bruke VSCode og installere extensions.

Når det kommer til læringsmateriell, ville jeg oppsøkt Microsoft Learn, som med årene har blitt en meget god kilde til å læring.