Permalänk
Medlem

Lära mig C++

Hej!

Mitt jobb kommer att omskola mig till programmerare, jobbar idag som maskiningenjör, och tänkte själv se om jag kan köra igenom grunderna på någon web-baserad plattform.
Någon som vet en bra online skola för C++?

Har kört Python på Hyperskill(jetbrain) och gillar verkligen deras upplägg, enkelt och strukturerad utlärningsplattform.
Skulle gärna vilja hitta något liknande på nätet för C++.

Tack!

Permalänk
Medlem

C++ tar lite tid att lära sig. Jag hade testat att bygga lite roliga applikationer i det, som tetris eller liknande, när du börjar lära dig. Och hänga mycket på SO och Google

Permalänk
Medlem

C++, inte C#? Är det det sistnämnda så är Bob Tabors videoserie riktigt bra: https://channel9.msdn.com/Series/CSharp-Fundamentals-for-Abso...

Permalänk
Medlem

C++ är ett omfattande språk med många egenskaper att lära sig. Det är inte sandboxat och minnesskyddat utan du kommer att jobba direkt mot minnet. Dvs. du kan fucka upp big time om du gör fel. Av såna skäl tycker jag att du skall gå till nån större etablera sajt, kanske CodeAcademy eller nån betalsajt. Du kommer inte att lära dig C++ på en nivå där du kan jobba med språket på ett par veckor. Men det är skitkul när man kan det.

Permalänk
Medlem
Skrivet av danneee:

C++, inte C#? Är det det sistnämnda så är Bob Tabors videoserie riktigt bra: https://channel9.msdn.com/Series/CSharp-Fundamentals-for-Abso...

Nope, C++ är det som gäller

Skrivet av Oldskool:

C++ är ett omfattande språk med många egenskaper att lära sig. Det är inte sandboxat och minnesskyddat utan du kommer att jobba direkt mot minnet. Dvs. du kan fucka upp big time om du gör fel. Av såna skäl tycker jag att du skall gå till nån större etablera sajt, kanske CodeAcademy eller nån betalsajt. Du kommer inte att lära dig C++ på en nivå där du kan jobba med språket på ett par veckor. Men det är skitkul när man kan det.

Det låter lite lurigt men bra att lägga på minnet
Ja det är ju typ Codeacademy jag tänkte, hur är upplägget där?
Hyperskill(Jetbrain) funkade skitbra för mig, det är så jag vill lära mig

Tack för svaren!

Permalänk
Medlem

Vad exakt ska du med programmering till? Man slänger sig ofta med C++ när man egentligen menar C.
C# är ett mycket moderna och trevligare språk än C++.

Permalänk
Datavetare
Skrivet av Herr Kantarell:

Vad exakt ska du med programmering till? Man slänger sig ofta med C++ när man egentligen menar C.
C# är ett mycket moderna och trevligare språk än C++.

Vad är det som är "modernare" i C# jämfört med C++20? Tar vi ett favoritämne på SweClockers: effektivt utnyttja många CPU-kärnor i ett program så skulle jag säga att C++20 är bland det absolut mest moderna du kan hitta.

Språk är optimala för olika domäner, C++ ihop med Rust är relativt unika i sin "zero cost abstraction" design (C är mer "minimal cost", där har man skippat abstraktions-delen om man inte menar "portabel assembler").

Vissa saker är absolut lättare att göra i andra språk, C, C++ och Rust är exempel på språk designade för systemprogrammering och är det inte det man gör finns antagligen bättre alternativ.

För att svara TS: själv tycker jag dessa två steg är en bra grund för att lära sig ett nytt språk, om man redan kan programmera.

  • läs en bok som beskriver språket, det är svårt att ens inse vilka frågor man bör ställa innan man får grunderna serverade

  • försök hitta ett par rejält begränsade problem, lös dem i språket (det lär ge den en rad frågor du behöver leta fram svaret på). I fallet där jag inte haft något konkret att ta tag i tycker jag saker som t.ex. att lösa saker i Advent of Code fungerar

Har tyvärr ingen bra rekommendation för en bra bok att lära sig C++ 2021, lärde mig C++ 1992 så de böckerna jag använda är inte så relevanta längre. Kritiskt här att boken beskriver "modern" C++, d.v.s. C++11 och senare. "Modern" C++ kan i många lägen se ut som ett annat språk jämfört med "historisk" C++.

Permalänk
Medlem
Skrivet av Herr Kantarell:

Vad exakt ska du med programmering till? Man slänger sig ofta med C++ när man egentligen menar C.
C# är ett mycket moderna och trevligare språk än C++.

C# är inte alls modernare, har du hängt med i nyheterna sedan C11++ ?
Vilket språk man använder beror ju på vad man skall jobba med, vill du ha en lastbil eller en segelbåt ?
C++ har gått upp i använding betydligt de senaste 5-10 åren pga edge computing och liknande, i dag är det nog ungefär lika många som lär sig C++ som C#

Permalänk
Medlem
Skrivet av Yoshman:

Vad är det som är "modernare" i C# jämfört med C++20? Tar vi ett favoritämne på SweClockers: effektivt utnyttja många CPU-kärnor i ett program så skulle jag säga att C++20 är bland det absolut mest moderna du kan hitta.

Språk är optimala för olika domäner, C++ ihop med Rust är relativt unika i sin "zero cost abstraction" design (C är mer "minimal cost", där har man skippat abstraktions-delen om man inte menar "portabel assembler").

Vissa saker är absolut lättare att göra i andra språk, C, C++ och Rust är exempel på språk designade för systemprogrammering och är det inte det man gör finns antagligen bättre alternativ.

För att svara TS: själv tycker jag dessa två steg är en bra grund för att lära sig ett nytt språk, om man redan kan programmera.

  • läs en bok som beskriver språket, det är svårt att ens inse vilka frågor man bör ställa innan man får grunderna serverade

  • försök hitta ett par rejält begränsade problem, lös dem i språket (det lär ge den en rad frågor du behöver leta fram svaret på). I fallet där jag inte haft något konkret att ta tag i tycker jag saker som t.ex. att lösa saker i Advent of Code fungerar

Har tyvärr ingen bra rekommendation för en bra bok att lära sig C++ 2021, lärde mig C++ 1992 så de böckerna jag använda är inte så relevanta längre. Kritiskt här att boken beskriver "modern" C++, d.v.s. C++11 och senare. "Modern" C++ kan i många lägen se ut som ett annat språk jämfört med "historisk" C++.

Jag ska erkänna att jag inte har koll på t.ex. C++20 (eller ens 14 för den delen) och det har hänt väldigt mycket.

Programmerar just nu ett program som är både gjort i C++ och C och stör mig varje gång jag går in och ändrar i C++ delen.
Det är lätt att ställa till det i C++ med minnesläckor m.m. I C har man full kontroll men måste självklart ha extra kod för allt som kanske är trivial (och bakom "huven") på andra språk.

Jag antar att det är en personlig preferens men JAVA och C# känns mycket mer logiskt uppbyggt med syntax m.m.

Av allt jag programmerat är det nog 60% C, 20% JAVA, 10% python 5% C++ och 5% C#

Så ja fel av mig att säga att C++ inte är modernt. Det tar jag tillbaka.

Permalänk
Medlem

Jag jobbar med både C++ (dock ej 20) och C# och jag skulle säga att C# är bra mycket enklare och modernare på en hel del sätt. Men det beror ju på vad du ska ha det till. På mitt jobb använder jag C++ till beräkningsmodeller, medan jag gör applikationer i C#.

Permalänk
Medlem
Skrivet av KGB91:

Jag jobbar med både C++ (dock ej 20) och C# och jag skulle säga att C# är bra mycket enklare och modernare på en hel del sätt. Men det beror ju på vad du ska ha det till. På mitt jobb använder jag C++ till beräkningsmodeller, medan jag gör applikationer i C#.

Det är klart att C# är enklare. Det är enklare att köra radiobil på Gröna Lund än att köra en personbil i stadstrafik. Sandboxad mijö vs realtidsmiljö. Men språken har ju olika ändamål och olika syften. C++ finns där när man faktiskt behöver har hårdvarukontroll över saker och ting, vilket C¤ inte ger dig. Skall du göra en sak och både språken är möjliga är C# oftast att föredra. Men det finns förvånansvärt mycket jobb som C# inte fixar, när vi pratar om embedded, edge, AI osv. Däremot så är C# inte modernare. C++ har genomgått en enorm utveckling sedan C++98 så du är nog inte up-to-date när det gäller C++ om du tror det.

Permalänk
Medlem

kan tipsa om "the cherno" på youtube. Han har en c++-series, bra genomgång av alla basics.

Permalänk
Medlem
Skrivet av Herr Kantarell:

Programmerar just nu ett program som är både gjort i C++ och C och stör mig varje gång jag går in och ändrar i C++ delen.
Det är lätt att ställa till det i C++ med minnesläckor m.m. I C har man full kontroll men måste självklart ha extra kod för allt som kanske är trivial (och bakom "huven") på andra språk.

Minnesläckor är mycket av ett löst problem i modern C++ med smarta pekare och RAII, använder man new/delete i sin kod så är det en varningsklocka att något är fel. Så tycker du att det är lätt att läcka minne i koden du arbetar med så handlar det troligtvis om gammaldags C++ som inte var mycket bättre än C när det gällde minneshantering.

Permalänk
Medlem

Tycker C++ är ett utmärkt val om du verkligen ska gå in för att lära dig programmering. Du tvingas lära dig mycket inom programmering med C++. Med det sagt finns det otroligt mycket funktioner och du kommer inte på kort tid kunna lära dig allt. Se till att du lär dig "modern" C++, alltså C++11 eller senare, då detta är ett klart modernare språk. Det är stor, stor skillnad mellan c++98 (tex.) och C++11 och att C++ har ett lite dåligt rykte beror gissningsvis på att stora delar av industrin programmerar i och kan äldre versioner av c++. Att C#, Java eller Python skulle vara enklare stämmer såklart, men i det långa loppet tror jag att du gynnas av att lära dig C++ då det innehåller så pass mycket mer. Det är lätt att gå från C++ till Java eller C#, men det är svårare att gå åt andra hållet.

C++ primer av Lippman är en bok jag har läst bitar av och tyckt vart bra. Vet inte så mycket om onlineresurser tyvärr, men lycka till med lärandet och se till att ha kul!

Permalänk
Medlem

Tänker att jag fyller på lite på det sassa46 skrev, var lite långsam i mitt skrivande :P. Jag kan rekommendera C++ Primer av Stanley Lippman som första C++ bok, har själv använt den som egen kurslitteratur när jag läste C++ och har även rekommenderat den för mina studenter så sent som i höstas. Den är uppbyggd med en väldigt bra grundstruktur (hur man hanterar IO, kontrollstrukturer, loopar, mm) och har många C++ specifika element (objektorientering i C++, templates, standardbiblioteket). Ett minus med boken är att senaste version hanterar endast upp till C++11 men i helhet så ger den dig alla grunder för modern C++ (C++11 var den stora uppdateringen som bygger mycket av det som används i modern C++, observera att många företag använder så gamla versioner som C++98 så 11 kan vara väldigt modernt beroende på arbetsplats). Det finns några detaljer som skiljer sig men grunderna är i princip desamma, det som kan vara intressant att komplettera med är det uppdaterade standardbiblioteket. OBS att det är stor skillnad hur standardbiblioteket används mellan C++17 och C++20.

Några ytterligare rekommendationer är en kurs/distanskurs på något universitet, kolla gärna hemsidorna efter labbserier och sen vill jag bara lyfta fram cppreference.com som är en väldigt tekniskt tung men en väldigt utförlig beskrivning på C++ standarden, kanske inte relevant nu i början men absolut relevant sen när du jobbar med standardbiblioteket.

Permalänk
Medlem

Kul, vilket engagemang från alla!

Tack för alla tips.
Finns det någon mer som har erfarenhet av onlinekurser? Typ som hyperskill?
Jag är väldigt kompatibel med det typen av inlärning.

En annan fråga, snusar programmerare eller är det bara vi maskiningenjörer som gör det?

Permalänk
Medlem
Skrivet av Oldskool:

Det är klart att C# är enklare. Det är enklare att köra radiobil på Gröna Lund än att köra en personbil i stadstrafik. Sandboxad mijö vs realtidsmiljö. Men språken har ju olika ändamål och olika syften. C++ finns där när man faktiskt behöver har hårdvarukontroll över saker och ting, vilket C¤ inte ger dig. Skall du göra en sak och både språken är möjliga är C# oftast att föredra. Men det finns förvånansvärt mycket jobb som C# inte fixar, när vi pratar om embedded, edge, AI osv. Däremot så är C# inte modernare. C++ har genomgått en enorm utveckling sedan C++98 så du är nog inte up-to-date när det gäller C++ om du tror det.

Det beror ju lite på vad som menas med modernt. I modernt lägger jag in enklare, slippa headerfiler etc. Men resten håller jag helt med dig om.

Permalänk
Medlem
Skrivet av KGB91:

Det beror ju lite på vad som menas med modernt. I modernt lägger jag in enklare, slippa headerfiler etc. Men resten håller jag helt med dig om.

C++20 introducerade ett modulsystem som till största delen ersätter behovet av headerfiler. Stödet för moduler i kompilatorerna är dock fortfarande ett pågående arbete och kanske inte helt smärtfritt att använda.

Permalänk
Medlem
Skrivet av perost:

C++20 introducerade ett modulsystem som till största delen ersätter behovet av headerfiler. Stödet för moduler i kompilatorerna är dock fortfarande ett pågående arbete och kanske inte helt smärtfritt att använda.

Aha jag har inte jobbat med C++20. Får kolla upp det, isf är det ju jättebra.

Permalänk
Medlem
Skrivet av KGB91:

Det beror ju lite på vad som menas med modernt. I modernt lägger jag in enklare, slippa headerfiler etc. Men resten håller jag helt med dig om.

Enklare rakt av kan ju inte betyda modernare. Det finns enkla språk från 80-talet som inte används idag, för de är alldeles för begränsade.
Både C++ och C# har lagt in stöd för (nåja mer eller mindre) moderna programmeringskoncept så som abstrakt programmering, generiska typer, kontrakt-baserad programmering, lambda-uttryck osv för att nämna några saker. "Constraints and concepts" Conatraints and concepts är exempel på riktigt användbara och moderna programmeringkoncept i C++20 som jag inte känner till att C# har någon motsvarighet till riktigt.. Å andra sidan är jag säker på att någon C# fantom nog skulle kunna hitta något modern C# koncept som C++ inte har motsvarighet till. Så både är moderna på olika sätt.

Det jag vänder mig mot är tanken på att C++ skulle vara onödigt krångligt eller gammaldags utan något skäl annat än att grundades tidigare. Så där var det 2003. I modern C++ är saker och ting ibland krångligare för att man helt enkelt inte är i sandbox utan måste ta eget ansvar som programmerare för att vissa saker skall ges rätt stöd. Framförallt används språken till olika saker.

På mitt gamla jobb hade vi en uråldrig C++ dll som användes för att publicera data över internet som andra servicar konsumerade. När vi skrev om dll:en till C# ökade minnesanvändningen på servern med en faktor över 100, och CPU-lasten med en faktor 10. Och det enda vi hade gjort var att porta anropen till C#. Vi hade helt enkelt inte råd med så mycket serverminne så vi fick fortsätta med vår native dll.

Permalänk
Medlem

Fick svaret att det är minst C++14.

Kommer prova CodeAcademy, känns vettigt efter att jag kika på det.

Tack för all input

Permalänk
Medlem
Skrivet av Oldskool:

Enklare rakt av kan ju inte betyda modernare. Det finns enkla språk från 80-talet som inte används idag, för de är alldeles för begränsade.
Både C++ och C# har lagt in stöd för (nåja mer eller mindre) moderna programmeringskoncept så som abstrakt programmering, generiska typer, kontrakt-baserad programmering, lambda-uttryck osv för att nämna några saker. "Constraints and concepts" Conatraints and concepts är exempel på riktigt användbara och moderna programmeringkoncept i C++20 som jag inte känner till att C# har någon motsvarighet till riktigt.. Å andra sidan är jag säker på att någon C# fantom nog skulle kunna hitta något modern C# koncept som C++ inte har motsvarighet till. Så både är moderna på olika sätt.

Det jag vänder mig mot är tanken på att C++ skulle vara onödigt krångligt eller gammaldags utan något skäl annat än att grundades tidigare. Så där var det 2003. I modern C++ är saker och ting ibland krångligare för att man helt enkelt inte är i sandbox utan måste ta eget ansvar som programmerare för att vissa saker skall ges rätt stöd. Framförallt används språken till olika saker.

På mitt gamla jobb hade vi en uråldrig C++ dll som användes för att publicera data över internet som andra servicar konsumerade. När vi skrev om dll:en till C# ökade minnesanvändningen på servern med en faktor över 100, och CPU-lasten med en faktor 10. Och det enda vi hade gjort var att porta anropen till C#. Vi hade helt enkelt inte råd med så mycket serverminne så vi fick fortsätta med vår native dll.

Jovisst, det är ju en trade-off mellan hastighet och bekvämlighet. Vi har det liknande på mitt jobb med riktigt tunga statistiska modeller, men ganska ofta trumfar bekvämlighet hastighet i takt med att datorerna får mer och mer kraft.

Jag bygget heller matematiska modeller i C++ än C# av fler skäl, men jag tror inte man ska underskatta att ha ett relativt enkelt språk som C# som man snabbt kan bygga programvara i.

C++20 kan jag inte som sagt. Det är möjligt att det hänt en hel del sen C++17.

Permalänk
Medlem

Lycka till med lärandet, jag har nog undervisat några tusen studenter i OO/C++ på 90-talet men har övergått till Python som är lämpligare för AI som jag håller på med nu (jag undervisar även maskiningenjörer och då får de köra Matlab ). Det är ett kraftfullt men också komplext språk med många chanser att göra fel men jag hoppas att det är bättre numera.
Brukar följa https://www.bfilipek.com/ och idag tipsade han om en ny C++20-bok (rabattkoden gäller till 14 mars/50 pers); https://leanpub.com/c20/c/O5vOMJ1UDmx1
Lycka till!

Permalänk
Medlem
Skrivet av KGB91:

Jovisst, det är ju en trade-off mellan hastighet och bekvämlighet. Vi har det liknande på mitt jobb med riktigt tunga statistiska modeller, men ganska ofta trumfar bekvämlighet hastighet i takt med att datorerna får mer och mer kraft.

Jag bygget heller matematiska modeller i C++ än C# av fler skäl, men jag tror inte man ska underskatta att ha ett relativt enkelt språk som C# som man snabbt kan bygga programvara i.

C++20 kan jag inte som sagt. Det är möjligt att det hänt en hel del sen C++17.

Det låter som att vi jobbar med lite liknande saker, jag jobbar med bland annat signalbehandling, kalmanfilter och tensorkalkyl. Jag hade inte haft någonting emot att skriva min kod i C# rent generellt, men min bransch innebär särskilda begränsningar:
* Det finns inga windows-datorer på jobbet. Utvecklingsmiljön, systemet osv, allt körs på *nix.
* Exekveringstiden. Alla beräkningar måste vara helt klara inom några få millisekunder, annars är data för gammalt och av inget värde längre. Och jag måste kunna helt förlita mig på att det aldrig kan hända att det skulle kunna ta mer än säg 10 ms, oavsett indata eller hur många gånger jag kör processerna.
* Minnesanvändningen. I mitt fall så måste jag säkert vet att det inte kan hända att programmet inte kan behöva allokera en byte extra, från det att processen startats. Allt minne behöver allokeras vid processtart.

Så förutsättningarna är olika i olika branscher och även om en hammare är jättebra att slå i en spik med så kan man ibland behöva en skruvmejsel istället.

Permalänk
Medlem
Skrivet av Oldskool:

Det låter som att vi jobbar med lite liknande saker, jag jobbar med bland annat signalbehandling, kalmanfilter och tensorkalkyl. Jag hade inte haft någonting emot att skriva min kod i C# rent generellt, men min bransch innebär särskilda begränsningar:
* Det finns inga windows-datorer på jobbet. Utvecklingsmiljön, systemet osv, allt körs på *nix.
* Exekveringstiden. Alla beräkningar måste vara helt klara inom några få millisekunder, annars är data för gammalt och av inget värde längre. Och jag måste kunna helt förlita mig på att det aldrig kan hända att det skulle kunna ta mer än säg 10 ms, oavsett indata eller hur många gånger jag kör processerna.
* Minnesanvändningen. I mitt fall så måste jag säkert vet att det inte kan hända att programmet inte kan behöva allokera en byte extra, från det att processen startats. Allt minne behöver allokeras vid processtart.

Så förutsättningarna är olika i olika branscher och även om en hammare är jättebra att slå i en spik med så kan man ibland behöva en skruvmejsel istället.

I mitt fall handlar det om mikrosimuleringsmodeller som ska köra väldigt många patienter under långt tid och för flera olika behandlingar med många olika parametrar att ta hänsyn till. Minnet är inget större problem, men tidsåtgången är det. Framförallt eftersom vi inte vid vilka datorer våra kunder har - de kan ha nån skruttig laptop som de vill köra modellerna på, men de ska funka hyfsat fort ändå.

Det sista håller jag helt och hållet med om! Oavsett är ju C++ jättebra på så vis att om man kan det så kan man lära sig de flesta andra språk utan större problem om man bara pluggar in lite syntax.

Permalänk
Medlem
Skrivet av nutte50:

Lycka till med lärandet, jag har nog undervisat några tusen studenter i OO/C++ på 90-talet men har övergått till Python som är lämpligare för AI som jag håller på med nu (jag undervisar även maskiningenjörer och då får de köra Matlab ). Det är ett kraftfullt men också komplext språk med många chanser att göra fel men jag hoppas att det är bättre numera.
Brukar följa https://www.bfilipek.com/ och idag tipsade han om en ny C++20-bok (rabattkoden gäller till 14 mars/50 pers); https://leanpub.com/c20/c/O5vOMJ1UDmx1
Lycka till!

Blev faktiskt lite triggad av den här tråden. Ska nog signa upp på den boken

Permalänk
Medlem

Jag har just nu lånat "C++ crash course" av Josh Lospinoso. Den är kanske för avancerad för en nybörjare men någorlunda aktuell upp till och med C++17. Alla exempel ligger på nätet.
Tyvärr inget om Open MP. Någon annan som sett boken?

Permalänk
Medlem
Skrivet av Greyguy1948:

Jag har just nu lånat "C++ crash course" av Josh Lospinoso. Den är kanske för avancerad för en nybörjare men någorlunda aktuell upp till och med C++17. Alla exempel ligger på nätet.
Tyvärr inget om Open MP. Någon annan som sett boken?

Mer om boken här:
C++ Crash Course på nätet
Där finns även en zip med koder.
Det mesta kräver std++17 och fungerar på tex MacMini med M1.