Permalänk
Medlem

Nytt programspråk - vilket?

Hej!

Behöver lite hjälp inom att välja ett nytt programspråk! Jag är en nästan utbildad civiligenjör inom elektroteknik och har lärt mig en hel del MATLAB programmering samt lite Python. Jag vill gärna kunna jobba med programmering, koda även hemsidor och appar och vill därför lära mig så många programmeringspråk som möjligt (och inte bara basics utan rentav förstå hur allt fungerar).

Så vilket språk bör jag lära mig nu? Och därefter? Varför?

Tack!

Visa signatur

12c/24t 4.0GHz (Zen2) • 2x16GiB 3200MHz C14 • RTX 2080 FE 1965MHz 7000MHz • X570 I PW • Ghost S1 MKII

Permalänk
Hedersmedlem

Fortsätta med Python kan nog vara en bra idé. Vill du lära dig mer hur saker fungerar på lägre nivå så kan du kika på C. Men sen ska man hitta på något projekt att göra också. Det är nog mycket svårare än att välja språk.

Du kan även kika på att köpa lite enkortsdatorer och leka med, göra lite projekt innehållandes elektronik. Det är ofta kul.

Permalänk
Medlem

Våra programmeringskurser på elektroteknik på LTH har varit Java. Nu på datortekniken läser vi lite C.
Android-appar skrivs ju i Java, så vill du skriva appar så kan det vara ett bra språk.

Visa signatur

i5 750 @ 3.9 GHz | NH-D14 | P7P55D |GTX 960 | Vulcan 8GB | Seagate 600 480 GB | Newton 650w | P280 | Dell U2515H

Permalänk
Medlem

Jag jobbar som .Net utvecklare och bygger i stor utsträckning webb-applikationer/siter.
Är du intresserad av att jobba med hemsidor som du nämnde i din post, rekommenderar jag C# (och till viss del kanske vb).
C# i kombination med något html renderings-språk t.ex. razor/aspx kommer du långt. Läs på lite javascript och jQuery så har du hela paketet för att kunna söka jobb som webbutvecklare senare. Och just nu är arbetsmarknaden lysande för .Net utvecklare.

Inget fel med att läsa Java/php osv. men om du siktar in dig specifikt på hemsidor/webb är .Net den bästa vägen att gå för tillfället. In my opinion.

Permalänk
Medlem

Javascript skulle jag säga är ett måste idag om du vill jobba med webben och köra applikationer i webbläsaren.

Java är oxå stort. Du kan tex göra android appar eller web applikationer etc.

Permalänk
Medlem

Intressanta svar!

Hur tror ni om det här? Börja med C för att lära mig mer om hårdvarunära programmering, läsa sedan Java för att programmera appar och därefter bygga ut med Javascript, C# och/eller .Net? Lysande idé eller har ni något bättre förslag?

Visa signatur

12c/24t 4.0GHz (Zen2) • 2x16GiB 3200MHz C14 • RTX 2080 FE 1965MHz 7000MHz • X570 I PW • Ghost S1 MKII

Permalänk
Medlem

Det finns inga fel utan det är ju helt upp till dig.
Men min rekommendation är att du sätter upp tydligare "mål" för att det inte ska bli för mycket för dig.
Ta saker i etapper, t.ex. om du har en rolig idé på låt säga en android app som du vill genomföra, läs då java riktat mot just det.
Vill du bygga en häftig hemsida, läs javascript och .net/php. Annars finns risken att du staplar kunskaper du inte kan applicera.
Vill du har ett flygcertifikat behöver du ju inte börja med att köra skördetröska liksom.

Permalänk
Hedersmedlem
Skrivet av Icte:

Intressanta svar!

Hur tror ni om det här? Börja med C för att lära mig mer om hårdvarunära programmering, läsa sedan Java för att programmera appar och därefter bygga ut med Javascript, C# och/eller .Net? Lysande idé eller har ni något bättre förslag?

Det beror lite på hur djup kunskap du är ute efter inom datavetenskap/datateknik. Jag kan tänka mig att du läst grundläggande digital- och datorteknik i din nuvarande utbildning? Man kan lära sig programmera högnivågrejer utan att ha en aning om hur en dator fungerar, men om du vill lära dig C så behöver du t ex lära dig hur minne fungerar, så det beror på vad du är ute efter. Du säger ju att du inte bara vill ha basics, då är det ganska vettigt att börja med C. Jag brukar inte rekommendera att börja med C om man inte programmerat så mycket förut, men då du är nästan färdig civilingenjör så lär du inte vara en person som ger upp för att något verkar krångligt vid första anblick.

Permalänk
Medlem

Mjo mitt mål är att lära mig så mycket som möjligt om datorer, både hårdvarumässigt och mjukvarumässigt. Har lärt mig en hel del om hårdvara och hur det fungerar via Internet och mycket från skolan och samtidigt programmering men aldrig någon hårdvarunära programmering, så tror C passar mig bäst där. Blir förmodligen att göra några projekt med min Raspberry Pi som jag fick i julklapp också

Men tack för all input! Blir faktiskt att lära mig C först och därefter Java (eller vice versa, beroende på om jag får någon Android app idé då jag startar med detta om några veckor!)

Visa signatur

12c/24t 4.0GHz (Zen2) • 2x16GiB 3200MHz C14 • RTX 2080 FE 1965MHz 7000MHz • X570 I PW • Ghost S1 MKII

Permalänk
Medlem

C är bra om du ska lära dig så mycket som möjligt om hur det fungerar från grunden, vad du går vidare med sen kan du välja utifrån de projektidéer du har för stunden.

Är det specifikt Android som intresserar på app-sidan så är det förstås Java som gäller, annars kan ett bra tips vara att Windows Phone/Windows RT-marknaden än så länge är rätt oexploaterad mark. Då kan du välja om du vill köra HTML5/JavaScript eller C#.

Permalänk
Medlem

Ifall du snart är färdig ingenjör i elektro kan du nog läsa till ca 30p så är du behörig för hingj. Sedan efter det, iom att du är färdig elektro snart, så har du ju med all säkerhet mycket grundkurser som alla linjer har gemensamt, kolla med din SYO hur många poäng data du behöver läsa till för att kunna plocka en hingj i datateknik så har du 2 examen.

En liten idë jag fick bara.

Visa signatur

ASUS ROG Strix B650E-F Gaming WIFI | 2 TB Kingston Fury M.2 NVMe SSD | 32 GB Kingston DDR5 | Rysen 7 7800x3D | ASUS GeForce RTX 4070 12 GB | Fractal Design North

Permalänk

Fokus på språk beror lite på vad du vill jobba med. Idag krävs så mycket mer än att bara kunna ett simpelt programmeringsspråk. Många miljöer har även ramverk, interna teknologier och metoder som man förväntas kunna.

Java används främst inom Enterprise-utveckling, client-server baserade system. Där så är det vanligt med Spring, Hibernate och lite andra ramverk som man förväntas kunna om man ska jobba inom Java-världen. Java-systemen kör nog vanligtvis på Linux eller Unix-plattformen, så att kunna lite om den är att föredra då också. Inom java-världen så har det även utvecklats nya språk som fungerar i javamiljön, såsom Clojure. Det kan vara intressant att titta vidare på om man väljer Java-spåret.

Om vi pratar web-utveckling så ska du fokusera på frontend-delarna i första hand. Backend-delarna kan utvecklas med en rad olika språk och teknologier som du kan fokusera på i andra hand. JavaScript är den stora gemensamma nämnaren för all webutveckling idag. Alla ramverk som man förväntas kunna är skrivna i JavaScript. Så det är utan tvekan ett språk du bör lära dig bra i så fall.

Andra saker som du bör lära dig inom web-utveckling är HTML5, CSS3, de vanligaste och mest populära ramverken såsom jQuery, AngularJS, Backone.js, Bootstrap samt designmönster såsom MVC. Andra teknologier du bör kolla in är REST och JSON.

MVC är ett designmönster som används både av ASP.NET MVC och Ruby on Rails samt en hel del andra web-miljöer. MVC är det som efterfrågas idag. Har man lärt sig mönstret inom en miljö, så kan man ju alltid lättare förstå hur det är implementerat i en annan, tex ASP.NET vs Ruby on Rails.

Idag så bygger man ofta ett REST-baserat backend som sedan kommunicerar med ett relativt helt JavaScript-baserat frontend, baserat på ett eller flera av de GUI-ramverk som är vanliga idag. Då den REST-baserade backend-delen kan skrivas i både Ruby, ASP.NET MVC, Node.js, etc och ge samma gränssnitt mot frontend-delarna så känns det som att det kanske inte spelar så stor roll vilken backend-teknologi man använder, de funkar mer eller mindre lika bra allihopa. Alla har ju sina för och nackdelar.

Startups kör ofta på Open Source-baserade backends såsom Django, Ruby on Rails eller PHP-baserade ramverk medan många av de större bolagen kör med Microsoftmiljöer och ASP.NET.

Vid större utveckling så är det inte helt ovanligt att man använder ett CMS-system i grunden. I Microsoft-världen så är EpiServer ett av det mest använda systemen, åtminstone i Sverige, men de jobbar hårt på att bli större även internationellt. Även Microsoft SharePoint är vanligt förekommande på större bolag.

Inom Open Source världen så är Drupal, Joomla och Wordpress vanligt förekommande vid webutvckling av både mindre och större siter. Gemensamt för alla dessa tre system är att de är skrivna i PHP. Så vill man agera inom den världen så kan PHP vara bra att lära sig.

Du som är elektroingenjör skulle ju kunna hamna inom embedded-världen och där tror jag fortfarande att C är väldigt vanligt förekommande. Om inte annat så är det ett bra språk att lära sig från grunden.

För att lära dig ren objektorientering så kan ju Java eller C# vara lämpliga språk. Sedan finns det ju funktionella språk såsom F#, Haskell och andra. Tror Clojure är funktionellt också.

Läs in dig på och förstå skillnaderna mellan de olika typerna av programmeringsspråk. Olika språk lämpar sig olika bra för olika saker och med lite bakgrund så förstår man bättre varför.

Man kan ju hålla på hur länge som helst med att lära sig programmeringsspråk, metodiker och man blir aldrig fullärd. Ju mer man lär sig, desto mindre inser man att man kan.

Ett tips är också att fokusera på själva läran om programmeringsmetodik, inte bara fokusera på rena språk. Det är väldigt utvecklande att läsa in sig på.

Något jag verkligen kan rekommendera är att kolla in Uncle Bob's (Robert C. Martin) video-serie baserad på hans bok Clean Code som du finner här, http://cleancoders.com/. Boken bör du också läsa, men serien följer bokens kapitel ganska bra men kanske kan den ge vissa kompletteringar. Denna seier är grymt givande och borde vara obligatorisk för att blivande utvecklare!

Andra rekommendationer när det gäller läsning är följande där vissa anses vara klassiker:

http://www.amazon.com/Code-Complete-Practical-Handbook-Constr...
http://www.amazon.com/Clean-Code-Handbook-Software-Craftsmans...
http://www.amazon.com/Beautiful-Code-Leading-Programmers-Prac...
http://www.amazon.com/Refactoring-Improving-Design-Existing-C...
http://www.amazon.com/Solid-Code-Donis-Marshall/dp/0735625921...
http://www.amazon.com/Software-Estimation-Demystifying-Practi...
http://www.amazon.com/Write-Great-Code-Understanding-Machine/...
http://www.amazon.com/First-Design-Patterns-Elisabeth-Freeman...
http://www.amazon.com/Coders-at-Work-Peter-Seibel/dp/14302194...
http://www.amazon.com/Pragmatic-Programmer-Journeyman-Master/...
http://www.amazon.com/Mythical-Man-Month-Software-Engineering...
http://www.amazon.com/Agile-Principles-Patterns-Practices-C/d...
http://www.amazon.com/Applying-Domain-Driven-Design-Patterns-...
http://www.amazon.com/Art-Unit-Testing-Examples-Net/dp/193398...
http://www.amazon.com/Productive-Programmer-Theory-Practice-O...
http://pragprog.com/book/dlret/agile-retrospectives

Videobaserad utbildning som täcker mycket har du på:
* www.pluralsight.com
* www.codeschool.com
* www.tutsplus.com

Nu är det bara att läsa och studera videos och testa att koda lite. Praktik ger färdighet!

Lycka till!

Permalänk
Medlem
Skrivet av Dakkie:

Ifall du snart är färdig ingenjör i elektro kan du nog läsa till ca 30p så är du behörig för hingj. Sedan efter det, iom att du är färdig elektro snart, så har du ju med all säkerhet mycket grundkurser som alla linjer har gemensamt, kolla med din SYO hur många poäng data du behöver läsa till för att kunna plocka en hingj i datateknik så har du 2 examen.

En liten idë jag fick bara.

Du menar att jag förutom min mastersexamen ska ta en högskoleexamen i dataktenik? Låter ju inte så dumt.. Men jag ska kolla och se om det verkligen är 30 Hp jag saknar, vet inte hur de gör här på KTH nämligen

Skrivet av Polydrone:

Fokus på språk beror lite på vad du vill jobba med. Idag krävs så mycket mer än att bara kunna ett simpelt programmeringsspråk. Många miljöer har även ramverk, interna teknologier och metoder som man förväntas kunna.

Java används främst inom Enterprise-utveckling, client-server baserade system. Där så är det vanligt med Spring, Hibernate och lite andra ramverk som man förväntas kunna om man ska jobba inom Java-världen. Java-systemen kör nog vanligtvis på Linux eller Unix-plattformen, så att kunna lite om den är att föredra då också. Inom java-världen så har det även utvecklats nya språk som fungerar i javamiljön, såsom Clojure. Det kan vara intressant att titta vidare på om man väljer Java-spåret.

Om vi pratar web-utveckling så ska du fokusera på frontend-delarna i första hand. Backend-delarna kan utvecklas med en rad olika språk och teknologier som du kan fokusera på i andra hand. JavaScript är den stora gemensamma nämnaren för all webutveckling idag. Alla ramverk som man förväntas kunna är skrivna i JavaScript. Så det är utan tvekan ett språk du bör lära dig bra i så fall.

Andra saker som du bör lära dig inom web-utveckling är HTML5, CSS3, de vanligaste och mest populära ramverken såsom jQuery, AngularJS, Backone.js, Bootstrap samt designmönster såsom MVC. Andra teknologier du bör kolla in är REST och JSON.

MVC är ett designmönster som används både av ASP.NET MVC och Ruby on Rails samt en hel del andra web-miljöer. MVC är det som efterfrågas idag. Har man lärt sig mönstret inom en miljö, så kan man ju alltid lättare förstå hur det är implementerat i en annan, tex ASP.NET vs Ruby on Rails.

Idag så bygger man ofta ett REST-baserat backend som sedan kommunicerar med ett relativt helt JavaScript-baserat frontend, baserat på ett eller flera av de GUI-ramverk som är vanliga idag. Då den REST-baserade backend-delen kan skrivas i både Ruby, ASP.NET MVC, Node.js, etc och ge samma gränssnitt mot frontend-delarna så känns det som att det kanske inte spelar så stor roll vilken backend-teknologi man använder, de funkar mer eller mindre lika bra allihopa. Alla har ju sina för och nackdelar.

Startups kör ofta på Open Source-baserade backends såsom Django, Ruby on Rails eller PHP-baserade ramverk medan många av de större bolagen kör med Microsoftmiljöer och ASP.NET.

Vid större utveckling så är det inte helt ovanligt att man använder ett CMS-system i grunden. I Microsoft-världen så är EpiServer ett av det mest använda systemen, åtminstone i Sverige, men de jobbar hårt på att bli större även internationellt. Även Microsoft SharePoint är vanligt förekommande på större bolag.

Inom Open Source världen så är Drupal, Joomla och Wordpress vanligt förekommande vid webutvckling av både mindre och större siter. Gemensamt för alla dessa tre system är att de är skrivna i PHP. Så vill man agera inom den världen så kan PHP vara bra att lära sig.

Du som är elektroingenjör skulle ju kunna hamna inom embedded-världen och där tror jag fortfarande att C är väldigt vanligt förekommande. Om inte annat så är det ett bra språk att lära sig från grunden.

För att lära dig ren objektorientering så kan ju Java eller C# vara lämpliga språk. Sedan finns det ju funktionella språk såsom F#, Haskell och andra. Tror Clojure är funktionellt också.

Läs in dig på och förstå skillnaderna mellan de olika typerna av programmeringsspråk. Olika språk lämpar sig olika bra för olika saker och med lite bakgrund så förstår man bättre varför.

Man kan ju hålla på hur länge som helst med att lära sig programmeringsspråk, metodiker och man blir aldrig fullärd. Ju mer man lär sig, desto mindre inser man att man kan.

Ett tips är också att fokusera på själva läran om programmeringsmetodik, inte bara fokusera på rena språk. Det är väldigt utvecklande att läsa in sig på.

Något jag verkligen kan rekommendera är att kolla in Uncle Bob's (Robert C. Martin) video-serie baserad på hans bok Clean Code som du finner här, http://cleancoders.com/. Boken bör du också läsa, men serien följer bokens kapitel ganska bra men kanske kan den ge vissa kompletteringar. Denna seier är grymt givande och borde vara obligatorisk för att blivande utvecklare!

Andra rekommendationer när det gäller läsning är följande där vissa anses vara klassiker:

http://www.amazon.com/Code-Complete-Practical-Handbook-Constr...
http://www.amazon.com/Clean-Code-Handbook-Software-Craftsmans...
http://www.amazon.com/Beautiful-Code-Leading-Programmers-Prac...
http://www.amazon.com/Refactoring-Improving-Design-Existing-C...
http://www.amazon.com/Solid-Code-Donis-Marshall/dp/0735625921...
http://www.amazon.com/Software-Estimation-Demystifying-Practi...
http://www.amazon.com/Write-Great-Code-Understanding-Machine/...
http://www.amazon.com/First-Design-Patterns-Elisabeth-Freeman...
http://www.amazon.com/Coders-at-Work-Peter-Seibel/dp/14302194...
http://www.amazon.com/Pragmatic-Programmer-Journeyman-Master/...
http://www.amazon.com/Mythical-Man-Month-Software-Engineering...
http://www.amazon.com/Agile-Principles-Patterns-Practices-C/d...
http://www.amazon.com/Applying-Domain-Driven-Design-Patterns-...
http://www.amazon.com/Art-Unit-Testing-Examples-Net/dp/193398...
http://www.amazon.com/Productive-Programmer-Theory-Practice-O...
http://pragprog.com/book/dlret/agile-retrospectives

Videobaserad utbildning som täcker mycket har du på:
* www.pluralsight.com
* www.codeschool.com
* www.tutsplus.com

Nu är det bara att läsa och studera videos och testa att koda lite. Praktik ger färdighet!

Lycka till!

Wow. Visste att det fanns många språk men att det är så utbrett..

Vad tror du skulle vara bäst om man vill fokusera mest på hårdvarunära programmering, förutom C då? Finns det några specifika programmeringsspråk som är viktiga att lära sig i detta område?

Visa signatur

12c/24t 4.0GHz (Zen2) • 2x16GiB 3200MHz C14 • RTX 2080 FE 1965MHz 7000MHz • X570 I PW • Ghost S1 MKII

Permalänk
Medlem
Skrivet av Icte:

Vad tror du skulle vara bäst om man vill fokusera mest på hårdvarunära programmering, förutom C då? Finns det några specifika programmeringsspråk som är viktiga att lära sig i detta område?

Jag har jobbat med inbyggda system de senaste 5 åren, och det är i princip uteslutande C som gäller, i vissa fall C++. I alla fall så länge vi pratar om "små" inbyggda system med processorer från t.ex. ARM Cortex-familjen m.m. Mig veterligen finns det inget större utbud av kompilatorer för andra programmeringsspråk mot den typen av plattformar.

Permalänk
Hedersmedlem
Skrivet av Icte:

Du menar att jag förutom min mastersexamen ska ta en högskoleexamen i dataktenik? Låter ju inte så dumt.. Men jag ska kolla och se om det verkligen är 30 Hp jag saknar, vet inte hur de gör här på KTH nämligen

Wow. Visste att det fanns många språk men att det är så utbrett..

Vad tror du skulle vara bäst om man vill fokusera mest på hårdvarunära programmering, förutom C då? Finns det några specifika programmeringsspråk som är viktiga att lära sig i detta område?

Skrivet av pelleplu:

Jag har jobbat med inbyggda system de senaste 5 åren, och det är i princip uteslutande C som gäller, i vissa fall C++. I alla fall så länge vi pratar om "små" inbyggda system med processorer från t.ex. ARM Cortex-familjen m.m. Mig veterligen finns det inget större utbud av kompilatorer för andra programmeringsspråk mot den typen av plattformar.

Man programmerar inget i assembler? Jag läser datateknik på Chalmers, och vi har lärt oss en del assembler (kanske inte riktigt räknas som ett språk, av uppenbara skäl), men det kanske bara är i nödfall man gör något så nära processorn? Hur pass jobbigt är ARM-assembler?

Permalänk
Datavetare
Skrivet av widL:

Man programmerar inget i assembler? Jag läser datateknik på Chalmers, och vi har lärt oss en del assembler (kanske inte riktigt räknas som ett språk, av uppenbara skäl), men det kanske bara är i nödfall man gör något så nära processorn? Hur pass jobbigt är ARM-assembler?

Har gjort en hel del OS-utveckling och inte ens där är assembler något man tar till mer än i absoluta nödfall, det är C för hela slanten.

ARM assembler är helt OK för en människa att jobba med (för att vara assembler), lite hål finns det att kliva i och t.ex. MIPS assembler är nog lättare för de flesta.

Har aldrig kodat 64-bitars ARM assembler, men väl läst en del assembler dumpar av 64-bitars ARM kod genererat från C program med GCC, har också en hel del om 64-bitars ARM. Här är hålen i 32-bitars versionen borta och 64-bitars ARM är nog den bäst designade ISA jag sett, men det viktiga i praktiken idag är inte hur bra den är för människor utan hur bra den är för kompilatorer till populära språk. Men finns ingen anledning att tro att 64-bitars ARM inte är riktigt bra även för kompilatortillverkare, ligger på många sätt nära MIPS64 och PPC64 fast med lite ARM32 smak.

Lär man sig C, C++11 (som i praktiken skiljer sig rätt mycket från "gamla" C++), Obj-C, Java och C# så har man täckt in väldigt nära 100% av de språk som i praktiken används idag. Naturligtvis finns det platser där språk som Python, Ruby, Go, Erlang, F#, TCL, ADA etc, men rent statiskt så existerar knappt dessa språk.

Språk som Go eller Erlang borde användas av flera, är så otroligt mycket lättare att skriva extremt skalbara och högpresterande I/O-intensiva applikationer i dessa språk/miljöer jämfört med att göra det i C++, Java eller C# och det är trots allt den typ av applikationer de flesta som jobbar med "back-end" programmering håller på med (för många är det nog ändå databasen som är en reell flaskhals, så kvittar kanske till stor del hur man skriver sitt program).

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:

Har gjort en hel del OS-utveckling och inte ens där är assembler något man tar till mer än i absoluta nödfall, det är C för hela slanten.

ARM assembler är helt OK för en människa att jobba med (för att vara assembler), lite hål finns det att kliva i och t.ex. MIPS assembler är nog lättare för de flesta.

Har aldrig kodat 64-bitars ARM assembler, men väl läst en del assembler dumpar av 64-bitars ARM kod genererat från C program med GCC, har också en hel del om 64-bitars ARM. Här är hålen i 32-bitars versionen borta och 64-bitars ARM är nog den bäst designade ISA jag sett, men det viktiga i praktiken idag är inte hur bra den är för människor utan hur bra den är för kompilatorer till populära språk. Men finns ingen anledning att tro att 64-bitars ARM inte är riktigt bra även för kompilatortillverkare, ligger på många sätt nära MIPS64 och PPC64 fast med lite ARM32 smak.

Lär man sig C, C++11 (som i praktiken skiljer sig rätt mycket från "gamla" C++), Obj-C, Java och C# så har man täckt in väldigt nära 100% av de språk som i praktiken används idag. Naturligtvis finns det platser där språk som Python, Ruby, Go, Erlang, F#, TCL, ADA etc, men rent statiskt så existerar knappt dessa språk.

Språk som Go eller Erlang borde användas av flera, är så otroligt mycket lättare att skriva extremt skalbara och högpresterande I/O-intensiva applikationer i dessa språk/miljöer jämfört med att göra det i C++, Java eller C# och det är trots allt den typ av applikationer de flesta som jobbar med "back-end" programmering håller på med (för många är det nog ändå databasen som är en reell flaskhals, så kvittar kanske till stor del hur man skriver sitt program).

Tack för informationen, alltid lika trevligt att läsa dina välformulerade och innehållsrika inlägg!

Just Erlang använder vi ganska mycket i en kurs i concurrent programming som jag läser just nu. Imponerande features, minst sagt, även om syntax stundtals är väldigt konstigt och osmidigt, och jag är ännu inte helt vän med att det är dynamiskt typat. Dynamisk typning och funktionell kod kan förvirra en stackars nybörjare.

Permalänk
Medlem

Kan rekommendera Java om du vill göra appar (Android (där det är billigt att publicera på Play Store)). Java används också väldigt mycket inom industrin vilket kan vara bra ur en arbetssökningsynpunkt.

Permalänk
Datavetare
Skrivet av widL:

Tack för informationen, alltid lika trevligt att läsa dina välformulerade och innehållsrika inlägg!

Just Erlang använder vi ganska mycket i en kurs i concurrent programming som jag läser just nu. Imponerande features, minst sagt, även om syntax stundtals är väldigt konstigt och osmidigt, och jag är ännu inte helt vän med att det är dynamiskt typat. Dynamisk typning och funktionell kod kan förvirra en stackars nybörjare.

Om du är mer van med C/C++/Java/C# språk men gillar grundtanken med Erlang så ska du nog ta ett titt på Go. Jag tycker Erlang på många sätt är väldigt trevligt, men har väldigt svårt för dynamiskt typade språk (även om de är starkt typade som i fallet Erlang). Finns helt enkelt ingen anledning varför inte kompilator ska få peka ut uppenbara fel så tidigt som möjligt.

Go är statiskt typat och har en extremt starkt typning (mycket starkare än C++/Java/C#), att konvertera mellan unsigned/signed eller heltal/flyttal kräver en explicit cast. Framförallt unsigned/signed konvertering står för långt fler buggar än man först inser och dessa är ofta väldigt luriga att hitta. Att Java explicit undvek unsigned typer var just för att det introducerar ett relativt komplicerat koncept i språket.

Anledningen till att man tog fram Go var just för "concurrent programming" då man ansåg att C++ och Java (som Google normalt använder för produktionskod) är ganska svaga på detta område. Det fanns andra språk som t.ex. Erlang, men man ville ha ett kompilerat, starkt+statiskt typat språk. Andra huvudmålet med Go var extremt snabba kompileringstider, C++ är tyvärr ökänt för att ta väldigt lång tid i kompileringssteget när man börjar använda templates och liknande (som dock är trevliga på många sätt, bl.a. ur prestandahänseende). Även om de 3 som skapade Go är Google anställda så är språket i sig helt öppet och under en BSD-licens, i.e. använd det hur du vill.

Finns saker som Erlang kan göra men som ytterst få andra miljöer (inklusive Go) kan: du kan låta din Erlang runtime-miljö köra på flera datorer som endast är ihopkopplade via nätverket. Är fullt möjligt att dra igång en Erlang-process på alla maskiner som ingår i klustret. Naturligtvis kan man hacka kod i andra språk som ger samma effekt, men detta är en del av språket/plattformen i Erlang och något man hade i bakhuvudet vid många designval.

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

Väldigt intressant information, tror nog att jag kommer ta och läsa lite Go också!

En sista fråga: Jag läste någonstans om CUDA-programmering? Vad innebär det? Är det någon som sysslar med det eller är det bara jag som läste/minns fel?

Visa signatur

12c/24t 4.0GHz (Zen2) • 2x16GiB 3200MHz C14 • RTX 2080 FE 1965MHz 7000MHz • X570 I PW • Ghost S1 MKII

Permalänk
Inaktiv
Skrivet av Icte:

Väldigt intressant information, tror nog att jag kommer ta och läsa lite Go också!

En sista fråga: Jag läste någonstans om CUDA-programmering? Vad innebär det? Är det någon som sysslar med det eller är det bara jag som läste/minns fel?

Det är när man skriver särskild kod för att köra på nvidias grafikprocessorer, vilket i vissa applikationer (flertrådade) kan bli mycket snabbt.
För att välja språk skulle jag vilja säga ta vilket som, det spelar ingen större roll egentligen, principen är densamma. Är du verkligen intresserad spelar det ingen roll om det står C, ruby, matlab eller JavaScript i namnet på ditt kodspråk...

Permalänk
Medlem
Skrivet av anon81912:

Det är när man skriver särskild kod för att köra på nvidias grafikprocessorer, vilket i vissa applikationer (flertrådade) kan bli mycket snabbt.
För att välja språk skulle jag vilja säga ta vilket som, det spelar ingen större roll egentligen, principen är densamma. Är du verkligen intresserad spelar det ingen roll om det står C, ruby, matlab eller JavaScript i namnet på ditt kodspråk...

Aha, behöver man ha något speciellt program för att köra det skrivna programmet med grafikprocessorerna eller är det i själva koden man skriver kommando för att köra hela koden med grafikprocessorn?

Visa signatur

12c/24t 4.0GHz (Zen2) • 2x16GiB 3200MHz C14 • RTX 2080 FE 1965MHz 7000MHz • X570 I PW • Ghost S1 MKII

Permalänk
Inaktiv
Skrivet av Icte:

Aha, behöver man ha något speciellt program för att köra det skrivna programmet med grafikprocessorerna eller är det i själva koden man skriver kommando för att köra hela koden med grafikprocessorn?

Du behöver nog en särskild kompilator men du skriver nog koden troligtovis i C/C++ och använder särskilda metoder för att exempelvis göra FFT, utföra flera operationer parallellt ETC.

Permalänk
Medlem
Skrivet av anon81912:

Du behöver nog en särskild kompilator men du skriver nog koden troligtovis i C/C++ och använder särskilda metoder för att exempelvis göra FFT, utföra flera operationer parallellt ETC.

Nice! Ska nog ta och testa det med mitt GTX 780 någon dag

Visa signatur

12c/24t 4.0GHz (Zen2) • 2x16GiB 3200MHz C14 • RTX 2080 FE 1965MHz 7000MHz • X570 I PW • Ghost S1 MKII

Permalänk
Medlem

Go för backend och javascript för frontend är en riktigt fin kombination. Finns solskens historier där man gått från tex Ruby till Go och klarat sig på 2 servrar istället för 20 eftersom det är så mkt mer effektivt.

Permalänk
Datavetare
Skrivet av Icte:

Nice! Ska nog ta och testa det med mitt GTX 780 någon dag

För CUDA behöver du nVidias SDK som du hittar här.

Sedan angående språks popularitet, skulle gissa att GitHub till ganska stor del används av folk som skriver program för egen del och därmed kanske inte helt speglar hur vanligt det är att hitta språket ute på arbetsplatser. Sedan är inte antal rader kod världens bästa mått på popularitet, men det kan i alla fall vara en fingervisning på trender.

De språk som haft mest aktivitet (räknat i antal modifierade rader) är för mig lite överraskande (fast visar också att jag sitter väldigt långt från webbutveckling idag)

  1. 12G - JavaScript

  2. 7.2G - PHP

  3. 6.7G - Python

  4. 5.6G - C

  5. 5.4G - Java

  6. 5.2G - C++

  7. 2.3G - Ruby

  8. 2.1G - CSS (vet inte om jag skulle kalla detta ett programspråk, men 2.1 miljarder rader visar att det är välanvänt i alla fall)

  9. 1.7G - C#

  10. 1.4G - Shell script

Så den lista på de mest populära språken var nog väldigt mycket ur ett perspektiv som systemprogrammera, väldigt många jobbar idag med webbfrontend/backend och då måste man definitivt lägga med JavaScript (som med Node.js faktiskt är riktigt trevligt även på backend), Python och PHP.

Sedan finns lokala variationer, C# kommer först på plats 9, något som jag är rätt övertygade är ungefär rätt plats sett över hela världen. Men i Sverige är C# långt vanligare på arbetsmarknaden än i värden i genomsnitt, så här är det definitivt något man bör kunna. Samma sak så är C betydligt vanligare i övriga världen än i Sverige, något min arbetsgivare många gånger märkt när de letar folk.

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
Skrivet av =JoNaZ=:

Go för backend och javascript för frontend är en riktigt fin kombination. Finns solskens historier där man gått från tex Ruby till Go och klarat sig på 2 servrar istället för 20 eftersom det är så mkt mer effektivt.

Verkar som det börjar rulla på rejält för Go numera. Det fick väldigt mycket uppmärksamhet när det först lanserades för ca 5 år sedan (långt innan v1.0 alltså som kom våren 2012), men sedan har man inte alls sett lika mycket.

Går man nu in på GoDoc så hittar man ju bibliotek för i princip allt. Just för webb-backend finns det ju hur mycket som helst och dessa återfinns även på listan över de mest populära biblioteken.

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
Skrivet av Icte:

Du menar att jag förutom min mastersexamen ska ta en högskoleexamen i dataktenik? Låter ju inte så dumt.. Men jag ska kolla och se om det verkligen är 30 Hp jag saknar, vet inte hur de gör här på KTH nämligen

Wow. Visste att det fanns många språk men att det är så utbrett..

Vad tror du skulle vara bäst om man vill fokusera mest på hårdvarunära programmering, förutom C då? Finns det några specifika programmeringsspråk som är viktiga att lära sig i detta område?

Iaf på chalmers så står det på deras hemsida att man i snitt läser till 30hp beroende på vad man valt för individuella kurserna. Ett par kurser som är obligatoriska för Hing men inte flör Cing antar jag.

Kolla upp dom kurserna, sedan har du med all säkerhet redan kravet i antal poäng för matte, sedan är det ju ett par poäng i data samt uppsatsen så kan du plocka ut hing i datateknik Snacka med din syo, att knåda ihop en egen examen / dubbelexamen är inte så ovanligt.

Utav vad jag hört är det vanligt för ind.ek som vill nischa sig lite också osv.

Visa signatur

ASUS ROG Strix B650E-F Gaming WIFI | 2 TB Kingston Fury M.2 NVMe SSD | 32 GB Kingston DDR5 | Rysen 7 7800x3D | ASUS GeForce RTX 4070 12 GB | Fractal Design North

Permalänk
Medlem
Skrivet av Icte:

Du menar att jag förutom min mastersexamen ska ta en högskoleexamen i dataktenik? Låter ju inte så dumt.. Men jag ska kolla och se om det verkligen är 30 Hp jag saknar, vet inte hur de gör här på KTH nämligen

Wow. Visste att det fanns många språk men att det är så utbrett..

Vad tror du skulle vara bäst om man vill fokusera mest på hårdvarunära programmering, förutom C då? Finns det några specifika programmeringsspråk som är viktiga att lära sig i detta område?

Ska själv hoppa till elektro efter sommaren efter att ha gått ett år på D så ja kanske drar ett pm till dig med lite frågor

Visa signatur

ASUS ROG Strix B650E-F Gaming WIFI | 2 TB Kingston Fury M.2 NVMe SSD | 32 GB Kingston DDR5 | Rysen 7 7800x3D | ASUS GeForce RTX 4070 12 GB | Fractal Design North

Permalänk
Medlem

De språk jag stött på i min utbildning inom elektroteknik är: C, VHDL och Assembler och dessa skulle jag säga är väldigt hårdvarunära.
C++ är också bra att kunna.