Innehåll
- Vi börjar med en jämförelse av Azure SDK’erna för .Net Core/C# & Java
- .Net Core är framtiden och det säkraste valet för utveckling i Azure
- Varför C# & .Net Core för utveckling i Azure?
- Varför/Varför inte Spring Boot/Java för utveckling i Azure?
- Azure Functions i Java vs. C#
- Skillnaden i att skapa Web API’er i .Net Core Vs. Spring (Boot)
- Tips för att gå från Java till C# för Java utvecklare
- En jämförelse mellan Spring & Spring Boot
Vi börjar med en jämförelse av Azure SDK’erna för .Net Core/C# & Java
.NET Core SDK’t
- 560 contributors
- 1335 releases
- 148 tillgängliga nuget packet med färdig funktionalitet.
Java SDK’t
- 213 contributors
- 109 releases
- 61 tillgängliga maven paket med färdig funktionalitet varav 29 st i preview, så endast 32 paket tillgängliga att användas i verksamhetskritiska produktionssystem.
Att notera är att service bus paketet verkar befinna sig i preview och då inte ska användas för produktionssystem.
Segrare .Net Core/C# SDK’t
.Net Core/C# SDK’t har drygt dubbelt så många contributors, nästan 5 gånger så många tillgängliga paket och 12 ggr så många gjorda releaser som Java SDK’t.
Detta innebär att valet av .Net Core/C# som huvudspråk för all utveckling man gör i Azure är en no-brainer och att Java ligger på efterkälken med sämre stöd och mognad.
Om ni går till denna sida ser ni hur många services Azure tillhandahåller och ni som organisation måste försäkra er om att det valda språket har bästa möjliga stöd för att jobba mot de tjänster ni behöver.
https://azure.microsoft.com/en-us/services/
.Net Core/C# SDK’et har stöd för dem alla medans Java SDK’et är begränsat på den punkten och bara har bra stöd för ett begränsat urval av dem.
Väljer ni Azure som driftsplattform och vill vara säkra på att ni kommer kunna förverkliga ett visst framtida projekts behov på bästa sätt och dra maximal nytta av Azure som driftsplattform så ska ni välja .Net Core och C#.
Väljer ni Java som huvudspråk blir ni begränsade av vad Javas SDK har bra stöd för, så då ska ni vara säkra på att det kommer räcka.
Det finns med andra ord många väldigt starka och tungt vägande skäl till att välja .Net Core och C# som utvecklingspråk i Azure.
.Net Core är framtiden och det säkraste valet för utveckling i Azure
Dra era egna slutsatser om vad nedan innebär för skillnaderna i stödet för .Net Core/C# gentemot Java för utveckling i Azure som redan nu är betydligt bättre för .Net Core och C#.
Personligen tror jag kombinationen innebär att .Net Core och C# kommer få merparten av både Microsofts och communityns uppmärksamhet och kärlek när det gäller stödet för utveckling i Azure vilket innebär att det kommer vara betydligt enklare att göra saker i C#.
.NET Core is the Future of .NET
.NET Core Is ‘Most Loved’ Framework in Stack Overflow Survey
När nu de hårda fakta är avklarade kommer jag fortsätta med mer ”mjuka” skäl till att C# och .Net Core är ett bättre val än java och spring boot för utveckling i Azure.
Jag kommer även ge de java utvecklare som läser detta tips för hur de ska kunna göra övergången från java till C# så lätt som möjligt och tipsa om läroresurser för att snabbt lära sig C#, .Net Core och Azure.
Eftersom Java och C# rent syntaktiskt är rätt lika varandra så kan vilken Java utvecklare som helst om denne vill med rimlig ansträngning gå över till att programmera i C# i stället.
Dessutom finns det oerhört mycket mer läroresurser och även stöd inom communityn för att jobba med C# vid utveckling i Azure, så bara det är ett tungt vägande skäl att välja C#, om ni inte är självplågare och vill göra livet 10 ggr besvärligare för er själva förstås.
Sen tror jag inte Java någonsin kommer bli lika populärt som utvecklingspråk i Azure så det kommer alltid ligga ett, två eller tre steg efter beroende på tjänst.
Organisationer som använder java och vill fortsätta använda det kommer antagligen primärt välja Amazon, och majoriteten av de som väljer Azure kommer använda C# och .Net Core.
Bra stöd för java i Azure kan ni nog bara räkna med när det gäller de vanligaste tjänsterna som webbappar, databaser, storage, containrar o.s.v. även om det alltid kommer ligga efter i stödet.
Varför C# & .Net Core för utveckling i Azure?
- . NET Core kommer alltid ha det bästa och stabilaste stödet för allt man kan göra i Azure. Java kommer alltid ligga minst ett 1/2 till 1 år efter när det tillkommer nya saker eller görs större uppdateringar av befintliga saker.
- Jag tror inte de saker Java har stöd för i Azure någonsin kommer vara lika up-to-date och stabilt som motsvarande .Net Core stöd, och aldrig vara lika komplett så det kommer göra livet besvärligare för utvecklare och inte lättare.
- Man bör primärt använda sig av Functions (stateless & short running), Durable Functions (stateful & long running) och kanske även Webjobs (gamla typen av .Net Framework bakgrundsjobb som klarar av long running & high load scenarios bra) för utveckling i Azure tillsammans med kompletterande PaaS tjänster (storage, SQL Server, API Manager, Webbappar o.s.v) så man får högst utväxling av plattformen.
- Vanliga Functions kan numera skrivas i Java men stödet i Java kommer med stor sannolikhet aldrig vara lika up-to-date, komplett och stabilt som i C#, eftersom C# och .Net Core är det Microsoft prioriterar.
- Durable Functions och Webjobs stöder dessutom inte Java alls, och det finns inte några planer på att införa stöd för Java i de tjänsterna, och det finns fler tjänster som inte stödjer eller har för dåligt stöd i java.
- Sen tror jag det saknas en del bindings för Java Functions som t.ex mot Logic apps som man antagligen kommer använda ibland, så med Java kommer man alltid vara begränsade av vad det stödjer och hur väl det stöder fungerar i verkligheten.
- .Net Core kan man vara säkra på stödjer allt man vill göra i framtiden och kommer vara mer genomarbetat, prioriterat och först med det senaste, så man gör sig själv en otjänst på lång sikt om man väljer Java för utveckling mot Azure.
- .Net Core är open source, har framtiden för sig, stödjer dependency injection, kan packeteras och köras i vanliga linuxbaserade docker kontainrar, är cross plattform, multi-application och stödjer mobilappar, windows, linux och macOS.
- Man kan även out-of-the box utveckla alla typer av appar i V.S & C# med bra stöd för skapandet av olika projekttyper som mobila appar, desktop appar, webbappar med olika front-ends (razor, blazor, angular, react) databasappar (Entity Framework), Webb API’er (WebAPI), realtids appar (SingnalR) o.s.v.
- Eftersom .Net Core är både cross plattform och multi-application (möjligt att utveckla alla sorters appar i), så kan man göra i princip allt man behöver i C# både i och utanför Azure.
- Microsoft utvecklar enormt många klassbibliotek med stöd för allt man kan tänka sig vilket blir en gemensam standard för .Net utveckling och förenklar livet för utvecklare.
- Det finns även gott om tredjepart bibliotek i form av nuget paket som man enkelt kan lägga till i sina projekt för ännu mer färdig funktionalitet.
- Visual Studio och .Net Core har extremt bra stöd för att uveckla mot Azure och använda Azure DevOps i sina projekt, så det blir väldigt lätt att skapa olika projekttyper och även jobba med versionshantering och CI/CD mot Azure via Azure DevOps då.
- Microsoft tillhandahåller mycket bra läroresurcer och referensdokumentation gratis som gör det betyligt enklare att komma in i utveckling mot både Azure och C#, så en java utvecklare kan med rimlig ansträngning göra övergången från Java till C# eller on-prem till Azure.
- Det finns även gott om kompletterande resurser för att lära sig och jobba med C# för alla aspekter av dess funktionalitet i Azure från både professionella aktörer och communityn, vilket gör det lättare både att lära sig och att lösa problem på vägen.
Varför/Varför inte Spring Boot/Java för utveckling i Azure?
- Många utvecklare kan Java/Spring bra och då skulle dessa personer slippa lära sig något nytt och bolla med två programmeringsspråk.
- Spring Boot har vissa intressanta finesser som starters och att de kan köras stand alone som gör att en massa förkonfigurerade och automagiska saker sker och underlättar jämför med traditionell utveckling i spring.
- Vad gäller starters så är det springvärldens försöka att göra uppsättningen av specifika projekttyper lika enkel som det alltid varit i Visual Studio/C# så det är inga världsrevolutionerande saker, och tycker inte det är lika bra som i VS för dess olika projekttyper heller, men för spring utvecklare är det en klar förenkling.
- Spring Boot hade kanske varit ett bra val för en traditionell on-prem miljö med många java utvecklare då det många gånger gör utveckling enklare för spring, men i.o.m. att app services, serverless functions och även containers och kubernets numera finns så har spring boot hamnat lite i ett ingenmanlands där det blir andrahandsvalet.
- Spring boot’s möjligheter att köras stand alone är ingen direkt fördel gentemot docker eftersom man lätt kan skapa en docker image som är förkonfigurerad med det som behövs för en specifik app, men man kan även paketera en spring boot app i en docker container som deployas till ett kubernetes kluster om man vill utnyttja spring boots starters.
- Spring boots möjligheter att köras stand alone utgör ingen direkt fördel i azure heller eftersom man lätt kan skapa t.ex en java webbapp i app services som man deployar till.
- Jämfört med serverless functions har spring boot inga fördelar alls för den typen av microservice orienterade appar, och även docker anser jag ligger i lä där.
- I princip alla viktiga moduler och funktioner spring (boot) tillhandahåller finns det motsvarigheter till i .NET Core, och det handlar mer om att detaljer skiljer i hur man gör saker i de olika ramverken, och det är oftast enklare att göra samma saker i C#/.Net Core.
- Övriga saker som var en fördel för Java/Spring gentemot gamla .Net Framework finns inte mer eftersom även .Net Core är open source, cross platform, multi-application, stödjer dependency injection, docker containrar o.s.v
- Kortsiktigt kanske det kan verka som ett bra alternativ att hålla fast vid java för er som är bra på det, men långsiktigt tror jag det blir en nackdel både för er som utvecklare och organisationen för det ni gör i Azure.
- 75% av det nya ni behöver lära er gäller utveckling i Azure (samma för AWS/GC) så ni vinner inte så mycket på att hålla fast vid Java ens på den punkten.
- Ni kan alltid använda Jetbrains Rider för att slippa lära er ett helt nytt IDE om ni är intellij fantaster vilket gör övergången betydligt lättare tills ni kommit in i språket och ramverket och är mogna att gå över till Visual Studio med.
Azure Functions i Java vs. C#
En jämförelse mellan att skapa Function i Java vs. C#/V.S. Ni som bara kan Java kommer inte ha några större problem med att lära er göra det i C# i stället då C# och Java är rätt lika syntaktiskt.
Create your first function using Visual Studio
Quickstart: Use Java to create and publish a function to Azure Functions
Skillnaden i att skapa Web API’er i .Net Core Vs. Spring (Boot)
Man behöver inte vara utvecklare för att se skillnaden i approach där Visual Studios sätt är betydligt mer överskådligt.
Tutorial: Create a web API with ASP.NET Core
Build a REST API with Spring and Java Config
Tips för att gå från Java till C# för Java utvecklare
From Java to .NET Core Part 2 Types
Java to C# – C# to Java (bra översiktlig jämförelse för utvecklare inkl Spring Boot)
C# for Java Programmers (några korta och koncisa videos inom specifika områden)
JetBrains Rider, Fast & powerful, cross platform .NET IDE
Läroresurser för att steg för steg lära er C# och .Net Core utveckling för Azure
.NET Videos Free videos for learning about .NET developer platform and how to use it
Azure for .NET and .NET Core developers
Azure’s .Net SDK API Reference
Azure Development with Visual Studio
Building Azure Functions, SQL database improvements and more – Azure Toolkit for Rider 2019.1
Be More Productive with JetBrains Rider
Java dokumentationen för Azure som jämförelse mot .Net Core’s
Azure for Java cloud developers
Spring Boot Starters for Azure
En jämförelse mellan Spring & Spring Boot
Spring Boot is basically an extension of the Spring framework which eliminated the boilerplate configurations required for setting up a Spring application. It takes an opinionated view of the Spring platform which paved the way for a faster and more efficient development eco-system.
A Comparison Between Spring and Spring Boot
Spring boot är som sagt var inget världsrevolutionerade enligt mig för det är bara spring världens försök att göra utveckling i spring användarvänligare vilket utveckling I Visual Studio och C# alltid varit, men för spring utvecklare är det en klar förenkling.
Unfortunately, frameworks like Spring Boot come opinionated about the threading models you use, interfaces you need to extend, possibly the data repositories that are applicable, and various other assumptions about your problem space. That’s a lot of restrictions before I’ve even written my first line of code.
Spring Boot and Opinionated Frameworks
Enligt vissa javautvecklare styr Spring Boot i lite för hög grad de val du som utvecklare ska göra när du utvecklar och bakbinder händerna på dig då det blir svårare att frångå valen, och det är antagligen gjort så eftersom spring är så komplext att det är enda sättet att förenkla utvecklingen i det.
Spring is now so complex that it has it’s own framework, Spring Boot. A framework for a framework. We are in Framework Inception, a film about Leonardo Di Caprio trying to find his long lost java code by going deeper and deeper through layers of XML and annotations before eventually giving up on life.
Sen är uppenbart inte alla Java utvecklare så förtjusta i Spring Boot trots att det gör utvecklingen i spring enklare än tidigare i de fall där deras starters passar bra.
De tycker antagligen att det är bättre att använda vanlig vanilla java tillsammans med mer specialiserade och lättviktiga MVC ramverk och IOC containrar för att det blir enklast för de typer av applikationer de utvecklar.
Håller ni er till att göra vanliga webbsajter och rest api:er och gör mer traditionella databasdrivna sajter och inte behöver så mycket mer så kommer det nog gå bra att använda java i Azure i nuläget.
Vill ni däremot börja med serverless functions och få maximal nytta av alla Azures andra Paas tjänster och vara säker på att bra stöd för dem alla finns när ni vill använda dem så gör det det inte, för då kommer ni i många fall bli tvungna att skriva och underhålla era egna klassbibliotek mot dem vilket inte är kostnadseffektivt.
Jag hade i varje fall valt Amazons molntjänst om jag velat utvecklar i java, och väljer man som organisation Azure är bästa valet C# och .Net Core även om saker självklart kan förändras i framtiden, men för de närmaste åren kan man dra denna slutsats.