Permalänk
Datavetare
Skrivet av Ingetledigtnamn:

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.

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.

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.

Scheme har samma fördelar som t.ex. Clojure och ANSI Pascal, det är ett extremt enkelt språk och även i en rätt kort kurs som INDA (som jag har för mig ändå var 8HP, allt över 5HP var ju rätt långa kurser på KTH ), man kan lära sig i princip alla språkliga konstruktioner utan problem. Nu lär ju INDA knappast gått in på LIPS mörka sida, skriva macros, utan det är de flesta LISP-dialekter väldigt enkla.

Både Python och C++ är extremt stora språk, knappast något man lär ut i en kortare kurs. Men vet inte hur stort problem det är, man får helt enkelt hålla sig i en delmängd av språket. Är nog mest bara problem för de mest intresserade eleverna som lär sig mer på egen hand och då kanske går lite utanför mallarna.

Och kring diskussionen av vad som faktiskt är inbyggt i språket från början: var inte grejen även med Scheme att studenterna skulle skriva alla abstrakta datatyper själva, så vad är fördelen med språk som har allt det från början?

Skrivet av Marowak:

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.

Har aldrig skrivit att Python inte är enklare än C++, har skrivit att jag själv inte kan se på vilket sätt Python är så mycket enklare. Om det nu är allmän kunskap som jag missat måste det ju vara trivialt för dig att upplysa mig genom några enkla exempel som visar hur komplicerat C++ är jämfört med Python!

Letade lite bland forskningsartiklar och liknande, enda jag hittade var att statiskt typning ger färre fel än dynamisk typning. Att unit-tester skulle vara nog visade sig vara fel, de hittar andra typer av fel och även statiskt typade språk måste ha unit-tester (vilket knappast borde vara en nyhet för någon som jobbar med programmering). Huruvida detta spelar någon roll för absoluta nybörjare låter jag vara osagt, i sådana kurser skriver man nog inte unit-tester (finns dock kurser man gör detta, har gått ett par Coursera Scala-kurser och där rättades alla inlämningsuppgifter genom att de kördes skulle klara ett gäng förutbestämda unit-tester).

Visa signatur

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

Permalänk

Python är ett leksaksspråk som passar bra inom utbildning. Kod i C++ kan vara 10-100 ggr snabbare och är effektivare än den skriven i Python.. för att göra riktigt seriösa större program är C++ det självklara valet.

Man blir inte en programmerare på enstaka kurser. För att på ett enkelt sätt få något humm om programmering under en första kurs är Python ett bättre val. Man kan sedan övergå till C++ eller något annat språk ifall avsikten är att lära sig bygga industriella applikationer.

Smågrejer.. Python är vinnaren
För små program, vinner man tid på att skriva i Python. T.ex en kod i C++ kan ta 2 dagar medans i Python endast 1 dag. Man kan säga: Det beror på att Python kompilatorn gissar bättre vad programmeraren vill.

Storgrejer... C++ är vinnaren
Om man tänker sig ett team som tillsammans skriver ett större program under 2 år i Python, kanske teamet hade skrivit motsvarande kod i C++ endast på 1 år. Man kan säga: Det beror på sannolikheten att Python kompilatorn gissar fel är större om programmet är stort.

För n00ben.. Python är vinnaren
Jag kunde C++ men inte Python eller Java. Java påminner om C++.
Skrev ett program under en arbetsvecka i Java och det blev aldrig klart.
Skrev samma program i Python och det blev klart på 1 dag.
Ifall du inte kan koda... välj Python. *klart slut*

Permalänk
Hedersmedlem

En stor fördel för mig när jag lärt mig Python är att ha ett interpretator-fönster öppet, typ IDLE. Blir jag tveksam på syntaxen eller om något kommer ge mig förväntat beteende så slänger jag in lite kod i interpretatorn nästan som ett specifikt unit-test och ser vad output blir. Då får jag snabb koll på om jag fattat rätt utan att behöva skriva korrekt syntax i resten av koden och försöka kompilera.

De är såklart olika verktyg och bör användas i sina rätta sammanhang.

Jag tycker exempel med vector<string> names{"",""}... jämfört med names = ['',''] är ganska bra exempel på hur C++ kan upplevas mer komplicerat för en absolut nybörjare. Vad är vector och hur funkar det? Vad är string och hur funkar det? Varför måste string vara i vinkel-paranteser ihop med vector? Python -> spara dessa namnen i något som kallas såhär.

Typ

Permalänk
Medlem

Hej, är tillbaka igen.

Jag valde Phyton eftersom det kändes rätt. Nu har vi fått en form av hemuppgift/prov.

Uppgiften var att datorn ska ta fram dom 100 första primtalen så fort som möjligt. Vet inte hur jag ska göra, det var därför jag vände mig hit.

Hur ska jag göra?

Permalänk
Hedersmedlem
Skrivet av Kelow:

Hej, är tillbaka igen.

Jag valde Phyton eftersom det kändes rätt. Nu har vi fått en form av hemuppgift/prov.

Uppgiften var att datorn ska ta fram dom 100 första primtalen så fort som möjligt. Vet inte hur jag ska göra, det var därför jag vände mig hit.

Hur ska jag göra?

Första frågan är då om du vet vad ett primtal är? Nästa är, om jag ger dig ett tal, kan du ta reda på om det är ett primtal eller inte?

Permalänk
Medlem
Skrivet av Kelow:

Hej, är tillbaka igen.

Jag valde Phyton eftersom det kändes rätt. Nu har vi fått en form av hemuppgift/prov.

Uppgiften var att datorn ska ta fram dom 100 första primtalen så fort som möjligt. Vet inte hur jag ska göra, det var därför jag vände mig hit.

Hur ska jag göra?

Det du skulle gjort till att börja med är att skapa en ny tråd. De som ser rubriken "python eller c++" förväntar sig inte en återuppväckt tråd med problemlösning i python.

Sedan behöver du fundera på vilka delar du har i ditt problem. Vilka siffror vill du gå igenom, hur ska du testa ifall de numren är primtal?

Visa signatur

/M

Permalänk

Det finns en metod som kallas Eratosthenes såll som är ganska lätt att förstå och snabb men kanske lite knepig att implementera.

Hur mycket av programmerandet har du in din mentala verktygslåda? Man brukar prata om begrepp som iteration och selektion, det vill säga göra saker flera gånger och göra saker om vissa villkor är uppfyllda. Du måste bryta ner problemet i olika delmoment som löser en mindre uppgift och sedan repetera den tills du har en lösnings som klarar av hela ditt problem. Exempelvis:

Steg 1: Skriv en funktion som avgör om ett tal är ett primtal eller inte. Är det talet delbart med något tal mellan 2 och roten ur sig själv är det inte ett primtal.

Steg 2: Skriv en loop som kör denna funktion på alla tal mellan 1 och 100 och samla alla tal som är primtal i en lista.

Steg 3: Ändra loop-villkoret så att man kör tills man har samlat ihop 100 primtal.

När det väl funkar kan du fundera på om du kan göra det snabbare. Exempelvis behöver du inte testa delbarheten med alla tal mellan 2 och roten ur x utan bara med primtalen mellan 2 och roten ur x för att testa om x är ett primtal.

Nu får du försöka själv.

Permalänk
Datavetare

Eratosthenes såll tar 9 rader i C++, 11 med includes (cmath och vector), varav 5 är implementationen av själva algoritmen. Då används ändå de formerna av loopar och vektorer från C++98. Problemet är nog mest att den algoritmen räknar ut alla primtal upp till ett visst tal, inte N stycken primtal. Föga oväntat blir det exakt lika många rader i Python, nåja man spara en rad om man räknar include kontra import (räcker med math).

Eratosthenes såll är snabb, kan räkna ut alla primtal upp till en miljard på ca 9s med min laptop, output är en sekvens med alla primtal (i RAM, skulle ta en stund att skriva ut dem ).

TS ska ändå göra det som @Ingetledigtnamn föreslår i ren text, det är lösning på denna uppgift.

Visa signatur

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