The State of Developer Ecosystem 2021

Permalänk
Datavetare

The State of Developer Ecosystem 2021

Man får ta den här typen av undersökningar med viss nypa salt, men vissa saker lär stämma då en klar majoritet av liknande undersökningar ger i grunden samma resultat.

I detta fall handlar det om JetBrains - The State of Developer Ecosystem 2021.

Att vi lever i JavaScript:ens tidsålder verkar "alla" de här undersökningarna vara överens om, så inga överraskningar där.

Till de saker som kanske jag tycker har lite diskussionsunderlag, andra åsikter är välkomna

Reflektion #1

"The top-5 languages developers are planning to adopt or migrate to are Go, Kotlin, TypeScript, Python, and Rust."

Den listan känns riktigt bra då jag gillar alla dessa språk, ger hopp om framtiden

Go är kanske inte världens roligaste programspråk rent syntaktiskt, men de har verkligen gjort något som passar en specifik nisch bättre än allt annat (utom möjligen Erlang) med "gorutiner" och fokus på I/O.

Kotlin var verkligen någon Android behövde som "huvudspråk", Java kändes lite mossigt ställd mot Swift på iOS sidan. Tycker Swift och Kotlin båda är riktigt trevliga (har i.o.f.s. mer erfarenhet av Swift så här långt).

Har inte lika mycket mot JavaScript som många andra, gillar NodeJS skarp. Men har generellt svårt för dynamiskt typade språk och tycker TypeScript lyfter JS till en ny (och bättre) nivå!

Gillar Python för protyping. Det är i.o.f.s. ett dynamisk typat språk, men i få andra språk får man så mycket gjort på så lite som i Python. Och sedan v3.5 är det möjligt att lägga till statiska typer, inget Python själv bryr sig om men t.ex. Visual Studio Code får betydligt kraftfullare intellisense om man använder sig av "type hints" i sitt program.

Rust kommer få de tufft att utmana C++ som det självklara språket för de mest krävande applikationerna ("modern" C++ är faktiskt riktigt trevligt, C++20 tar bort sista 70-tals smaken då "modules" gör separation i header/source valfri). Likt Go löser/förenklar Rust en hel klass med uppgifter, i Rust fall är det en av vår tids värsta buggar som är väsentligt mycket svårare att göra inom ramen för Rust: data-race. Såg att Linux-kärnan kommer stödja Rust inom mycket kort, C är inte längre enda språket där! Microsoft tittar också på att möjligheten stödja att t.ex. drivrutiner till Windows utvecklas i Rust.

Reflektion #2

Nu visar undersökningen att vilket språk som är populärt varierar förvånansvärt mycket mellan olika regioner/länder. Men blir ändå fortfarande förvånad att se ovan, då specifikt C#. Har till största delen jobbat på och med företag som primärt håller till i Nordamerika, rankingen ovan är rätt mycket hur jag uppfattar popularitet hos olika språk. Eller, nästan, då jag jobbat väldigt mycket med inbyggda system har C och C++ legat i topp för egen del men hos kunder har det sett ut rätt mycket som ovan.

I Sverige kan det omöjligt se ut som ovan, C# måste vara långt vanligare här och det måste sedan många år tillbaka vara populärare än Java sett till vad som brukar efterfrågas i jobbannonser. Någon som har en idé om varför C#/.Net är så oproportionerligt mycket populärare här än i världen i stort?

Microsoft är trots allt amerikansk, men både min uppfattning, denna och flera andra undersökningar visar ofta att JavaScript, Java och Python är de riktigt stora språken medan C# och C++ brukar ligga hyfsat jämnt. Som primärt C++ programmerare känns det som C++ är långt mindre vanligt här i Svedala jämfört med C#...

Visa signatur

Care About Your Craft: Why spend your life developing software unless you care about doing it well? - The Pragmatic Programmer

Permalänk
Medlem

Det sägs ofta i debatten att vi i Sverige har en större andel stora företag jämfört med många andra länder. Kan det vara så att när dessa företag skriver egna program så blir det .Net istället för webapplikationer? Det är åtminstone min personliga erfarenhet från arbetsgivare, att det är mer egenutvecklade ”riktiga” program hos svenska arbetsgivare, och att om det skrivs något nytt så är det .Net. Stort amerikanske företag så var det webbapplikationer för hela slanten.

Sen en anekdot: jag är för all del inte alls programmerare och har bara gått lite strökurser i programmering under skoltiden, men jag vill minnas att de flesta av de lärarna snackade enormt med skit om C++. Som jag minns det var Java det enda moderna språket de ville befatta sig med, och lärde ut C/C++ för att det i det läget (sent 90-tal) var så vanligt och folk valde det. Har t.o.m gått en komplett meningslös FORTRAN-kurs som var obligatorisk i det läget och jag absolut aldrig använt.

Visa signatur

5900X | 6700XT

Permalänk
Medlem

Intressant med språken, och från min erfarenhet här i Sverige är de enda två språken jag aldrig kommit undan att använda hos någon arbetsgivare PHP & JS. Dessa används alltid i någon utsträckning (JS är väl förståeligt, dock). Sedan har det varit salig blandning av Python, C#, Java, och till och med äldre språk som dBase och annat...

Visa signatur

AW3423DW QD-OLED - Ryzen 5800x - MSI Gaming Trio X 3090 - 64GB 3600@cl16 - Samsung 980 Pro 2TB/WD Black SN850 2TB

Permalänk
Medlem
Skrivet av mpat:

Det sägs ofta i debatten att vi i Sverige har en större andel stora företag jämfört med många andra länder. Kan det vara så att när dessa företag skriver egna program så blir det .Net istället för webapplikationer? Det är åtminstone min personliga erfarenhet från arbetsgivare, att det är mer egenutvecklade ”riktiga” program hos svenska arbetsgivare, och att om det skrivs något nytt så är det .Net. Stort amerikanske företag så var det webbapplikationer för hela slanten.

Sen en anekdot: jag är för all del inte alls programmerare och har bara gått lite strökurser i programmering under skoltiden, men jag vill minnas att de flesta av de lärarna snackade enormt med skit om C++. Som jag minns det var Java det enda moderna språket de ville befatta sig med, och lärde ut C/C++ för att det i det läget (sent 90-tal) var så vanligt och folk valde det. Har t.o.m gått en komplett meningslös FORTRAN-kurs som var obligatorisk i det läget och jag absolut aldrig använt.

Vill bara flika in att mycket som görs idag inom enterprise är webb och där används också .NET för backend. Tror generellt att Microsoft är omtyckt i Sverige och stora företag har partnerskap med Microsoft och då faller det naturligt att använda .NET.
Nu är ju också .NET (Core/5/6) riktigt trevligt att jobba med då det blivit open-source och inte längre är låst till Windows.

Permalänk
Datavetare
Skrivet av mpat:

Det sägs ofta i debatten att vi i Sverige har en större andel stora företag jämfört med många andra länder. Kan det vara så att när dessa företag skriver egna program så blir det .Net istället för webapplikationer? Det är åtminstone min personliga erfarenhet från arbetsgivare, att det är mer egenutvecklade ”riktiga” program hos svenska arbetsgivare, och att om det skrivs något nytt så är det .Net. Stort amerikanske företag så var det webbapplikationer för hela slanten.

Sen en anekdot: jag är för all del inte alls programmerare och har bara gått lite strökurser i programmering under skoltiden, men jag vill minnas att de flesta av de lärarna snackade enormt med skit om C++. Som jag minns det var Java det enda moderna språket de ville befatta sig med, och lärde ut C/C++ för att det i det läget (sent 90-tal) var så vanligt och folk valde det. Har t.o.m gått en komplett meningslös FORTRAN-kurs som var obligatorisk i det läget och jag absolut aldrig använt.

Delar din erfarenhet kring C++ från 90-talets KTH. Där verkade man föredra språk som ingen vettig organisation skulle välja att använda, som Scheme (fast personligen gillar jag Lisp, Clojure är helcoolt!!!), Modula 2, ANSI Pascal (vem f-n har någonsin använt något annat än Turbo Pascal?), Smalltalk etc.

C#/.Net är nog primärt populärt som "back-end" språk. Sökt en del på vilka desktop-applikationer som är skrivna primärt i .Net. Det jag hittar är ett par övergivna Linux-applikationer som använder GTK#, sedan finns Paint.NET...

Visual Studio är det närmaste en större applikation som kan anses vara skriven i .NET, men den är en kombination av C++ ("back-end") och .NET ("front-end"). Finns sedan ett gäng multi-OS applikationer som använder WPF som "front-end" på Windows, medan huvuddelen är skriven i C eller C++. Ett exempel Handbreak, sedan har MacOS har någon ObjC front-end, Linux kör GTK+ vilket är rätt typiskt.

Enda egentliga konkurrenten till C och C++ som "desktop applikationsspråk" är JS/TS tack vare att allt fler applikationer använder Electron.

Skrivet av zaibuf:

Vill bara flika in att mycket som görs idag inom enterprise är webb och där används också .NET för backend. Tror generellt att Microsoft är omtyckt i Sverige och stora företag har partnerskap med Microsoft och då faller det naturligt att använda .NET.
Nu är ju också .NET (Core/5/6) riktigt trevligt att jobba med då det blivit open-source och inte längre är låst till Windows.

Tror du slår huvudet på spiken med att Microsoft Sverige gör ett väldigt bra arbete. Efter lite mer efterforskningar verkar ändå Sverige inte sticka ut så mycket, är nog mer på forum som SweC som de som jobbar med programmering i större utsträckning använder .NET/C#. Det är nog en effekt av att SweC drar till sig många som primärt använder datorn för spel, Windows är total-dominant för just spel.

Kollar man jobbannonser ser det rätt lika ut här som i resten av världen. Python och Java efterfrågas i ungefär dubbelt så många annonser som C# och C++. Det är en viss bias mot C# här, i de flesta undersökningar ligger C# och C++ rätt lika sett över världen men min lilla "undersökning" (kollar annonser på LinkedIn och liknande) så är C# ~20-25 % mer efterfrågat än C++. Men är inte mer övervikt än så och Java är mer än dubbelt så efterfrågat!

JS får två resultat. Kollar man enbart JS får man nästan lika mycket träffar som för Java, men då är det rätt många som kör Java eller C# i "back-end" och har JS i "front-end". Söker man i stället på NodeJS, d.v.s. JS/TS i backend, hamnar man i nivå ungefär med C++.

Så Sverige verkar som sagt vara rätt likt resten av världen!

Personligen har jag lite svårt att se folks entusiasm för just C#. Visst såg jag poängen strax efter millennieskiftet, dels är VS en riktigt bra IDE, var C# trevligare än både Java och framförallt än C++. Idag har jag svårt att se fördelen med C# över "modern C++" och även om jag föredrar Kotlin över Java så har Java från version 8 blivit rätt trevligt.

Största problemet jag har med .NET är att det ofta finns allt för många sätt att rent logiskt göra samma sak, ofta fungerar majoriteten av dessa rätt kasst i praktiken vilket gör det rätt tidsödande att reda ut vilket "rätt" sätt är. Java må vara långsammare på att ta in saker, men där tenderar man få till själva implementationen bättre.

Både Java och C# fick ju kritik redan när de var nya att de egentligen inte tillförde något nytt av värde, de var egentligen bara något bättre versioner av dåtida C++. De språk som ligger i toppen på listan i början av denna tråd har alla faktiskt tillfört något till datorvärlden.

De programspråk folk planerar migrera till tillför alla något relevant

Go: visst var Erlang före med exekveringsmodellen, men Go har en syntax som en större publik inte upplever som allt för "galen". Go är också betydligt närmare C++ i "råprestanda", Erlang är rätt långsamt på ren "compute". Likt Erlang är Go:s modell guld värd för program som är primärt I/O-bundna.

Kotlin: Java har i.o.f.s. rykt upp sig en del från Java 8 framåt rent syntaxmässigt. För egen del känns ändå Kotlin som "Java done right". Det Java världens verkligen fått rätt är JVM, prestanda är direkt lysande, framförallt multicore! Med Kotlin kan man få tillgång till JVM-miljön med ett fantastiskt designat modernt språk!

TypeScript: JS lämnar kanske på syntax-delen. Men går inte att blunda för att JS är webbens "assembler", så det är och lär förbli en av de absolut viktigaste språken. Tack vare Electron växer ju också populariteten för TS/JS som applikationsspråk. TS är specifikt designat för att IDE:er ska kunna göra ett lysande jobb.

Python: även om det lämnar en hel del att önska rent prestandamässigt är det få språk/miljöer som gör en så produktiv som Python. Vidare är Python en dröm för maskininlärning (PyTorch och TensorFlow), datoreseende (OpenCV) och matrisberäkningar (NumPy). I dessa områden får man både produktiviteten från Python och prestandan från C++, detta då beräkningarna utförs i SIMD-optimerade C++ bibliotek medan man egentligen bara beskriver vad som ska beräknas i Python.

Rust: stora grejen här att man redan vid kompilering kan hitta minnesproblem samt, än mer värdefullt, data-race! Det samtidigt som program skrivna i Rust är lika effektiva som C och C++ program!

Roade mig att parallellisera det "korkade" sättet att beräkna Fibonacci. Testade det dels på x86_64 (Skylake 6650U) och ARM64 (RPi4 körandes 64-bitars versionen av Ubuntu).

sfib() är i alla fallen den seriella implementationen, d.v.s. i C++

uint32_t sfib(uint32_t n) { if (n < 2) { return n; } return sfib(n - 1) + sfib(n - 2); }

Den anrops om n < 30 (testade olika värden, ~30 var mest effektivt i alla språk)

Rust

fn pfib(n: u32, thresh: u32) -> u32 { if thresh > n { return sfib(n); } return vec![n-1, n-2].par_iter().map(|&n| pfib(n, thresh)).sum() }

C#/PLIQ

static int Pfib(int n) { if (n < thresh) { return Sfib(n); } return new int[] { n-1, n-2 }.AsParallel().Sum(n => Pfib(n)); }

C#/TPL

static int Pfib2(int n) { if (n < thresh) { return Sfib(n); } Task<int> n1 = Task<int>.Factory.StartNew(() => Pfib2(n - 1)); int n2 = Pfib2(n - 2); return n1.Result + n2; }

Go

func pfib(n uint32, thresh uint32) uint32 { if n < thresh { return sfib(n) } n1 := make(chan uint32) go func() { n1 <- pfib(n-1, thresh) }() n2 := pfib(n-2, thresh) return <-n1 + n2 }

Java8

static int pfib(int n) { if (n < thresh) { return sfib(n); } return Arrays.asList(n-1, n-2).parallelStream().mapToInt(v -> pfib(v)).sum(); }

C++/OpenMP

uint32_t pfib(uint32_t n) { if (n < thresh) { return sfib(n); } uint32_t n1; #pragma omp task shared(n1) n1 = pfib(n - 1); uint32_t n2 = pfib(n - 2); #pragma omp taskwait return n1 + n2; }

Satt thresh som en statisk variabel i Java och C# och global variabel i C++ (i praktiken en konstant som bara sätts vid uppstart).

C#/PLINQ är väldigt lik Rust och Java versionen, men den varianten är totalt värdelös då den var >10 gånger långsammare än att köra på en enda kärna.

C#/TPL gav en hyfsat skalning över CPU-kärnor, men det var ändå den långsammaste versionen (körde senaste versionen av .NET Core 5). Inte så långt efter på x86_64, men rätt bedrövlig prestanda på ARM64.

Java8 imponerande stort, nästan lika snabbt som C++/OpenMP på x86_64 och faktiskt marginellt snabbare på RPi4!

Go låg i nivå med Java8 och C++. Mest imponerade Rust/rayon, den lösningen är inte bara en av de mest eleganta utan den presterade också klart bäste både på x86_64 och ARM64.

Vet inte om jag gör "fel" saker, men just dålig skalning över CPU-kärnor är något jag återkommande upplever är ett problem i .NET samtidigt som det fungerar bra på JVM:s. Kanske finns det en orsak varför Java behåller sin popularitet trots att "ingen" verkar gilla Java som språk?

Jaja, kanske lite för mycket fritid så här på semestern...

Visa signatur

Care About Your Craft: Why spend your life developing software unless you care about doing it well? - The Pragmatic Programmer

Permalänk
Hedersmedlem
Skrivet av Yoshman:

Delar din erfarenhet kring C++ från 90-talets KTH. Där verkade man föredra språk som ingen vettig organisation skulle välja att använda, som Scheme (fast personligen gillar jag Lisp, Clojure är helcoolt!!!), Modula 2, ANSI Pascal (vem f-n har någonsin använt något annat än Turbo Pascal?), Smalltalk etc.

Jag vill minnas att man här (Liu) motiverade Scheme med att språket är överskådligt (standarden är inte särskilt många sidor lång) och att det finns pedagogiska fördelar med att alla studenter börjar på samma nivå.

Permalänk
Datavetare
Skrivet av Elgot:

Jag vill minnas att man här (Liu) motiverade Scheme med att språket är överskådligt (standarden är inte särskilt många sidor lång) och att det finns pedagogiska fördelar med att alla studenter börjar på samma nivå.

KTH körde exakt den motiveringen både för Scheme (användes på bl.a. data och elektro) och ANSI Pascal (användes på maskin, kemi, m.fl.). Kan absolut se poängen, men då kanske man kanske välja något som fungerar i fler kurser så fokus kan ligga på att lära ut koncept, algoritmer etc.

Fördelen med att ha någon mer "mainstream" är att det lättare att få hjälp då det kommer finnas flertalet elever som då kan hjälpa.

När jag läste objektorienterad programutveckling, där Smalltalk användes, kändes det som man lade 90 % av tiden på att fatta hur saker skulle göras i Smalltalk och 10 % på att lära sig det kursen handlade om. Elektro läste samma kurs samtidigt, fast där användes C++. Frustrerande när man kunde hjälpa andra (de som körde C++) medan man själv satt fast på egentligen samma uppgift, fast enbart p.g.a. att man inte kan språket/miljön...

Nu verkar både KTH och Chalmers köra mer "vettiga" programsspråk, om de inte ändrat nyligen (Python börjar ju bli allt vanligare) så kör Java i stället för Scheme för inledande kurser. Nog för att Java, C# och C++ har språkdefinitioner som tar hundratals sidor medan Scheme och även Clojure (som har betydligt fler finesser än Scheme) är exempel där man kan lära sig hela språket (finns ju massor med bibliotek man inte hinner lära sig) på några timmar.

Visa signatur

Care About Your Craft: Why spend your life developing software unless you care about doing it well? - The Pragmatic Programmer

Permalänk
Hedersmedlem
Skrivet av Yoshman:

KTH körde exakt den motiveringen både för Scheme (användes på bl.a. data och elektro) och ANSI Pascal (användes på maskin, kemi, m.fl.). Kan absolut se poängen, men då kanske man kanske välja något som fungerar i fler kurser så fokus kan ligga på att lära ut koncept, algoritmer etc.

Det försvårar ju kanske att direkt återanvända sina kunskaper i framtida problem (om man inte vill fortsätta med Scheme), men för kursen tyckte jag ändå att det fungerade utmärkt. Fokus var (vill jag minnas) främst på att introducera grundläggande koncept som iteration och rekursion och språkets elegans tillät nästan att man behandlade det som matematik. Det förekom även en hel del programmering med papper och penna, och det vet jag inte om man vill utsätta sig för med många andra språk...

Permalänk
Medlem

Jag är ny i spelbranschen och här är det väldigt mycket C++, några få företag har börjat kolla på Rust för diverse tools men det ska bli intressant att se om någon lyckas göra ett komplett spel/motor i Rust.
Har egentligen inga problem med C++ utom att kompileringstiderna drar iväg rätt fort, blir en del kafferaster kan man säga. Vet inte hur rust står sig i ett stort projekt på den fronten.

Permalänk
Datavetare

RedMonk (Microsoft står bakom då de äger GitHub) presenterade sin senaste "popularitets-ranking" här om dagen. Den bygger på en sammanvägning av hur mycket aktivitet ett visst programmeringsspråk dels genererar på StackOverflow och dels hur mycket skrivet i språket som pushas till GitHub.

I någon mening tappar man rätt intressant information i den sammanvägningen, ett språk som folk skriver väldigt mycket i men genererar relativt lite StackOverflow trafik skulle ju kunna vara ett språk / en plattform som har väldigt bra dokumentation och/eller är väldigt enkelt att förstå sig på!

Både Go och Rust ligger ju under linjen i denna graf, d.v.s. de har högre skriven-kod:frågor-på-stack-overflow än genomsnittet.

På det stora hela visar den undersökning rätt mycket samma sak som de flesta andra när man tittar på top 10

  1. JavaScript

  2. Python

  3. Java

  4. PHP

  5. CSS

  6. C++

  7. C#

  8. TypeScript

  9. Ruby

  10. C

Givet att TypeScript börjar nosa på C# och C++ säger nog en del om vad majoriteten jobbar med idag: webben på olika sätt! Likaså att PHP ligger så högt, har själv inte skrivit en PHP-rad på väl över 10 år (men jobbar i.o.f.s. inte med traditionell front-end/back-end).

Undersökningen visar att Java fortsätter att vara väldigt populärt. Microsoft trycker på att Java har deras fulla stöd, vilket faktiskt inte bara verkar vara varmluft då just Microsoft är den bästa källan just nu om man vill ha en bra JDK med "native M1 stöd" till MacOS, de färdiga paket för "alla" aktuella OS/CPU-kombos som har något form av användarbas!

Skrivet av Frappee:

Jag är ny i spelbranschen och här är det väldigt mycket C++, några få företag har börjat kolla på Rust för diverse tools men det ska bli intressant att se om någon lyckas göra ett komplett spel/motor i Rust.
Har egentligen inga problem med C++ utom att kompileringstiderna drar iväg rätt fort, blir en del kafferaster kan man säga. Vet inte hur rust står sig i ett stort projekt på den fronten.

Lär tyvärr ta ett tag innan vi ha något likt Unreal Engine eller ens Unity som är baserat på Rust. Hoppas ändå det kommer någongång...

Har jobbat med en hel del stora C++ projekt, så förstår vad du menar med långa kompileringstider! Har inte gjort några egna saker i Rust (än) där kompileringstider börjar dra iväg, men är rätt uppenbart att Rust är rätt "tungt" att kompilera.

Det är inte lika illa som "template tungt C++" (att kompilera parsers skrivna med Boost.Spirit är hemskt!), men det är helt klart närmare C++ än C och Java i kompileringstid. Märks om man använder lite mer komplicerade ramverk (älskar Rust Rayon), bygger man med "cargo" så byggs även alla bibliotek man beror av första gången.

Visa signatur

Care About Your Craft: Why spend your life developing software unless you care about doing it well? - The Pragmatic Programmer

Permalänk
Datavetare

TIOBE

Som redan nämnt, alla dessa index säger långt ifrån allt. De mäter någon rätt specifik egenskap / trend.

Tycker ändå detta är värt att uppmärksammas givet då C och Java varit de två språk som konstant legat i topp på TIOBE-index under de senaste 20 åren (detta index verkar ha funnits sedan mitten av 1980-talet).

Allt har pekat på att det skulle bli ett skifte i toppen, nu har det hänt. Python är numera i topp!

Topp 5 är inte speciellt överraskande

  1. Python

  2. C

  3. Java

  4. C++

  5. C#

Det som sticker ut i TIOBE-index:et, vilket också belyser att detta inte är ett index på mest populära eller mest använda språk, är avsaknad av JavaScript på topp 5. JS kommer först på plats 7.

Kikar man i stället på GitHubs månadslista över vilka språk de ser mest aktivitet kring ligger JS parkerad på förstaplatsen. Men även här är Python väldigt populärt, det ligger på plats #2.

Givet vad jag skrev ovan om TypeScript, det jag var övertygad skulle hända hände långt snabbare än vad jag hade gissat. På GitHub har nu TS klivit förbi både C# och C++ i popularitet.

Webben är vår tids operativsystem!

Riktigt spännande att se Go, som i sammanhanget är ett väldigt nytt språk, ligga så högt på dessa listor. Samtidigt inte förvånande, Go ger unika fördelar i IO-intensiva applikationer över "traditionella" språk (async i alla ära, det är ett ful-hack jämfört med vad Go har), något som blir allt viktigare mer microservices och tjänster i "molnet" som nås via internet.

Visa signatur

Care About Your Craft: Why spend your life developing software unless you care about doing it well? - The Pragmatic Programmer