Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Jul 2014

C++ eller Python?

Tjena,

Ska gå en programmerings kurs och vi får välja om vi ska köra Python eller C++. Vilken rekommenderar ni?

Vilket är enklast att använda, enligt läraren är Python enklare.

Trädvy Permalänk
Medlem
Plats
åkersberga, Täby
Registrerad
Jun 2004

Jag började med cpp.

Att sedan övergå från cpp till valfritt språk är ganska enkelt

Dator 1.
FX 8350 4.7Ghz | 24GB ram | MSI Radeon RX 480 | Kingston SSD | Fractal design R2.0 | PSU : Fractal 650W
Dator 2 (Bärbar). HP Folio 9470m

Trädvy Permalänk
Medlem
Registrerad
Maj 2014

Om du vill arbeta som utvecklare så skall du nog välja c++ annars så kan väl python vara bra för nybörjare som lär sig själv på fritiden.

Trädvy Permalänk
Medlem
Plats
Linköping
Registrerad
Feb 2010
Skrivet av VexedRelic:

Om du vill arbeta som utvecklare så skall du nog välja c++ annars så kan väl python vara bra för nybörjare som lär sig själv på fritiden.

Beror definitivt på typen av utvecklare. Vill man göra "tyngre" program, som spel, webbläsare, mediaspelare, eller vill göra appar till smarphones och dylikt är C++ vägen att gå. Vill man jobba mot webben och göra hemsidor, är Python mer rätt. Nu används Python visserligen inte så hemskt mycket på webben, men det är bra mycket mer likt de språk som används där (som Ruby, Javascript, PHP) än vad C++ är.

Egentligen spelar det ingen jättestor roll vilket språk man börjar med; när man väl har förstått vad programmering faktiskt innebär och man har hittat den inriktning (så som ovan nämnde desktop-applikationer vs webbapplikationer) man själv gillar, är det inte hela världen att byta språk.

Att få det att låta som att "riktiga" utvecklare använda C++ medan Python är för nybörjare är därmed rätt fånigt. I praktiken används de ungefär lika mycket, men har olika syften. Lite schysst statistik på hur mycket språken faktiskt används:

Personligen skulle jag säga att Python är det bättre nybörjarspråket, helt enkelt därför att tröskeln är lägre. Det går snabbare att komma från att inte kunna programmera alls till att kunna göra större saker. Vad jag menar är att inlärningsprocessen helt enkelt blir lite "roligare". Jag känner många som börjar med C/C++, går en hel kurs, och efter kursen är allt de kan göra att skriva ut en fint formaterad tabell i terminalen. På samma tid kan man, från en kurs jag själv gått, lära sig göra en dynamisk hemsida med en enklare databas. Vad av detta låter roligast att göra som nybörjare?

Trädvy Permalänk
Medlem
Plats
Linköping
Registrerad
Dec 2009

C++ är ett av de svåraste programmeringsspråken, medan Python är betydligt enklare. Har du motivationen och tiden så kör på C++ (Mitt första programmeringsspråk som jag lärde mig var nämligen C++, det var riktigt svårt i början men när du väl kan det så kommer du kunna lära dig vilket språk som helst utan problem)

Trädvy Permalänk
Medlem
Plats
Uppsala
Registrerad
Dec 2008

Jag brukar avråda folk från att välja C eller C++ som första språk. Jag tycker att Pythons inbyggda stöd för vissa grundläggande datastrukturer (som strängar och listor) gör det lättare att fokusera på uppgiften man skall lösa snarare än att brottas med C++.

Snart kommer yoshman och talar om för mig att jag har fel, men jag tycker fortfarande att det vore bättre att börja med Python och sedan byta språk när du fått in tänkandet i programmeringen.

Trädvy Permalänk
Medlem
Plats
Lappland
Registrerad
Feb 2008

Har försökt börjat flera gången på fritiden, bl a c++ och java men det var först när jag testade Python det tog fart på riktigt då man snabbt lärde sig tillräckligt för att komma till problemlösningen och verkligen göra saker annat än att få ut fin text i terminalen och göra en liten miniräknare.

Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Nov 2011

@Ingetledigtnamn: @Yoshman ... Var bara tvungen:/

Falling In Reverse - Game Over

"Midway upon the journey of our life I found myself within a forest dark, For the straightforward pathway had been lost."

Trädvy Permalänk
Medlem
Plats
Halmstad
Registrerad
Nov 2012
Skrivet av Kelow:

Tjena,

Ska gå en programmerings kurs och vi får välja om vi ska köra Python eller C++. Vilken rekommenderar ni?

Vilket är enklast att använda, enligt läraren är Python enklare.

Python.. gå emot strömmen

CPU: i7 3770k @ 4.2ghz + Be Quiet! Dark Rock Pro 3 Moderkort: Asrock Z77 Extreme6 Minnen: Corsair Vengeance Pro 4x4gb 2133mhz GPU: MSI GTX 980 Ti Gaming SSD: 2x Samsung 840 Pro 256gb RAID 0 Nätagg: Corsair AX 850 80+ Gold Chassi: Be Quiet! Silent Base 600

Trädvy Permalänk
Medlem
Plats
Götet, typ
Registrerad
Okt 2004
Skrivet av Kelow:

Tjena,

Ska gå en programmerings kurs och vi får välja om vi ska köra Python eller C++. Vilken rekommenderar ni?

Vilket är enklast att använda, enligt läraren är Python enklare.

När man ska lära sig något nytt är det vanligaste att man börjar med lätta saker och sedan går över till svårare.
Därför är det mest logiskt att börja med Python och senare lära sig C++. Det är mer och mer vanligt att universitet och högskolor runt om i världen använder Python som startspråk.

/M

Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Feb 2007
Skrivet av Kelow:

Tjena,

Ska gå en programmerings kurs och vi får välja om vi ska köra Python eller C++. Vilken rekommenderar ni?

Vilket är enklast att använda, enligt läraren är Python enklare.

Vad pluggar du för något? Olika programmeringsspråk kan vara nyttiga till olika saker och det är svårt att svara på vilket som passar om vi inte vet vad du sysslar med i övrigt.

AMD FX-8350 | Corsair H80i | ASUS Crosshair V Formula-Z | OCZ Vector 512GB | Fractal Design Newton R3 600W | Fractal Design Define R4| Corsair Venegance Red DDR3 16GB 1866MHz | Powercolor Radeon HD7970 | Eizo Foris FS2331

Inet - Sweclockers fri frakt

Trädvy Permalänk
Avstängd
Registrerad
Okt 2012

Kör på C++, då lär du dig mer programmeringens grunder och vad som händer i bakgrunden, det är mer minneshantering o sådant, o du har ingen garbagecollector som rensar minnet på saker som inte används, så du måste ta hand om sådant själv. Gör en till en bättre programmerare.

Själv kan jag Java, C#, C++ och Python. Började med Java o sedan gick det lätt att lära mig C#, o sedan C++. C++ e det språket jag gillar mest. Python är bra för att snabbt få igång prototyper och enklare program, men en stor skillnad är att det inte är typat, alltså du vet inte vad det är för variabler o så du arbetar med ifall du inte följer koden. Kan bli jobbigt.

Trädvy Permalänk
Moderator
Plats
Linköping
Registrerad
Apr 2004
Skrivet av Ingetledigtnamn:

Jag brukar avråda folk från att välja C eller C++ som första språk. Jag tycker att Pythons inbyggda stöd för vissa grundläggande datastrukturer (som strängar och listor) gör det lättare att fokusera på uppgiften man skall lösa snarare än att brottas med C++.

Just det där exemplet var väl dock inte optimalt då c++ har både strängar och listor?

Trädvy Permalänk
Datavetare
Plats
Stockholm
Registrerad
Jun 2011

För nybörjare är språket i det närmaste irrelevant, det finns en hel del grundläggande konstruktioner som in koncept är det samma och i syntax är väldigt snarlik i en lång rad språk.

Vad ingen här däremot förklarat är varför C++ skulle vara svårare än Python, det är något jag inte heller riktigt ser. För att ta några grundläggande koncept i Python

# villkorad körning if PRED: # kör om PRED är sant else: # kör om PRED är falskt # skapa sekvens av namn names = [ 'Adam', 'Bertil' ] # addera element till sekvensen names.append('Cesar') # gå igenom alla element i en loop for name in names: # 'name' blir nu bunden till vart och ett av elementen i 'names' # konkatenera alla namn med ", " som separator print(', '.join(names))

motsvarade i C++

# villkorad körning if (PRED) { // kör om PRED är sant } else { // kör om PRED är falskt } // skapa sekvens av namn vector<string> names{ "Adam", "Bertil" }; // addera element till sekvensen names.push_back("Cesar"); // gå igenom alla element i en loop for (auto name: names) { // 'name' blir nu bunden till vart och ett av elementen i 'names' }

Notera att jag skrev "sekvens" och inte lista. Det många, även Pythons dokumentation, kallar "lista" är inte en lista i datalogisk mening då karaktärsdrag för listor är

  • att addera ett element i fronten ska vara konstant tid, det är O(N) i Python

  • att indexera en slumpmässig element i en lista tar O(N), det tar konstant tid i Python

  • att ta två listor och sammanfoga dem till en lista ska vara proportionellt mot summan av de två listornas längd, är betydligt dyrare i Python

För den typ av program man normal skriver i Python är data-set så små att det faktum att Pythons "lista" faktiskt är implementerad som en dynamisk array (är implementerad som C++ vector<>), men då just tidskomplexitet är något som man i alla fall på universitetsnivå jobbar med som en av de absolut första sakerna kan ju detta beteende blir lite ologiskt.

C++ standardbibliotek är väldigt tillrättavisande här, något som borde hjälpa nybörjare, de operationer som inte är rimliga för en viss sekvenstyp finns helt enkelt inte. Så finns ingen push_front() för vector<>, behöver man en sådan operation så är det fel sekvenstyp (använd deque<> eller list<>), finns ingen index operator på list<> och finns ingen size() för forward_list<> (enkellänkad lista).

Vidare har C++ några fördelar till om man kör en integrerad miljö som t.ex. Visual Studio

  • Intellisense: underlättar för nybörjaren då man får hjälp med namn och argument till funktioner. Detta är inte specifikt för C++, men går bara att göra tillförlitligt i s.k. statiskt typade språk som C++, Java, C# m.fl.

  • kompilering: detta skulle nog de som gillar skriptspråk ta som nackdel men vad jag vet så visar all erfarenhet att ju tidigare man hittar ett problem desto bättre. Detta steg upplyser om uppenbara syntax och typfel i stället för att ge fel vi körning

  • debugger: nu finns detta även i Python men är betydligt svårare att använda för nybörjaren och t.ex. Visual Studios C++ debugger är betydligt mer kraftfull. Skriptspråk har fördelen med REPL (köra kod i interpreter) men skulle säga att en debugger ger alla fördelar med REPL plus en hel del till i form av betydligt bättre koll på allt tillstånd man har i sitt program, åter igen något som är värdefullt när man som nybörjare vill förstå exakt hur program fungerar

Ibland pekas det på att C++ är väldigt stor, det är helt sant men Python är ett princip lika stort språk. När man påpekar det senare blir ofta svaret: en nybörjare behöver ju inte använda allt (t.ex. list comprehension och liknade). Visst är det så men det gäller ju även C++.

Andra pekar på att minneshanteringen är enklare i Python. Skulle säga att den är lika enkel i C++ för alla de fall där det kvittar vilket språk man kör, när man måste ta till pekare och liknande i C++ är man på områden där Python överhuvudtaget inte är ett alternativ. Har skrivit om en programvara som var ~30k rader Python i C++11, slutresultatet är ungefär lika mycket kod (SLOC), ett program som är runt 100 gånger snabbare och det finns exakt NOLL ställen där jag använder new eller delete i C++ koden (och använder naturligtvis inte malloc/calloc/free heller)!

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

Trädvy Permalänk
Medlem
Plats
Uppsala
Registrerad
Dec 2008
Skrivet av Elgot:

Just det där exemplet var väl dock inte optimalt då c++ har både strängar och listor?

Visst finns det både strängar och listor i standardbiblioteket, men det är tydligt att de inte fanns med från början. Syntaxen och användningen av exempelvis en lista är allt annat än elegant.

Trädvy Permalänk
Datavetare
Plats
Stockholm
Registrerad
Jun 2011
Skrivet av Ingetledigtnamn:

Visst finns det både strängar och listor i standardbiblioteket, men det är tydligt att de inte fanns med från början. Syntaxen och användningen av exempelvis en lista är allt annat än elegant.

Fast det är inte längre sant i C++11. I C++94 så var listor "endast" något som man hade via bibliotek, språket som sådant hade inget stöd för listor utöver C-style arrayer.

I C++11 lade man till initializer list vilket då gjorde detta rätt omständliga sätt för att skapa listan 1,2,3

vector<int> numbers; numbers.push_back(1); numbers.push_back(3); numbers.push_back(2);

nu kan skrivas som

vector<int> numbers{1,2,3};

Och om man ska vara så: Python har ju än idag inte stöd för listor, man har endast motsvarande C++ vector<>
Ge gärna exempel på där det är mindre elegant i dagens C++ än Python, d.v.s. i C++11 (då många använder MSVC++ och den har ännu väldigt dåligt stöd för C++14, C++14 förenklar främst mer för funktionell programmering i C++ vilket kanske är lite överkurs här).

Stränghantering i C++ standardbibliotek lämnar en del övrigt att önska, även om det förbättrats en hel del i C++11/14. En väldigt enkel lösning är att installera boost, man kan se detta bibliotek som ett extra standardbibliotek för C++ där saker som ännu inte kommit in i C++ standardbibliotek testas. Mycket av det som faktiskt kom in i C++11/14 i form av bibliotek togs från boost. Biblioteken i boost håller rent generellt väldigt hög kvalité.

Tar man "join" fallet som jag visade för Python ovan blir det då i C++

// konkatenera alla namn med ", " som separator cout << join(", ", names);

vilket är precis lika enkelt som i Python. Är förövrigt rätt förvirrande att ', ' är det man skickar meddelandet join() till i Python. Är betydligt mer logiskt i Ruby där join() är ett meddelande till listan man vill konkatenera

names = [ 'Adam', 'Bertil' ] puts(names.join(', '))

vad join() gör rent logiskt är "reduce" på en lista till en sträng, d.v.s. detta

puts(names.reduce{|acc,name|acc + ', ' + name})

Skulle hävda att rent generellt känns många saker i Python ditlagda lite ad-hook, Ruby (och även Clojure) har i långt fler fall en väldigt bra teoretisk motivation till varför man tagit med / utelämna saker och även designen är typiskt väl förankrad i kända teoretiska koncept. Men det är OT för denna diskussion då TS frågade just om Python kontra C++.

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

Trädvy Permalänk
Medlem
Plats
Uppsala
Registrerad
Dec 2008
Skrivet av Yoshman:

Och om man ska vara så: Python har ju än idag inte stöd för listor, man har endast motsvarande C++ vector<>
Ge gärna exempel på där det är mindre elegant i dagens C++ än Python, d.v.s. i C++11 (då många använder MSVC++ och den har ännu väldigt dåligt stöd för C++14, C++14 förenklar främst mer för funktionell programmering i C++ vilket kanske är lite överkurs här).

Att Python under huven implementerar listorna som en vector spelar ingen som helst roll när nybörjarprogrammeraren använder en lista. Det är inte ens märkbart med de problemstorlekar man jobbar med då.

Vad tycker jag är elegantare är:

Inget av dina exempel kompilerar som du skrivit dem. (Personligen tycker jag inte att man borde få göra "using namespace std". Det dräller in alltför mycket symboler i namnrymden som kan ställa till med oförutsedda lustigheter.) Du kan kontra med att man måste göra "import" på saker i Python också, men mina käpphästar listor, strängar och tupler som nybörjaren kommer använda, funkar direkt utan import och även du måste väl medge att syntaxen för dessa är aningen smidigare i Python ("[1,2,3]") än i C++ ("vector<int> numbers{1,2,3};")? Det är det faktum att man slipper/måste göra en import/include som gör att jag envisas med att referera till dem som inbyggda i Python men inte i C++. Ja, det finns listor och strängar i C++ standardbibliotek men man måste skriva en hel del extra för att använda dem.

Typdeklarationer är ett tveeggat svärd. De tydliggör hur saker skall användas, men samtidigt är det extra saker (brus) som nybörjaren måste skriva bara för att tillfredställa kompilatorn. Med de problemstorlekar man jobbar med i början tror jag de flesta klarar att komma ihåg vad som fanns i variabeln man introducerade tre rader tidigare. Självklart finns det fall när även nybörjaren skulle vara behjälpt av hårdare typning, men i början tror jag att typdeklarationerna mest är i vägen.

Med include-direktiv, typdeklarationer och namespaceprefix kommer en lösning i C++ typiskt innehålla mer brus än motsvarande funktionellt ekvivalenta lösning i Python och allt man måste skriva som inte direkt har med problemlösningen att göra är en distraktion och gör det mindre elegant. Att C++-lösningen kan vara 100 gånger effektivare är inte heller relevant för för nybörjaren. Kommer svaret direkt när man trycker på return är det "good enough".

Förresten, om du söker exemplevis på stackoverflow eller andra sajter som nybörjaren kan tänkas söka hjälp, hur stor del av koden du kan hitta där är C++ 98?

Trädvy Permalänk
Avstängd
Registrerad
Okt 2012
Skrivet av Ingetledigtnamn:

Typdeklarationer är ett tveeggat svärd. De tydliggör hur saker skall användas, men samtidigt är det extra saker (brus) som nybörjaren måste skriva bara för att tillfredställa kompilatorn. Med de problemstorlekar man jobbar med i början tror jag de flesta klarar att komma ihåg vad som fanns i variabeln man introducerade tre rader tidigare. Självklart finns det fall när även nybörjaren skulle vara behjälpt av hårdare typning, men i början tror jag att typdeklarationerna mest är i vägen.

Med include-direktiv, typdeklarationer och namespaceprefix kommer en lösning i C++ typiskt innehålla mer brus än motsvarande funktionellt ekvivalenta lösning i Python och allt man måste skriva som inte direkt har med problemlösningen att göra är en distraktion och gör det mindre elegant. Att C++-lösningen kan vara 100 gånger effektivare är inte heller relevant för för nybörjaren. Kommer svaret direkt när man trycker på return är det "good enough".

Varför skulle det vara dåligt att ha koll på vad man gör?

Trädvy Permalänk
Medlem
Registrerad
Okt 2009
Skrivet av Vakz:

Beror definitivt på typen av utvecklare. Vill man göra "tyngre" program, som spel, webbläsare, mediaspelare, eller vill göra appar till smarphones och dylikt är C++ vägen att gå. Vill man jobba mot webben och göra hemsidor, är Python mer rätt. Nu används Python visserligen inte så hemskt mycket på webben, men det är bra mycket mer likt de språk som används där (som Ruby, Javascript, PHP) än vad C++ är.

Egentligen spelar det ingen jättestor roll vilket språk man börjar med; när man väl har förstått vad programmering faktiskt innebär och man har hittat den inriktning (så som ovan nämnde desktop-applikationer vs webbapplikationer) man själv gillar, är det inte hela världen att byta språk.

Att få det att låta som att "riktiga" utvecklare använda C++ medan Python är för nybörjare är därmed rätt fånigt. I praktiken används de ungefär lika mycket, men har olika syften. Lite schysst statistik på hur mycket språken faktiskt används:
http://spectrum.ieee.org/img/top-tech-620px-1436797486093.jpg

Personligen skulle jag säga att Python är det bättre nybörjarspråket, helt enkelt därför att tröskeln är lägre. Det går snabbare att komma från att inte kunna programmera alls till att kunna göra större saker. Vad jag menar är att inlärningsprocessen helt enkelt blir lite "roligare". Jag känner många som börjar med C/C++, går en hel kurs, och efter kursen är allt de kan göra att skriva ut en fint formaterad tabell i terminalen. På samma tid kan man, från en kurs jag själv gått, lära sig göra en dynamisk hemsida med en enklare databas. Vad av detta låter roligast att göra som nybörjare?

Gillar att matlab är med på listan!

Laptops -Lenovo T61 (anno 2007), Windows 7. MacBook Pro Retina 13" late 2013
Stationär - Intel i7 920@4.2 GHz , gigabyte GTX 670 (W2), Gigabyte GA-x58-UD7, Corsair HX850, Corsair H50, Antec P183 + fläktar & kontroller, M-Audio Fast Track Ultra, Windows 7 + OS X 10.9 Mavericks
CITERA om du förväntar dig ett svar på vad jag skrivit

Trädvy Permalänk
Medlem
Plats
Uppsala
Registrerad
Dec 2008
Skrivet av Pether:

Varför skulle det vara dåligt att ha koll på vad man gör?

Var har jag sagt att det är dåligt att ha koll på vad man gör? Vad är det du ifrågasätter i det jag skrev?

Trädvy Permalänk
Datavetare
Plats
Stockholm
Registrerad
Jun 2011
Skrivet av Ingetledigtnamn:

Att Python under huven implementerar listorna som en vector spelar ingen som helst roll när nybörjarprogrammeraren använder en lista. Det är inte ens märkbart med de problemstorlekar man jobbar med då.

Håller helt med, det var mest en gliring mot att du skrev att C++ inte har listor när det faktiskt är så att det bara C++ som har listor (i den korrekta bemärkelsen) som standard.

Skrivet av Ingetledigtnamn:

Vad tycker jag är elegantare är:

Inget av dina exempel kompilerar som du skrivit dem. (Personligen tycker jag inte att man borde få göra "using namespace std". Det dräller in alltför mycket symboler i namnrymden som kan ställa till med oförutsedda lustigheter.) Du kan kontra med att man måste göra "import" på saker i Python också, men mina käpphästar listor, strängar och tupler som nybörjaren kommer använda, funkar direkt utan import och även du måste väl medge att syntaxen för dessa är aningen smidigare i Python ("[1,2,3]") än i C++ ("vector<int> numbers{1,2,3};")? Det är det faktum att man slipper/måste göra en import/include som gör att jag envisas med att referera till dem som inbyggda i Python men inte i C++. Ja, det finns listor och strängar i C++ standardbibliotek men man måste skriva en hel del extra för att använda dem.

Det var inte poängen att skriva fullständiga program utan att visa hur exakt samma uttryck/sats ser ut i respektive språk. Givet att man har importerat std i sin namnrymd så kompilerar alla exempel.

Rent generellt bör man inte importerna stora namnrymder, men just std är helt OK även i "riktiga" program då det är en del av standard C++. Vidare så kommer ett statiskt typat språk kunna särskilja symboler med samma namn om de skiljer i signaturen och om även den är den samma berättar kompilatorn väldigt pedagogiskt att två namnrymder har samma symbol och man måste därför explicit tala om vilken man menar. Jämför med "from MODULE import SYMBOL" i Python, importerar du samma symbol på det sättet från två moduler får du inget fel alls och det verkar (vet inte om det är väldefinierat) som man bara kan anropa den sista man importerat.

Just detta fall rörde nybörjare och då finns det överhuvudtaget ingen anledning att inte köra med using namespace std;.

Skrivet av Ingetledigtnamn:

Typdeklarationer är ett tveeggat svärd. De tydliggör hur saker skall användas, men samtidigt är det extra saker (brus) som nybörjaren måste skriva bara för att tillfredställa kompilatorn. Med de problemstorlekar man jobbar med i början tror jag de flesta klarar att komma ihåg vad som fanns i variabeln man introducerade tre rader tidigare. Självklart finns det fall när även nybörjaren skulle vara behjälpt av hårdare typning, men i början tror jag att typdeklarationerna mest är i vägen.

Med include-direktiv, typdeklarationer och namespaceprefix kommer en lösning i C++ typiskt innehålla mer brus än motsvarande funktionellt ekvivalenta lösning i Python och allt man måste skriva som inte direkt har med problemlösningen att göra är en distraktion och gör det mindre elegant. Att C++-lösningen kan vara 100 gånger effektivare är inte heller relevant för för nybörjaren. Kommer svaret direkt när man trycker på return är det "good enough".

Förresten, om du söker exemplevis på stackoverflow eller andra sajter som nybörjaren kan tänkas söka hjälp, hur stor del av koden du kan hitta där är C++ 98?

Här har jag svårt att se att kompilering och statisk typning på något sätt skulle vara en nackdel. Kompilatorn kommer bra klaga när det finns uppenbara typfel, gör man motsvarande fel i ett dynamisk typat språk som Python blir det i bästa fall ett run-time fel som man begriper sig på. I värsta fall gör programmet något som kanske ter sig totalt irrationellt för en nybörjare.

Notera ändå den första mening jag skrev i första inlägget i denna tråd: jag anser att språket spelar väldigt liten roll för nybörjare, så Python är definitivt inte ett dåligt val. Det jag vänder mig emot är de som hävdar att C++ är så mycket svårare, ser ingen som kan göra en hållbar argumentation till varför modern C++ skulle vara svårare än t.ex. Python. Visst finns det fall där den ena är lite bättre, för C++ har jag där pekat på saker som t.ex. interaktiva debuggers och Intellisense (personligen anser jag också att statisk typning är en fördel för nybörjare men har inga konkreta "bevis" att luta mig mot då sådana undersökningar alltid tittat på stora kodbaser).

Nu var ju valen just C++ och Python, skulle ändå säga att ett enklare statiskt typat språk som t.ex. Java eller Go måste vara bättre som nybörjarspråk. Själv fick jag använda ANSI Pascal som första språk på KTH, motiveringen var just att språket i sig var så enkelt att man kunde lära sig hela språket i en 4HP kurs, d.v.s fokus blev programmering och inte syntax.

Har undervisat programmering på gymnasienivå som extraknäck under studenttiden och där hade skolan (innan jag blev indragen i det hela) valt C++, kanske inte det jag skulle valt men för de saker man skulle lära sig under den kursen (loopar, if-satser, variabler, uppdelning av problem i funktioner etc) var faktiskt språket helt irrelevant så C++ var lika bra som något annat. Alla abstrakta datatyper som användes där skrevs av eleverna, "cin/cout" var nog det enda som användes från standardbiblioteket.

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

Trädvy Permalänk
Avstängd
Registrerad
Okt 2012
Skrivet av Ingetledigtnamn:

Var har jag sagt att det är dåligt att ha koll på vad man gör? Vad är det du ifrågasätter i det jag skrev?

Du har en negativ ton emot fluff, fluffet gör att man vet vad det är man gör, så att man inte råkar göra fel, t.ex. skicka in en sträng i en funktion som det är meningen att man ska leka med en lista. Osv. I python måste du veta koden för att förstå vad du skickar vidare.

Trädvy Permalänk
Medlem
Registrerad
Sep 2015

Vad du än väljer så kan det inte bli fel, python är lite enklare att använda och c++ är lite mer komplett.
Det kan knappast bli fel om du väljer ett programmerings språk som fått sitt namn efter Monty Python och väljer du c++ så har du detta att se fram emot: https://github.com/isocpp/CppCoreGuidelines.

Jag har hållit på med programmering i 30år och jobbat som programmerare i 20år, med bland annat c++ och python.
När jag började programmera så var det rad basic i ibm-dos sedan några andra versioner av basic innan jag började med c och några år efter det c++ och det var innan jag började jobba som programmerare.

Jag anser att man bör välja programmeringsspråk utifrån vad man vill åstadkomma, så för att lära sig programmera bör man välja ett språk som är lite lättare att använda.

Så för mig blir rekommendationen självklart python, när du kan det kan du fördjupa dig med att lära dig c++.

Lycka till.

Trädvy Permalänk
Medlem
Plats
Uppsala
Registrerad
Dec 2008
Skrivet av Pether:

Du har en negativ ton emot fluff, fluffet gör att man vet vad det är man gör, så att man inte råkar göra fel, t.ex. skicka in en sträng i en funktion som det är meningen att man ska leka med en lista. Osv. I python måste du veta koden för att förstå vad du skickar vidare.

Jag är inte fluffallergiker. Fluffet fyller en viktig funktion och i normala sammanhang med flera moduler och flera programmerare blir det sannolikt outhärdligt utan fluff. Det går att klara sig utan fluff, men då krävs det mycket disciplin och att man är tydlig i sin dokumentation med vad man förväntar sig de olika parametrarna. Då får dokumentationen fylla fluffets roll.

Men i TS fall: "Jag skall börja programmera. Skall jag ta C++ eller Python?" brukar problemen man får vara anpassade för att man skall öva på en sak i taget, exempelvis rekursion, och lösningarna håller sig under 15-20 rader kod. I det läget är inte fluffbehovet inte lika stort för hela lösningen ryms i huvudet. Som van programmerare tittar man på problemet, bryter ned det i iteration, selektion, o.s.v. och skriver sedan lösningen enligt syntaxen i det språket du använder. För nybörjaren som ännu inte fått förmågan att automatiskt bryta ner problemet i delar och det fortfarande kan vara problematiskt uttrycka saker i själva programmeringsspråket (hur var det nu man skulle skriva för att använda en template?) tror jag att det är lättare att skriva sina lösningar i ett språk som inte kräver en hög fluffprocent. C++ kräver ganska mycket fluff så när nybörjaren skall välja mellan Python och C++ då rekommenderar jag Python.

Trädvy Permalänk
Medlem
Plats
Uppsala
Registrerad
Dec 2008
Skrivet av Yoshman:

Det var inte poängen att skriva fullständiga program utan att visa hur exakt samma uttryck/sats ser ut i respektive språk. Givet att man har importerat std i sin namnrymd så kompilerar alla exempel.

Min poäng här var att dina exempel inte innehåller allt man måste skriva för att få ett fungerande program. Jag tyckte så mycket om Pethers term så jag adopterar den. I dina exempel saknas allt fluffet du måste skriva för att tillfredställa kompilatorn. Där får C++ minuspoäng på elegans.

Skrivet av Yoshman:

Här har jag svårt att se att kompilering och statisk typning på något sätt skulle vara en nackdel.

Jag ser också fördelarna med statisk typning men du frågade vad jag fann elegantare hos Python och just avsaknaden av typdeklarationer är en sådan sak. Jag ser inte dynamisk typning som en fördel men typdeklarationerna höjer halten fluff i problemlösningen och kan vara problematiska för nybörjaren. Läs mitt svar till Pether.

Skrivet av Yoshman:

Notera ändå den första mening jag skrev i första inlägget i denna tråd: jag anser att språket spelar väldigt liten roll för nybörjare, så Python är definitivt inte ett dåligt val. Det jag vänder mig emot är de som hävdar att C++ är så mycket svårare, ser ingen som kan göra en hållbar argumentation till varför modern C++ skulle vara svårare än t.ex. Python. Visst finns det fall där den ena är lite bättre, för C++ har jag där pekat på saker som t.ex. interaktiva debuggers och Intellisense (personligen anser jag också att statisk typning är en fördel för nybörjare men har inga konkreta "bevis" att luta mig mot då sådana undersökningar alltid tittat på stora kodbaser).

Vi är på samma sida när det gäller att man lär sig programmera och att programspråket spelar mindre roll.

Men i valet mellan Python och modern C++ rekommenderar jag Python till nybörjaren just för att det är lägre fluffprocent och man kan fokusera mer på lösningen och inte på att skriva saker för att komplatorn skall bli glad. Jag assade på D-linjens inledande Scheme-kurs på KTH och att döma av de frågor jag fick var den dynamiska typningen inte ett stort problem. När storleken på lösningarna är en sida kod eller två kan man hålla hela lösningen i huvudet. Scheme ligger också bra till i elegansligan, men det är aldrig någon frågar om de skall börja med C++ eller Scheme. Obegripligt...

Stod valet mellan Python och C++98, vilket det mycket väl skulle kunna göra om den som ställde frågan lånat en bok av en polare, tror jag även du skulle rösta för Python.

Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Jul 2014

@kazen_90: Går 2an på en Teknisk linje

Trädvy Permalänk
Medlem
Plats
Karlskrona
Registrerad
Aug 2009

De är EXTREMT olika språk. Även om syntax mellan språk kan se liknande ut så kan de vara helt skillda "under huven". Om du bara vill göra enklare program snabbt så kör pyhton. Men om du är ute efter att lära dig verklig utveckling, minneshantering, förstå dig på CPU'n, register, lågnivåoptimeringar osv... Då är det C++ som gäller.

Det tar självklart lång tid att lära sig allt, men om det är åt det hållet du vill nå så börja med C++ redan nu och lär dig de rätta grunderna från start. Att lära sig något grovt abstraherat kan komma i vägen om man senare försöker sätta sig in i hur saker "verkligen fungerar".

Asus Z97 Pro Gamer | 32gb ram DDR3 2400MHz | i7 4790k | 2 x R9 390
Asrock P67 Extreme4 rev3 | 16gb DDR3 2400MHz | i7 2600K | R9 290
En massa bärbara, servrar, RPi's och andra boxar

Trädvy Permalänk
Medlem
Plats
Göteborg
Registrerad
Mar 2011

Om man är ute efter förståelse för programmering som koncept, och om man är ute efter minsta möjliga ansträngning, för att sedan kanske lägga ner det hela och aldrig komma tillbaka, ja då tycker jag Python är ett bättre val.

Men tänker man i banorna att faktiskt lära sig programmera som hobby eller som yrke, tycker jag fördelarna att börja med C++ väger över väldigt starkt. Bara man lyckas passera den närmast oöverkomliga tröskeln att lägga till 2-3 include filer, mången är de tappra aspiranter som fallit vid det bistra slaget

Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Feb 2007
Skrivet av Kelow:

@kazen_90: Går 2an på en Teknisk linje

Tveklöst Python i så fall. Programmerar man på gymnasiet ska språket orsaka så lite irritation som möjligt och vara så enkelt att läsa som möjligt. Små detaljer spelar roll. cout istället för print, hakparenteser istället för kolon, alltid semikolon och import fram och tillbaka.

Annars går det väldigt fort att bli avskräckt och tycka att programmering är trist. Det viktiga är algoritmerna och inte syntaxen och därför tycker jag att Python är ett mycket bättre val.

Hade också C++ på gymnasiet och när jag sedan testade Python på KTH tyckte jag att programmering blev roligare. "Det bara funkade".

AMD FX-8350 | Corsair H80i | ASUS Crosshair V Formula-Z | OCZ Vector 512GB | Fractal Design Newton R3 600W | Fractal Design Define R4| Corsair Venegance Red DDR3 16GB 1866MHz | Powercolor Radeon HD7970 | Eizo Foris FS2331

Inet - Sweclockers fri frakt

Trädvy Permalänk
Medlem
Plats
Götet, typ
Registrerad
Okt 2004
Skrivet av Yoshman:

Vad ingen här däremot förklarat är varför C++ skulle vara svårare än Python, det är något jag inte heller riktigt ser. För att ta några grundläggande koncept i Python

Det är ganska enkelt att förklara hur man kan veta det. Människor över hela världen har märkt att de väldigt snabbt kommer in i Python jämfört med C++.
Några kodexempel i ett en diskussion i ett forum kan inte riktigt motsäga det.

/M