Ska man välja C# & .Net Core eller Java för utveckling I Azure?

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.

https://github.com/Azure/azure-sdk-for-net/blob/master/packages.md

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.

https://github.com/Azure/azure-sdk-for-java/blob/master/packages.md

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.

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 särskilt populärt som utvecklingspråk i Azure så det kommer föra en tynande tillvaro där.

Organisationer som använder java och vill fortsätta använda det kommer primärt välja Amazon, och majoriteten av de som väljer Azure kommer använda C# och .Net Core.

Microsoft har gjort ett försök att locka java utvecklare som ett marknadstest… men kommer bara lägga mindre och mindre tid på java stödet när de inser att det är bortkastad tid.

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 java/spring utveckling.
  • Vad gäller starters så är det bara javavä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.
  • De automagiska saker spring boot sen gör när man utvecklar via dess starters och annat kan vara ett tvåeggad svärd som både kan stjälpa och hjälpa så det är kanske inte alltid det kommer passa, och det kan nog även göra det svårare att förstå vad som egentligen händer när något blir fel eftersom ramverket gör en massa saker av sig självt.
  • Spring Boot hade kanske varit ett bra val för en traditionell on-prem miljö med många java utvecklare 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.
  • 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 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 1

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

Java SDK för Azure Functions

Spring Boot Starters for Azure

En jämförelse mellan Spring & 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 lite användarvänligare, vilket utveckling I V.S och C# alltid varit.

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 styr 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 antaglingen gjort så eftersom spring är så komplext att det är enda sättet att förenkla utvecklingen i det.

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

Ni som är spring boot fantaster borde fundera över om spring (boot) är bästa valet för er i Azure, eller alls… för även om ni väljer Amazon som molntjänst tror jag vanlig java i kombination med mer lättviktiga och specialicerade ramverk så gott som alltid är ett klokare val än spring.

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.

Why I hate Spring

Håller ni er till att göra vanliga webbsajter och rest apier och gör mer traditionella databadrivna sajter och inte behöver så mycket mer så kommer det nog gå bra att använda java i Azure.

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.

Jag hade i varje fall valt Amazons molntjänst om jag velat programmera i java, och väljer man som organisation Azure är överlägset bästa valet C# och .Net Core.

.Net Core är framtiden och det säkraste valet för utveckling i Azure

Dra era egna slutsater 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.

.NET Core is the Future of .NET

.NET Core Is ‘Most Loved’ Framework in Stack Overflow Survey

Varför molnet och serverless är framtiden och den rätta vägen att gå

Som avslutning skälen till varför molnet och i detta fall Azure är den rätta vägen att gå, och varför serverless och functions är förstahandsvalen för utveckling i molnet, för det blir inte maximal utväxling om ni bara flyttar upp era virtuella maskiner dit och fortsätter som förut.

7 skäl till varför Serverless är framtiden

The first reason is apparent. If you don’t have to write infrastructural code like starting an app, initializing resources, setting up database connections and dependency injection containers, you’re able to focus on what matters to your customers.

What seems to be a limitation at first is a strength when you think about it more deeply. When you’re forced to write your business logic in a stateless way, you build a foundation to scale your application.

7 Reasons Why Serverless Is the Future

Är Serverless Arkitektur Framtiden för Webbutveckling?

Serveless Cloud-powered applications are the future of mass product web-development. Standardized components that are tested, reliable, fast to implement and can be configured ‘out-of-the-box’ to build scalable web-application of any kind.

Serverless cloud components are developed and maintained daily by the best engineers in a narrow focus of expertise. The core of any product will still be tailor-made and protected but all the wrapping around this core will be built from re-usable, common, Serverless Cloud stack components.

This will allow for more development focus on users and their needs and less on infrastructure code.

Is Serverless Architecture the Future of Web Development?