Permalänk
Medlem

Programmeringsspråk nu?

Tjena!
Jag går gymnasiet och har precis läst klart Programmering B. I skolan har jag egentligen inte lärt mig så mycket programmering utan det är mest på fritiden. Hursomhelst så har jag tänkt läsa Civilingenjör Datateknik på LTU efter gymnasiet och efter högskolan (förmodligen) börja jobba som programmerare. Skulle då vilja utveckla fysikmotorer, simulatorer osv...
Vilket språk skulle ni rekommendera mig att köra? (Kör helst inte C#, VB eller .NET eftersom jag vill hålla mig ifrån Windows, och ja, jag har flera anledningar, men det handlar inte tråden om)
Hittils har jag jobbat i Python, Java, lite PHP och lite C++. Är det bara C++ som gäller i den branschen?

//J3H

Visa signatur

-Gaming: | NZXT Lexa S | Core i5 750 @ 3 GHz | XFX 5850 xXx | Asus P7P55D EVO | Corsair Dominator 4GB | NH-D14 | WD Caviar Black 750GB
-Programmering/grafiskt: | MacBook Pro 13.3" | SSD 128GB | Ubuntu 8.10

Permalänk
Medlem

Hej J3H.
Det finns en klistrad tråd här på forumet med namnet "Samlingstråd för Programmering och digitalt skapande. Läs innan du skapar en ny tråd!"... utan att ge utbrott för min förtryckta ilska säger jag bara lugnt och kontrollerat, läs den. Speciellt http://www.sweclockers.com/forum/10-programmering-och-digital...
Skulle du tröttna på den tråden finns det flera h*lvetestrådar om detta ämne.

Problemet med dessa trådar är att många bara skriver utifrån vad de anser och tycker utan att ha referenser och perspektiv. En del (någon enstaka, men man blir lika förbannad över det) rekommenderar språk som de tycker om utan att ha provat andra språk (hur kan man rekommendera ett språk utan att ha provat andra är för mig än idag ett mysterium). Givetvis finns det många bra och kvalificerade inlägg, så ta vara på dessa och strunta i de andra inläggen när du läser trådarna om detta ämne.

EDIT: Och en massa off-topic pajkastning brukar förekomma i trådarna!
EDIT2: Och en hel del kukmätningstävlingar!

Visa signatur

citera!

Permalänk
Medlem

Med tanke på det du skrev, jag gjorde den här tråden för att jag inte fick något ordentligt svar i någon av de trådarna!

Visa signatur

-Gaming: | NZXT Lexa S | Core i5 750 @ 3 GHz | XFX 5850 xXx | Asus P7P55D EVO | Corsair Dominator 4GB | NH-D14 | WD Caviar Black 750GB
-Programmering/grafiskt: | MacBook Pro 13.3" | SSD 128GB | Ubuntu 8.10

Permalänk
Medlem
Skrivet av J3H:

Är det bara C++ som gäller i den branschen?

Ja

Inte bara bara men mest bara

Visa signatur

Nämns inget annat så menar jag denna maskinen:
ASUS G53SW - Intel i7-2630QM @ 2.00Ghz - 12GB RAM - Nvidia GeForce GTX460M 1.5GB
Intel 510 SSD 128GB - Seagate Momentus XT SSHD 500GB - Windows 7 x64 Ultimate SP1
Chrome v38/latest, Chrome Canary och Firefox for development / debug

Permalänk
Medlem

Ahh, vad skönt, nu sjönk mitt blodtryck lite
Simulatorer och fysikmoterer är ett ganska brett område och olika språk är bra för att lösa olika fall. Vill du göra tunga beräkningar, t.ex. värmeöverföringar, gjuteri-simuleringar o.s.v., är det, som du säger, ett språk med bra prestanda att föredra. Men jag skulle säga att det viktiga är att du lär dig programmera bra oavsett språk. En ren vild gissning är att det är nog snarare matematiken som du ska oroa dig för.

Visa signatur

citera!

Permalänk
Medlem

Matten har jag inte haft något problem med än (har börjat med derivata i matte c), så den oroar jag mig inte för än.
Men som jag har förstått det så verkar C++ vara ett bra språk för området iaf.

Visa signatur

-Gaming: | NZXT Lexa S | Core i5 750 @ 3 GHz | XFX 5850 xXx | Asus P7P55D EVO | Corsair Dominator 4GB | NH-D14 | WD Caviar Black 750GB
-Programmering/grafiskt: | MacBook Pro 13.3" | SSD 128GB | Ubuntu 8.10

Permalänk

Vilka typer av simulatorer? Det finns en hel massa saker man kan simulera

Många använder MATLAB eller COMSOL för att göra fysiksimuleringar.

Permalänk
Medlem
Skrivet av VirtualIntent:

Vilka typer av simulatorer? Det finns en hel massa saker man kan simulera

Många använder MATLAB eller COMSOL för att göra fysiksimuleringar.

Notera dock att programmering i Matlab (och by extension COMSOL) inte är som programmering i vanliga programmeringsspråk. Matlab är mycket inriktat på vektor- och matrisoperationer (därav namnet, matrix laboratory) och något du i ett annat språk löser med nästlade loopar bör du oftast lösa med en matrismultiplikation i Matlab. Det tar en stund att komma fram till exakt vilka matrisoperationer du ska göra, men för lite tyngre beräkningar kan du spara säkert 80% beräkningstid. Loopar i Matlab är långsamt.

(COMSOL är i princip bara en glorifierad FEM-implementation; tillämpningarna är alltså något begränsade.)

Permalänk
Medlem
Skrivet av VirtualIntent:

Vilka typer av simulatorer? Det finns en hel massa saker man kan simulera

Många använder MATLAB eller COMSOL för att göra fysiksimuleringar.

Jag hade inte tänkt använda utan göra simulatorer, vilken sort vet jag inte riktigt men lutar åt fysik.

Visa signatur

-Gaming: | NZXT Lexa S | Core i5 750 @ 3 GHz | XFX 5850 xXx | Asus P7P55D EVO | Corsair Dominator 4GB | NH-D14 | WD Caviar Black 750GB
-Programmering/grafiskt: | MacBook Pro 13.3" | SSD 128GB | Ubuntu 8.10

Permalänk
Medlem

Jag läser sista året på datateknikutbildningen vid LTH och jag kan ju säga att det knappast är programmeringen man behöver oroa sig för enligt vad jag upplevt tillsammans med mina kurskamrater. De flesta får problem med matematiken, även jag som inte hade några större problem i gymnasiet (där jag läste spetsmatte och två högskoleförberedande mattekurser kallade matte f och g) har fått göra ett par omtentor. Tempot är ett helt annat än vad man är van vid i gymnasiet, speciellt om man där har lätt för det och inte tycker sig behöva plugga så mycket.

För att klara programmeringen i utbildningen behövde vi iaf. inga speciella förkunskaper då de i princip började på noll i första programmeringskursen. Med de kunskaper du har lär du klara den delen av utbildningen lätt.

Lycka tll.

Permalänk
Skrivet av J3H:

Jag hade inte tänkt använda utan göra simulatorer, vilken sort vet jag inte riktigt men lutar åt fysik.

Ah I see. Men det är säkert en bra grej om du vet hur man använder en fysiksimulator innan du gör en, så att du inte gör en som är sämre än vad som redan finns. Det är rätt komplicerade grejer.

Det verkar som att de flesta är ense om att C++ är prestandaspråket nummer ett. Men säg att du vill göra en distribuerad fysiksimulator som kör i ett datacenter (tänk Googles datacenter med tusentals datorer) så är det inte språket som är utmaningen utan att distribuera simuleringen. Eller om du vill köra simuleringen på GPU'er så är väl CUDA det bästa alternativet idag, och kanske nått i stil med C++ AMP i morgon (OpenCL har jag personligen väldigt liten tilltro till, men framtiden lär väl utvisa hur det är med den saken).

Permalänk
Medlem

Tack för alla svar! Eftersom alla verkar enade så fortsätter jag med C++

Visa signatur

-Gaming: | NZXT Lexa S | Core i5 750 @ 3 GHz | XFX 5850 xXx | Asus P7P55D EVO | Corsair Dominator 4GB | NH-D14 | WD Caviar Black 750GB
-Programmering/grafiskt: | MacBook Pro 13.3" | SSD 128GB | Ubuntu 8.10

Permalänk
Medlem

Det är kanon att fortsätta med C++ och bli skicklig på det, men den bästa rekommendationen för att bli en skicklig programmerare är att göra seriösa djupdyk in i flera språk. Fortsätt med ett djupdyk i C++ tills du känner att grunderna inte är ett problem längre. Gå då vidare till ett annat språk, gärna inom en annan paradigm, och gör ett djupdyk där.

Produktivitet är inget du behöver öva på ännu, det kommer med erfarenhet när du börjar jobba. Sikta istället på att vara mångsidig. Testa C# och F# (på Linux eller Mac OS X med Mono). Skriv några enklare program i LISP, Haskell och Scala. Var inte rädd för att inte komma någonvart, det viktigaste är mångfalden och att du gör seriösa djupdyk (ca 1-2 mån är då ett minimum beroende på tröskeln).

Permalänk
Medlem

Tack, men vilka användningsområden har Haskell i arbetslivet?

Visa signatur

-Gaming: | NZXT Lexa S | Core i5 750 @ 3 GHz | XFX 5850 xXx | Asus P7P55D EVO | Corsair Dominator 4GB | NH-D14 | WD Caviar Black 750GB
-Programmering/grafiskt: | MacBook Pro 13.3" | SSD 128GB | Ubuntu 8.10

Permalänk

Det är rätt osannolikt att du kommer att använda Haskell i sig självt i arbetslivet. Haskell är däremot ett av de renaste funktionella programmeringsspråken så poängen med att lära dig Haskell är att lära dig behärska paradigmen funktionell programmering (FP).

De flesta språk som du antagligen använder idag följer paradigmen imperativ programmering (IP).

Skillnaden mellan FP och IP är att i IP så har du variabler vars värde kan ändras (muteras) medan i FP så finns inte variabler utan man använder tilldelningar som inte går att ändra (oföränderliga värden).

Det låter antagligen först som en ganska korkad begränsning, men det för med sig många fördelar. En av de största anledningarna till varför FP har blivit populärt nu är att eftersom värden inte kan muteras så blir det väldigt enkelt att skriva kod som går att parallellisera, så att man får uppsnabbning på datorer med multicore processorer, eller på kluster av datorer.

Man kan skriva program i FP-stil även i språk som inte uttryckligen förhindrar mutering av variabler. Ett exempel är Googles programmeringsramverk MapReduce som är implementerat i C++, vars namn är inspirerat av funktionerna map och reduce som är vanliga i funktionell programmering.

Om du ska skriva kraftfulla fysiksimulatorer i framtiden så kommer du antagligen behöva lära dig om funktionell programmering, men mitt tips är ändå att lära dig C++ ordentligt först, det är en bra grund att stå på.

Permalänk
Medlem

Angående haskell, så får man tillägga att funktonell programmering dyker mer och mer upp i de traditionella imperativa språken, så att lära sig haskell är till fördel. Med haskell blir man tvungen att lära sig tänka på ett annat sätt som man har till nytta i de flesta andra språk. Nya c++-standarden (c++11) tar till och med in delar av funktionell programmering. Rå c++ är snabbare för små handoptimerade projekt, men Haskell har en stor fördel i stora projekt då ett program kan automatiskt utnyttja alla kärnor i processorn (ghc -threaded) och slutresultatet är därför också många gånger snabbare än ett standard c++ program som bara kör på en kärna. (Jag vet att man kan göra trådade c++ program och har skrivit sådant också, men nu menar jag inte det utan vad kompilatorn gör automatiskt för dig)

Permalänk
Medlem

Jag har jobbat som programmerare/systemutvecklare i ungefär tio år, sedan jag slutade på Datateknik på LTH. Du har redan fått flera bra tips i tråden, det bästa var det som påpekade att du ska lära dig paradigmerna, inte språken. Begriper du dig på ett språk inom en viss paradigm, så kommer du aldrig ha några problem att lära dig de andra. Det spelar egentligen ingen som helst roll om du börjar programmera objektorienterat med C++, Java, PHP, eller (som i mitt fall) Simula67. Lär dig hur de olika språken hanterar vissa saker på olika sätt (minneshantering är en bra sak att ha ordentlig koll på t.ex.). Lär dig framför allt vilka språk som passar bäst i olika situationer. Där finns egentligen inga givna regler, utan "passar bäst" kan dikteras av uppgiften, av tillgängligheten på verktyg, eller t.om. av företagets policy.

Ett ställe jag jobbade på använde t.ex. C++ för att det var företagspolicy, när C hade varit hundra gånger bättre. Det handlade om ett stort system, som tog ungefär en dag att bygga från scratch. Största delen av den tiden gick åt därför att kompilatorn bygger enormt mycket större datastrukturer när den kompilerar C++-kod än C-kod, vilket åt upp datorernas minne och gjorde att de fick swappa så håret hängde löst.
Nästa ställe använde istället C. Ungefär lika stor kodbas och samma typ av system, men där gick ett bygge på ett par timmar istället.

Ett sista tips: vad du än gör så ägna inte tid åt att försöka optimera din kod manuellt. Du har små chanser att göra ett bättre jobb än dagens hårt optimerande kompilatorer (faktum är att om du tar i för mycket kan du råka ut för att slutprodukten blir MINDRE optimerad än om du låtit kompilatorn göra hela jobbet). Och för guds skull, bli noggrann med att kommentera koden! Alldeles för få av mina kollegor genom åren har varit bra på det..

Permalänk
Avstängd

Jag tycker att själva programspråket är helt oviktigt. Det viktiga är att lära sig programmera. Om man väljer ett avancerat språk, såsom C++ så kommer den mesta av tiden gå åt till att jaga fel, och inte att programmera. En snubbe som kan programmera, kan enkelt gå över till C++ eller vilket språk han vill - för han kan programmera.

Därför skulle jag vänta med C++ till sist, när du kan programmera. Annars kommer du bara vara upptagen med att leta fel. För C++ är så bökigt så det blir massa fel. Jag tycker du ska börja med ett enkelt språk, som ändå duger till att göra stora system; t.ex. Java, Python eller C#. Helst Java eller C#, för de är ganska lika C++. Lär du dig programmera i Java, så kan ganska enkelt sen gå över till C++ och tvärtom.

En snubbe som ska bli kock, det första han gör, är det att lära sig laga en superavancerad maträtt som tar jättelång tid med många ingredienser? Nej, för då kommer han mest sitta och läsa i boken och fråga folk och aldrig komma till själva matlagningen. Det är bättre att börja lära sig laga enkla rätter, och när han kan laga mat, så kan han hoppa på den avancerade rätten och verkligen lyckas få till det.

I praktiska tester så visar sig Java ungefär lika snabbt som C++, och ibland är det ännu snabbare, och ibland är C++ snabbare. Men Java är väldigt enkelt, och påminner jätte mycket om C++. Typ som svenska och norska: väldigt lika.

Teoretiskt kan Java bli snabbare än C++ eftersom Java omkompilerar koden varje gång du kör t.ex en loop och kan därför optimera mer och mer. C++ kompilerar koden en gång och optimerar en gång, och kan inte göra alla optimeringar som Java kan. Varje gång du kör programmet lär sig Java mer och mer om själva datorn och kan optimera mer och mer. Detta kallas adaptivt kompilering. C++ har inte detta och optimerar en enda gång, thats it.

Men i spelbranschen så är det bara C++ som gäller. Men Java är så likt, att du kan enkelt byta språk. Men du kommer syssla mer med programmering om du lär dig Java än C++, för i C++ kommer du bara leta buggar och inte få en helhetsbild av vad programmering går ut på. Du blir fast i små detaljer hela tiden. "jag vill göra detta, hur gör jag det i C++?" Sen letar du i böcker och googlar i 5 timmar och lyckas till slut göra den lilla grejen. Det var hela dagen det. Men i Java är det bara att göra det, sen kan du göra nästa grej - mycket enklare.

Det är lite grand som assembler; det är snabbast, men vem jobbar med det idag? Det tar alldeles för lång tid att göra nåt. Efter en dag, kanske du gjort en liten liten grej. Efter ett år, kanske du gjort ett halvstort program. Men i Java hade du gjort 3 stora program på samma tid och lärt dig mer om programmering.

Om du ska bli civ.ing. så är matten det största problemet. De som hoppar av, gör det pga matten. Det fanns flera snubbar som var grymma på programmering i min klass, men inte klarade av all matte, så de hoppade av civ.ing. utbildningen. Om du faller, så blir det pga matten. Inte programmeringen - den brukar alla klara.