Permalänk
Skrivet av Yoshman:

Allt det skrivet: tycker ändå folk ofta har kvar fördomar om C++ som inte längre är sant. Jobbar man i C++11/14 på "rätt" sätt så kan jag inte se hur det skulle vara mer komplicerat än Python.

Även om det finns stöd för listor, tupler och strängar i C++ så är det uppenbart att de lades till i efterhand. Funktionsmässigt må de vara ekvivalenta med motsvarande funktionalitet i Python, men syntaxen är inte nybörjarvänlig. Nya användningen av auto och moderna iterationer har gjort underverk för att städa upp i template-träsket, men det kommer inte i närheten av hur smidigt det är att använda listor, tupler och strängar i Python där språk och notation designats med dem i fokus.

På din och min nivå spelar vilket (imperativt) språk vi programmerar i inte någon roll. När vi brutit ner problemet i hanterbara bitar handlar det mera om frågor i stil med "vilken syntax använder språket X för en map/dict/associative array" och sedan skriver vi så som språket kräver. Vi har ju redan löst problemet. För nybörjaren är språket i sig en del av problemet och en bökig syntax gör språket till ett större problem. Jag tror att det är lättare att lära sig programmera i ett språk som har en mindre krånglig syntax. Att Python inte är lämpat för alla uppgifter är vi helt överens om, men jag tror fortfarande att det kommer gå fortare att lära sig programmera om man väljer Python istället för C++. Vill du kalla det fördomar?

Permalänk
Medlem

Tror den här ändå är rätt nice.
Bara köra rätt i browsern och det är bara att följa med i flowet och förhoppningsvis lär man sig nått:

https://www.codecademy.com/en/tracks/python

Permalänk
Medlem

Jag får slå ett slag för C istället för C++. Ska du läsa datateknik så rekommenderar jag det ännu mer, främst pga att du lär dig datatyper och minneshantering på lågnivå. C++ är väldigt komplext kort förklarat. Du kan programmera på lågnivå i C++ också givetvis men det är lätt att halka in på biblioteksfunktioner istället medans lär du dig C så är det enklare att senare gå till biblioteksfunktioner för strängar etc för du vet hur de fungerar under huven (och varför du får konstiga fel med NUL-terminering etc)

Visa signatur

Citera mig för svar.
Arch Linux

Permalänk
Datavetare
Skrivet av Ingetledigtnamn:

Även om det finns stöd för listor, tupler och strängar i C++ så är det uppenbart att de lades till i efterhand. Funktionsmässigt må de vara ekvivalenta med motsvarande funktionalitet i Python, men syntaxen är inte nybörjarvänlig. Nya användningen av auto och moderna iterationer har gjort underverk för att städa upp i template-träsket, men det kommer inte i närheten av hur smidigt det är att använda listor, tupler och strängar i Python där språk och notation designats med dem i fokus.

På din och min nivå spelar vilket (imperativt) språk vi programmerar i inte någon roll. När vi brutit ner problemet i hanterbara bitar handlar det mera om frågor i stil med "vilken syntax använder språket X för en map/dict/associative array" och sedan skriver vi så som språket kräver. Vi har ju redan löst problemet. För nybörjaren är språket i sig en del av problemet och en bökig syntax gör språket till ett större problem. Jag tror att det är lättare att lära sig programmera i ett språk som har en mindre krånglig syntax. Att Python inte är lämpat för alla uppgifter är vi helt överens om, men jag tror fortfarande att det kommer gå fortare att lära sig programmera om man väljer Python istället för C++. Vill du kalla det fördomar?

Skapa en lista med strängar i Python

# här måste jag senare komma ihåg att 'aList' är en lista med strängar aList = ["kalle", "pelle", "olle"]

Skapa en lista med strängar i C++11

// här måste jag i.o.f.s. explicit tala om att det är en lista med strängar // gör jag senare ett misstag så påminner kompilatorn om vad som gäller list<string> aList{"kalle", "pelle", "olle"};

I inget av fallen behöver man bry sig om minneshantering.

Den skillnaden kan inte var relevant, vidare så kommer Python gladeligen acceptera

aList = ["kalle", "pelle", "olle", 123]

vilket i de flesta fall knappast är vad man ville medan motsvarande i C++11 kommer ge kompileringsfel som upplyser om att något inte står rätt till

list<string> aList{"kalle", "pelle", "olle", 123}; // kompileringsfel

Vid uppackning och användning av specifika tuplefält är det relativt enkelt att skjuta sig i foten genom att packa upp till en annan variabel man tänkt sig, något som igen C++11 fångar redan i kompileringssteget om de olika fälten har olika typ.

Vidare betyder statisk typning att man som nybörjare kan få långt mer hjälp från sin IDE i form av Intellisense. Refactoring kanske inte är det första man tänker på för nybörjare, men det kan också vara användbart allt eftersom nybörjaren lär sig lämplig namngivning, hur vettiga signaturer till funktioner bör se ut osv. Inget av detta går att göra riktigt tillförlitligt i dynamiskt typade språk, en av huvudanledningarna till att Microsoft lagt så mycket resurser på TypeScript är att kunna erbjuda deras typiska VisualStudio-upplevelse även för de områden där man i princip måste köra JavaScript (webb-front-end).

Kör man sina C++ (eller C#/Java/Go) program i en debugger så får man typiskt en långt mer överskådlig bild över variabler som är aktiva, tillstånd på variabler, klassinstanser och egendefinierade datatyper. Man kan enkelt köra koden rad för rad och se hur tillståndet förändras. Detta går att göra i Python, men IDE-stödet är typiskt betydligt mer yxigt.

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

Kolla på Udemy.com, de har massor med kurser, både gratis och sådana som kostar.

https://www.udemy.com/courses/search/?q=C%2B%2B

Även de dyra kurserna går oftast att få billigt om man har en kampanjkod.

EDIT: Såg nu att de har en kampanj där alla betalkurser kostar 17 euro, oavsett ordinarie pris. Läge att fynda om man hittar nåt intressant.

Kampanj-info
Visa signatur

Better to have and not need, than to need and not have.

Permalänk
Skrivet av RedRetro:

Om det är Datateknik på KTH så är det Java som gäller under första året Så skulle tipsa dig att satsa på ett språk nu i början. När du känner att du behärskar det språket väl är det ofta ett väldigt kort steg till andra språk inom samma paradigm. C++ kan du läsa som valbar kurs i 3:an på KTH, om du hellre känner att du läser det som en kurs än pular med det vid sidan av studierna. Stort lycka till med dina studier (och har du några frågor angående just Datateknik på KTH svarar jag mer än gärna på dem i PM)!

Jaså? Jag känner en nyexad teknisk fysiker från KTH, och han har aldrig läst C++. Han kunde nästan bara Python. Jag vet att flera universitet gått över till Python från Java. Kanske även nybörjarkurserna i KTH?

Permalänk
Hedersmedlem
Skrivet av MichaelJackson:

Jaså? Jag känner en nyexad teknisk fysiker från KTH, och han har aldrig läst C++.

Valbar för D var det väl, inte obligatorisk för F.

Permalänk

@Mikael07: Hur snabbt kan en C++ människa lära sig CUDA tycker du?

Jag har tittat lite i CUDA.. om man bara hade mer tid för det.... och om man hade ett passande jobb för det med.

Permalänk
Medlem
Skrivet av MichaelJackson:

Jaså? Jag känner en nyexad teknisk fysiker från KTH, och han har aldrig läst C++. Han kunde nästan bara Python. Jag vet att flera universitet gått över till Python från Java. Kanske även nybörjarkurserna i KTH?

Som jag skrev så är C++ en valbar kurs från och med årskurs 3 och alltså inte obligatorisk. Jag läser även Civ. Ing. Datateknik och inte Teknisk Fysik Civ. Ing. Datateknik kör precis som jag skrev fortfarande på Java som nybörjarkurs.

Visa signatur

Citera för svar!

Stationär: Fractal Design Define R6 | Asus Z370-P | Intel i7 8700k @ 3.7 Ghz | Corsair Vengeance LPX 32GB CL15 @ 3000 Mhz | Asus STRIX GTX960 4GB | Fractal Design Celsius S24 | 5 TB HDD | 250GB SSD (Samsung 850 EVO), 128GB SSD (Crucial M4) | Corsair HX 850W | W10
Bärbar: Sony Vaio Pro 13.3" | i7-4500U | 8GB RAM | 256GB SSD | Ubuntu

Permalänk
Medlem
Skrivet av ExoCranial:

@Mikael07: Hur snabbt kan en C++ människa lära sig CUDA tycker du?

Jag har tittat lite i CUDA.. om man bara hade mer tid för det.... och om man hade ett passande jobb för det med.

Det behöver inte ta så lång tid för grunderna. Det viktigaste att först lära sig är hur data ska struktureras för optimal accesstid. Det brukar skilja sig från vad som är bäst för en CPU-baserad lösning. 3d-koordinater lagras fördelaktigt på GPU'n som {xxxx...,yyyy...,zzzz....} istället för {xyz,xyz,xyz,...}. Sen är det bara detaljer Det hjälper om man har erfarenhet av parallell programering såklart. I senaste versionen (7) har dom stöd för en del C++11 funktionalitet, så det är trevligt!
Du kan använda GPU-acceleration i enkla fall utan att direkt programmera i CUDA, genom att använda det medföljande biblioteket thrust. Det är tänkt att fungera som standardbiblioteket, fast för GPU (och CPU). Transforms, algoritmer, etc.

Permalänk

@Mikael07: Tack för svar..

Permalänk
Medlem
Skrivet av ExoCranial:

@Mikael07: Tack för svar..

Varsågod. Jag ska förtydliga och säga att CUDA i sig är inte så himla knepigt, språkmässigt. Däremot kan ju vissa lösningar bli väldigt svåra att implementera, p.g.a. att de måste lösas parallellt. Men det är givetvis en generell problematik som kommer med parallell programmering, och inte kopplat till CUDA som språk.