Vill lära mig programmering! HJÄLP!

Permalänk

Vill lära mig programmering! HJÄLP!

Hej, som rubriken lyder så vill jag lära mig programmera. Spel och/eller "filmklipp".
Har INGEN SOM HELLST tidigare erfarenhet av detta.

Vill ha hjälp med detta: Någon som vet något bra program att börja med? C++ har jag hört om men vet inte vilket som är det bästa för en "noob"?
Och någon guide till just det programmet som ni rekommenderar (HELLST på svenska, guiden alltså).

JÄTTE tacksam för hjälp!

/Froztbite1337

Permalänk
Medlem

Börja med Python, lätt att lära sig och är bra som första språk. Du kan nog googla på tutorials, finns en hel del.
Annars finns ju Java och C#, som också går att lära sig som första språk men är lite mer avancerat. Hursomhelst, börja inte med C++. Minneshantering skulle nog bli jobbigt för dig.

Skickades från m.sweclockers.com

Permalänk

Khan Academy har nyligen släppt sin nya computer science-avdelning! Det är ett jättebra ställe att börja på. Allt är på engelska men dem förklarar bra. Lektionerna är interaktiva och mycket pedagogiska.

Länken: http://www.khanacademy.org/cs

Lycka till!

EDIT: Börja med att kolla på introduktions videon och gå sedan igenom varje tutorial en efter en.

Och en sak till, det spelar egentligen ingen roll vilket språk du börjar med, det handlar mer om att komma in i "programmerings-tänket" sen kan du lära dig vilka språk du vill. Men det är nog en bra idé börja med ett välanvänt språk eftersom det finns mer dokumentation/guider/hjälp då. Java, Python, C++ till exempel.

Visa signatur

CPU: i7 930@3,2GHz | MOBO: Rampage III Extreme | RAM: Corsair 6GB Dominator GT 1866MHz CL7 | GPU: ASUS GTX 570 Direct CUII SLI | PSU: Be Quiet Dark Power Pro 1200W

Permalänk

Du kan alltid låna böcker på biblioteken, om de finns där förstås, tror de finns i vårt bibliotek i Jkpg iaf. Annars finns det jätte mycket bra här:
CDON - Programmeringsböcker

Permalänk
Medlem
Skrivet av Snacker:

Börja med Python, lätt att lära sig och är bra som första språk. Du kan nog googla på tutorials, finns en hel del.
Annars finns ju Java och C#, som också går att lära sig som första språk men är lite mer avancerat. Hursomhelst, börja inte med C++. Minneshantering skulle nog bli jobbigt för dig.

Åja, man behöver ju inte hålla på med minneshantering bara för att man kodar C++. Om något är det väl trevligt att ha möjligheten att rota lite djupare i systemet när man väl når en sådan nivå att det börjar bli aktuellt.

Jag vill nog mena på att man först bör ställa sig frågan vad man vill koda, och till vilka plattformar man vill koda, och sedan bestämma sig för ett språk. Visst, Python är väldigt lätt att lära sig vad jag förstått, och det är relativt kraftfullt, men man är i princip låst till de vanligaste plattformarna. Är man bara ute efter att nå resultat snabbt, och nöjer sig med att skriva programvara för de vanligaste plattformarna kan det vara ett alternativ.

Fikar man efter att på sikt jobba som kodapa är det väl Java eller C# som gäller i nuläget. Har dock ingen koll på vilken kunskapsnivå man måste besitta, eller hur lång tid det tar att nå dit, för att vara anställningsbar.

För min del var C++ det givna valet, då jag inte är särskilt intresserad av att skriva programvara för vanliga datorer, utan är mer inne på lite obskyrare plattformar. Jag tror inte det finns något annat språk som är lika versatilt och användbart när det kommer till den saken, ja, givet förstås att man inte har fritid och brains nog att lära sig assembly för de plattformar man är intresserad av :>

Du har förstås helt rätt i att inlärningskurvan för C++ är något brantare än språken du föreslår, men det är långt från någon oöverstiglig mur ens för den som aldrig kodat förr. Är man seriös med att vilja lära sig programmera, har lite tålamod, och inte förväntar sig att kunna uträtta storverk efter ett par veckor, så grejar man det utan problem.

---

TS, känner du dig sugen på C++ är det en baggis att testa på. Nu känner jag inte till några svenskspråkiga resurser för C++programmering, men det finns många bra engelskspråkiga dito. Här är ett par sidor jag använder som referenser, som också har nybörjartutorials:

http://www.cplusplus.com
http://www.cprogramming.com

Det är nog en bra idé att börja koda i en IDE (hehe), exempelvis Code::Blocks. Den är gratis, löjligt lätt att confa upp, relativt kraftfull, och innehåller inte en massa för nybörjaren förvirrande grejer som är fullständigt onödiga för den som inte håller på med rent enorma projekt (hej Visual C++). På sikt, om du kommer så långt att du börjar bli avancerad, kan du sedan enkelt byta miljö om du känner för det, språket du skriver är fortfarande detsamma. Code::Blocks räcker dock väldigt långt för de allra flesta. Du behöver bara installera den och göra lite grundläggande konfiguration (tar sisådär 5 min), så är du igång och kan koda.

Vidare är det inte så dumt att komplettera upp med en pappersbok, dels för att få programmeringsuppgifter såhär i början tills du kan börja koda sådant du vill koda, och dessutom som referensverk för framtiden. Jag gillar C++ Direkt av Jan Skansholm, men det finns en massa andra bra böcker också. Det är ju en smaksak det där, så det kan vara bra att investera lite tid och energi i att hitta en som funkar för dig.

Visa signatur

Nu lurade jag dig att slösa bort ett par värdefulla sekunder av ditt liv på att läsa denna fullständigt poänglösa signatur!

Permalänk
Medlem

Python kan vara lämpligt att börja med och går att använda ihop med SDL.

Om du inte kan nåt sen innan så finns det en lättläst bra bokserie av O'Reilly, här är deras Python bok: http://www.bokus.com/bok/9781449382674/head-first-python/

Visa signatur
Permalänk
Medlem

Nu är det ju så att TS vill lära sig att göra spel och i sånna fall skulle jag absolut rekommendera C#/XNA över C++ (t ex OpenGL). Att rita upp en bild på skärmen i XNA tar bara några rader kod, men kräver betydligt mycket mer kunskap och kod i OpenGL.

Visa signatur

>> AUK <<

Permalänk
Medlem

Även jag skulle rekommendera Python. Det är lätt att börja med och du kommer in i tänket. När man väl lärt sig ett språk är det lättare att lära sig andra. Det viktigaste är att man kommer igång och att man inte kör in i nån bergvägg i början.

Visa signatur
Permalänk
Medlem
Skrivet av kaput:

Åja, man behöver ju inte hålla på med minneshantering bara för att man kodar C++. Om något är det väl trevligt att ha möjligheten att rota lite djupare i systemet när man väl når en sådan nivå att det börjar bli aktuellt.

Jag vill nog mena på att man först bör ställa sig frågan vad man vill koda, och till vilka plattformar man vill koda, och sedan bestämma sig för ett språk. Visst, Python är väldigt lätt att lära sig vad jag förstått, och det är relativt kraftfullt, men man är i princip låst till de vanligaste plattformarna. Är man bara ute efter att nå resultat snabbt, och nöjer sig med att skriva programvara för de vanligaste plattformarna kan det vara ett alternativ.

Fikar man efter att på sikt jobba som kodapa är det väl Java eller C# som gäller i nuläget. Har dock ingen koll på vilken kunskapsnivå man måste besitta, eller hur lång tid det tar att nå dit, för att vara anställningsbar.

För min del var C++ det givna valet, då jag inte är särskilt intresserad av att skriva programvara för vanliga datorer, utan är mer inne på lite obskyrare plattformar. Jag tror inte det finns något annat språk som är lika versatilt och användbart när det kommer till den saken, ja, givet förstås att man inte har fritid och brains nog att lära sig assembly för de plattformar man är intresserad av :>

Du har förstås helt rätt i att inlärningskurvan för C++ är något brantare än språken du föreslår, men det är långt från någon oöverstiglig mur ens för den som aldrig kodat förr. Är man seriös med att vilja lära sig programmera, har lite tålamod, och inte förväntar sig att kunna uträtta storverk efter ett par veckor, så grejar man det utan problem.

---

TS, känner du dig sugen på C++ är det en baggis att testa på. Nu känner jag inte till några svenskspråkiga resurser för C++programmering, men det finns många bra engelskspråkiga dito. Här är ett par sidor jag använder som referenser, som också har nybörjartutorials:

http://www.cplusplus.com
http://www.cprogramming.com

Det är nog en bra idé att börja koda i en IDE (hehe), exempelvis Code::Blocks. Den är gratis, löjligt lätt att confa upp, relativt kraftfull, och innehåller inte en massa för nybörjaren förvirrande grejer som är fullständigt onödiga för den som inte håller på med rent enorma projekt (hej Visual C++). På sikt, om du kommer så långt att du börjar bli avancerad, kan du sedan enkelt byta miljö om du känner för det, språket du skriver är fortfarande detsamma. Code::Blocks räcker dock väldigt långt för de allra flesta. Du behöver bara installera den och göra lite grundläggande konfiguration (tar sisådär 5 min), så är du igång och kan koda.

Vidare är det inte så dumt att komplettera upp med en pappersbok, dels för att få programmeringsuppgifter såhär i början tills du kan börja koda sådant du vill koda, och dessutom som referensverk för framtiden. Jag gillar C++ Direkt av Jan Skansholm, men det finns en massa andra bra böcker också. Det är ju en smaksak det där, så det kan vara bra att investera lite tid och energi i att hitta en som funkar för dig.

Det är inte bara det att C++ är svårt att lära sig -- det suger också. Håll dig borta från C++, Froztbite! Java och C# är också B; undvik! Jag skulle rekommendera Python. Inte för att det är världens bästa språk, men det är minst krångligt att börja med. Tänk inte "Men jag är så bra, jag klarar C++/Java/C#" för det går inte att överkomma deras tillkortakommanden.

Permalänk
Medlem

Jag är jätte intresserad av programmering, men det jag är intresserad av är dock att programmera chip osv till bilar, finns det böcker ? eller någon hemsida där man lär sig hur man programmerar chip till bilar?

Visa signatur

NZXT Phantom Special Edition Red Stripes & I5 4670k 4.4ghz & Noctua D14 & Asus Z87-A ATX & Samsung 840 EVO 250GB & Sapphire R9 390X & OCZ FATAL1TY - 750 W & W10 PRO 64x & R.A.T 7 & Saitek Cyborg
LOL (WEST) Norowner!!! inte den bästa men inte den sämsta heller!

Permalänk
Medlem
Skrivet av tufflax:

Det är inte bara det att C++ är svårt att lära sig -- det suger också. Håll dig borta från C++, Froztbite! Java och C# är också B; undvik! Jag skulle rekommendera Python. Inte för att det är världens bästa språk, men det är minst krångligt att börja med. Tänk inte "Men jag är så bra, jag klarar C++/Java/C#" för det går inte att överkomma deras tillkortakommanden.

Utveckla med konkreta exempel. Varför suger C++? Varför bör de övriga språken du listar undvikas? Vilka är deras tillkortakommanden?

Visa signatur

Nu lurade jag dig att slösa bort ett par värdefulla sekunder av ditt liv på att läsa denna fullständigt poänglösa signatur!

Permalänk
Medlem
Skrivet av norowner:

Jag är jätte intresserad av programmering, men det jag är intresserad av är dock att programmera chip osv till bilar, finns det böcker ? eller någon hemsida där man lär sig hur man programmerar chip till bilar?

Oj, det där är ju helt beroende på vad det är frågan om för ECU, och på vilken nivå du vill rota i det. Det kan vara allt från att sitta i något program och mappa/ändra driftsparametrar från menyer, till att knacka assembly om du vill ändra ECU:ns funktion i grunden.

Är du ute efter att chiptrimma är det frågan om det förstnämnda, dvs ingen programmering alls i den bemärkelse ordet har i den här tråden. Det jävligaste där är väl egentligen att få tag i programvaran du behöver.

Vill du hålla på med det från grunden kan du ju kolla på Megasquirt och liknande projekt, och modifiera koden till dem efter behov.

Visa signatur

Nu lurade jag dig att slösa bort ett par värdefulla sekunder av ditt liv på att läsa denna fullständigt poänglösa signatur!

Permalänk

http://www.codecademy.com

har precis fixat en python-kurs som du kan testa. Jag har inte provat den själv, men jag gillade deras upplägg på css-kursen.

Visa signatur

i7-6700K | ASUS Z170 Pro Gaming | MSI GTX 1060 Gaming X 6GB | HyperX Fury 16GB | Sandisk Ultra II 960GB | BeQuiet Pure Rock | Fractal Design R5 | Corsair RM750x | Qpad Mk-50 | Qpad 8K | Dell 2412m

Permalänk
Medlem
Skrivet av kaput:

Oj, det där är ju helt beroende på vad det är frågan om för ECU, och på vilken nivå du vill rota i det. Det kan vara allt från att sitta i något program och mappa/ändra driftsparametrar från menyer, till att knacka assembly om du vill ändra ECU:ns funktion i grunden.

Är du ute efter att chiptrimma är det frågan om det förstnämnda, dvs ingen programmering alls i den bemärkelse ordet har i den här tråden. Det jävligaste där är väl egentligen att få tag i programvaran du behöver.

Vill du hålla på med det från grunden kan du ju kolla på Megasquirt och liknande projekt, och modifiera koden till dem efter behov.

det ska vara till att trimma bilar :/

Visa signatur

NZXT Phantom Special Edition Red Stripes & I5 4670k 4.4ghz & Noctua D14 & Asus Z87-A ATX & Samsung 840 EVO 250GB & Sapphire R9 390X & OCZ FATAL1TY - 750 W & W10 PRO 64x & R.A.T 7 & Saitek Cyborg
LOL (WEST) Norowner!!! inte den bästa men inte den sämsta heller!

Permalänk
Medlem
Skrivet av norowner:

det ska vara till att trimma bilar :/

Mjo, obviously, det finns inte så värst många andra skäl till att man skulle börja fippla med ECU:er. Men är det frågan om att typ bara mappa om klabbet, eller att börja rota i det hela på lite mer fundamental nivå som i att göra det på riktigt och därmed som delmoment vara tvungen att byta ut insprutningsdatorn/tändningscontrollern/yadda yadda helt och hållet? Var ligger ambitionsnivån?

Visa signatur

Nu lurade jag dig att slösa bort ett par värdefulla sekunder av ditt liv på att läsa denna fullständigt poänglösa signatur!

Permalänk
Medlem
Skrivet av kaput:

Mjo, obviously, det finns inte så värst många andra skäl till att man skulle börja fippla med ECU:er. Men är det frågan om att typ bara mappa om klabbet, eller att börja rota i det hela på lite mer fundamental nivå som i att göra det på riktigt och därmed som delmoment vara tvungen att byta ut insprutningsdatorn/tändningscontrollern/yadda yadda helt och hållet? Var ligger ambitionsnivån?

att liksom ta ut ett chip o programmera den o sen sätta tillbaka den i bilen vilket kommer ge mer effekt, :/ är inte helt inne på det ifall det e ecuer eller något annat, ska fråga brorsan som e mekaniker o kör sportbilar o får se vad jag får för svar

Visa signatur

NZXT Phantom Special Edition Red Stripes & I5 4670k 4.4ghz & Noctua D14 & Asus Z87-A ATX & Samsung 840 EVO 250GB & Sapphire R9 390X & OCZ FATAL1TY - 750 W & W10 PRO 64x & R.A.T 7 & Saitek Cyborg
LOL (WEST) Norowner!!! inte den bästa men inte den sämsta heller!

Permalänk
Medlem

+1 på python. Lätt att lära, stort community, du slipper bli klassad som ruby-on-rails-hipster och kan lätt integrera C om du behöver gå på lägre nivå.

Permalänk
Datavetare

Om du helst vill ha guider på svenska så ska du nog titta på någon av de riktigt stora, i bemärkelsen populära, språken som C, C++, C# eller Java. Av dessa är C det enklaste språket, följt av Java, C# och C++. Med enklaste menar jag i detta fall: om du läser språkdefinitionen, hur stor är den och hur många finesser och specialfall har språket. Det säger däremot inget om hur svårt det faktiskt är att skriva program i respektive språk.

Men som redan påpekats flera gånger så beror det mycket på vad du vill använda dina kunskaper till. Det går faktiskt att lära sig programmera med vilket språk som helst, själv började jag med BASIC på en C=64 men insåg snabbat att det resulterade i för långsamma program för att skriva roliga saker som spel och demos, så nästa steg blev 8502/8510-assembler och det gick ju att lära sig

För att göra en lite och inte alls komplett lista på bra språk vs vilken faktor som är viktigast. Har försökt sortera dem från vänster till höger, men ordningen kan definitivt diskuteras

Enkelt språk (kort och simpel språkdefinition): Scheme, Lisp, Clojure, Python
Används mycket i industrin: C, Java , C#, C++
Programmera mobila enheter: ObjC (iOS), Java (Android), C/C++ (Android, iOS, WP8, Symbian), C# (WP7/8)
Programmera webbapplikationer: JavaScript
"Back-end"-system, många konsulter jobbar med detta, handlar mycket om att anpassa system till företag/tjänster: Java, C#
Spel: C++ (går att göra simpla spel i vad som helst, professionella spel är i nära nog 100% av fallen utvecklade i C++)
Operativsystem: C
Simpla inbyggda-system som t.ex. mikrocontrollers (då det pratats om detta i tråden): C, assembler
Inbyggda-system, 32/64-bit som kör Linux eller ett RTOS likt VxWorks(Linux håller helt på ta över denna marknad): C (är överlägset vanligast), C++, Java
Server-programvara, likt webservers, databaser, sökmotorer: C, C++, Go, Erlang

Om du vill ha ett förslag så håller jag med många andra här, Python är ett utmärkt alternativ att lära sig programmera i. Inte på svenska, men Codecademy har ju online guide för bl.a. Python.

Men även Go har en on-line guide där du kan skriva och köra dina program direkt i webläsaren och det hela är indelat som en simpel steg-för-steg guide med förklaringar kring vilken finess man nu demonstrerar.

Och känner du för C++, go for it. Det är otroligt populärt att hacka på C++ och säga att det suger, men trots att många hävdar att det är djävlens påfund så skrivs nästa alla spel och nära nog alla professionella desktop-applikationer i C++, kanske visar att det inte är helt oanvändbart ändå. C++ skapar, Bjarne Stroustrup, har ett extremt träffande citat kring detta:
There are only two kinds of programming languages: those people always bitch about and those nobody uses.

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

MIT publicerar en del kurser öppet på nätet och har bland annat en introduktionskurs till C++ med kursmaterial, labbar och lösningar. Jag ögnade igenom den snabbt och det verkar vara helt okej material med ett härligt LaTeX-utseende!

Har man aldrig programmerat innan så är det möjligt att MIT:s grundkurs i datorvetenskap är bättre att börja med. Kursmaterialet är väldigt omfattande och innehåller även en del videoföreläsningar om man inte gillar att läsa.

Permalänk
Medlem
Skrivet av kaput:

Utveckla med konkreta exempel. Varför suger C++? Varför bör de övriga språken du listar undvikas? Vilka är deras tillkortakommanden?

Det är svårt att förklara kortfattat, kolla dessa länkar.
http://yosefk.com/c++fqa/defective.html
http://www.infoq.com/presentations/Simple-Made-Easy
http://www.infoq.com/presentations/Value-Values

Varför C++ suger är bäst förklarat på sidan dit första länken länkar. Varför Java och C# (och C++ för många av punkterna) suger är (några av dessa punkter kanske inte stämmer för C#, det var ett tag sen jag använde det):
* Mutable state är horribelt.
* Att programmera Java känns som att försöka ta sig igenom en hinderbana -- det låter en inte fokusera på problemet man försöker lösa utan man måste göra massa annat. Allt är bökigt: Jaha, du vill ha en lista av listor med blande objekt? ArrayList<ArrayList<Object>>, osv.
* OOP är sjukt överskattat.
* Funktioner är inte first-class.
* Det finns inte makron.
* Inga literaler för datastrukturer.
* De är inte "homoiconic".
* Extremt svårt, i de flesta fall, att skriva program med många trådar.
* Det är komplext (med den definition som ges av länk 2), d.v.s. klasser t.ex. väver samman många koncept, t.ex. state, identity/values, namespaces, arv, polymorfism, osv. Det betyder att man inte kan få t.ex. polymorfism utan klasser med arv.
* Massa annat som är jobbigt, t.ex. integer overflow och ingen tail call optimization; man kan definiera en variabel med ett interface, t.ex. List lst = new ArrayList(), men man kan inte på nått sätt visa att objektet implementerar två eller fler interfaces, etc.
* Ingen "nil punning", d.v.s. man kan inte, i många fall, hantera null som ett vanligt värde. Det leder till mycket extra kod, t.ex. try/catch och specialfall.
* Koden blir alltid sjukt lång i dessa språk.

Alla som är intresserade av programmering borde kolla på de två sista länkarna, de är sjukt intressanta.

Permalänk
Medlem
Visa signatur

R7 5800X3D | MSI X470 GAMING PLUS | 32GB 3200MHz CL16 | Powercolor Radeon RX 5700XT 8GB Red Dragon | Samsung 850 EVO 500GB | Samsung 860 EVO 1TB | Kingston A2000 1TB | 2x 3TB HDD | Seasonic FOCUS Plus 650W Gold

Permalänk
Datavetare
Skrivet av tufflax:

Text som återfinns ovan

Tänker inte säga emot dig i att C++ har en hel del vårtor och det råder inget tvivel om att C++ är en av de mest komplicerade språk som finns, möjligen det mest komplicerade, med C# som god 2:a.

Men det du skriver ovan är stämmer väldigt dåligt på C++ och inte speciellt bra på C# heller.

  • mutable state kan vara komplicerat att hantera på ett korrekt sätt, speciellt i multi-trådade applikationer. Men tittar man på det pragmatiskt i stället: hur fungerar en CPU och framförallt, hur skriver man kod som exekverar väldigt effektivt på en modern CPU? Vill man skriva effektiv kod så MÅSTE den tyvärr vara mutable för det passar CPU-cachar och liknande bättre. Varför tror du Clojure har "transient", jo därför att "persistent datatype" kan inte implementeras på ett väldigt effektivt sätt i dagens CPUer?

  • C++ stödjer immutable state på språknivå då data kan deklareras "const" och metoder kan deklareras "const". Fungerar ej i Java och C# dock.

  • OOP ÄR extremt överskatta och passar definitivt inte i alla lägen. C++, till skillnad från Java/C#, tvingar dig inte att alltid använda OOP till allt

  • Funktioner ÄR first-class i både C++ (nya standarden) och C#, Java får inte detta innan Java8

  • C++ har makron, både i preprocessorn (som man i.o.f.s bör undvika) och via meta-programmering med templates (som är allt annat än enkelt, men det var inte poängen). C# och Java saknar helt detta.

  • Om "inga literarel för datastrukturer" är vad jag tror det är: C++11 har detta. Ge gärna ett exempel på vad du menar

  • "homoiconic", nej tror faktiskt Lisp och Lisp-dialekter som Clojure och Scheme är ensamma om detta. Varför man använder JavaScript och inte en Lisp dialekt för "webprogrammering" är en därför ett mysterium för mig då möjligheten att hantera kod och data på samma sätt borde vara en killer feature här

  • Det är svårt att skriva effektiva och korrekta program som använder flera trådar i ALLA programspråk. I Clojure, som vi ser från våra avatarer att båda gillar, är det relativt enkelt att skriva korrekta program som kör på flera trådar, men de blir tyvärr inte speciellt effektiva på dagens CPU:er. Go och Erlang är nog de bästa språk du kan hitta för "concurrent programming". C/C++/Fortran tillsammans med tillägg som Cilk+ eller OpenMP är de överlägset bästa språket för "parallel programming".

  • Du hävdar att koden blir väldigt lång. Java må vara ganska pratigt, C# är klart bättre. Men vilket språk blir ett icke-trivalt program speciellt mycket kortare än C++, C# eller Java? Har sett väldigt många C#-anhängare hävda att C# blir då mycket kortare än C++, men i de få fall man får se ett exempel så inser man att de inte begripigt ett smack kring STL och gör därför saker otroligt komplicerat och ineffektivt i C++.

Har försökt använda Clojure en del då jag verkligen gillar att lyssna till vad Rich Hickey (skapare av språket Clojure för de som undrar) har att säga, han är definitivt en riktigt skarp utvecklare. Men har svårt att hitta saker som språket verkligen är det bästa alternativet. Problemen jag har med språket är

  • har aldrig gillat dynamiskt typade språk då det alltid har resulterar i fel som en kompilator till ett statiskt typat språk skulle ha hittat. Har i.o.f.s. upplevt detta mer i Python, som vi använde en del på jobbet, än i Clojure. Å andra sådan är det just dynamisk typning som möjliggör vissa riktigt coola saker i Lisp, detta skulle bli rätt komplicerat att fixa med templates i C++. Exempel taget från langref.org, är jag som skrivit de flesta Clojure exempel där

    ; skapa histogram som visar hur många gånger en viss sak förekommer i en lista (->> ["a" :atom "a" "c" :atom :atom 1234.5 1234.5] (group-by identity) (reduce (fn [m e="e"] (assoc m (first e) (count (second e)))) {})) ; resultatet blir {1234.5 2, "c" 1, :atom 3, "a" 2}

  • clojure program är 2-10 gånger långsammare jämfört med motsvarande Java-program, och båda dessa språk kör ju ovanpå en JVM

  • clojure presenteras som ett utmärk program för "concurrent programming", men implementationen av "agents" och "send-off" metoden är "broken by design" för all form av seriös I/O-intesiv programmering då varje "send-off" skapar en ny kernel-thread(!). Detta skalar inte för fem öre, jämför detta med Go och Erlang som utan problem kan ha 100.000-tals simultana kontext som alla gör blockande I/O och systemet tuffar fortfarande på som inget har hänt.

Edit: uppdaterade Clojure exemplet så listan har saker av olika typ, vilket gör det ÄNNU svårare att göra motsvarande i ett statiskt typat språk.

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

[QUOTE=Yoshman;12596621]

  1. C++ stödjer immutable state på språknivå då data kan deklareras "const" och metoder kan deklareras "const". Fungerar ej i Java och C# dock.

  2. OOP ÄR extremt överskatta och passar definitivt inte i alla lägen. C++, till skillnad från Java/C#, tvingar dig inte att alltid använda OOP till allt

  3. C++ har makron, både i preprocessorn (som man i.o.f.s bör undvika) och via meta-programmering med templates (som är allt annat än enkelt, men det var inte poängen). C# och Java saknar helt detta.

  4. Om "inga literarel för datastrukturer" är vad jag tror det är: C++11 har detta. Ge gärna ett exempel på vad du menar

  5. Du hävdar att koden blir väldigt lång. Java må vara ganska pratigt, C# är klart bättre. Men vilket språk blir ett icke-trivalt program speciellt mycket kortare än C++, C# eller Java? Har sett väldigt många C#-anhängare hävda att C# blir då mycket kortare än C++, men i de få fall man får se ett exempel så inser man att de inte begripigt ett smack kring STL och gör därför saker otroligt komplicerat och ineffektivt i C++.

  6. Men har svårt att hitta saker som språket verkligen är det bästa alternativet.

  7. har aldrig gillat dynamiskt typade språk

  8. clojure program är 2-10 gånger långsammare jämfört med motsvarande Java-program, och båda dessa språk kör ju ovanpå en JVM

[/QUOTE]

  1. Men hur gör man om man vill ha en vektor där ett element är ändrat? Måste man inte kopiera hela vektorn då?

  2. Man behöver inte göra objekt kanske, men kan man få alla features, t.ex. polymorfi utan klasser?

  3. C-makron är inte lika kraftfulla och säkra som Clojures makron, väl? Har inte använt det så mycket.

  4. Med literaler menar jag att man kan skriva t.ex. en lista [1, 2, 3] och använda den precis som om det vore en referens, t.ex. som i Python: [1, 2, 3].remove(1).

  5. I Clojure blir koden kortare. Och i Ruby, och Python, och säkert andra språk jag inte kan, som Haskell t.ex.

  6. Clojure passar till nästan allt som Java burkar användas till.

  7. Jag har alltid hatat statiskt typade språk för de burkar vara så oflexibla, i alla fall de jag har sett.

  8. Man kan ju skriva Java i Clojure, då borde det bli exakt samma prestanda (och bättre syntax). Men i alla fall, datastrukturerna är lite långsammare, men i övrigt så borde det inte vara så mycket som behöver vara långsammare. Jag har inte mätt själv.

I alla fall, om jag bara fick programmera Java, C, C++ eller C# så skulle jag byta karriär. Usch och fy! Fattar inte hur folk pallar med dem.

Permalänk
Medlem
Skrivet av tufflax:

Det är svårt att förklara kortfattat, kolla dessa länkar.
http://yosefk.com/c++fqa/defective.html
http://www.infoq.com/presentations/Simple-Made-Easy
http://www.infoq.com/presentations/Value-Values

Varför C++ suger är bäst förklarat på sidan dit första länken länkar. Varför Java och C# (och C++ för många av punkterna) suger är (några av dessa punkter kanske inte stämmer för C#, det var ett tag sen jag använde det):
* Mutable state är horribelt.
* Att programmera Java känns som att försöka ta sig igenom en hinderbana -- det låter en inte fokusera på problemet man försöker lösa utan man måste göra massa annat. Allt är bökigt: Jaha, du vill ha en lista av listor med blande objekt? ArrayList<ArrayList<Object>>, osv.
* OOP är sjukt överskattat.
* Funktioner är inte first-class.
* Det finns inte makron.
* Inga literaler för datastrukturer.
* De är inte "homoiconic".
* Extremt svårt, i de flesta fall, att skriva program med många trådar.
* Det är komplext (med den definition som ges av länk 2), d.v.s. klasser t.ex. väver samman många koncept, t.ex. state, identity/values, namespaces, arv, polymorfism, osv. Det betyder att man inte kan få t.ex. polymorfism utan klasser med arv.
* Massa annat som är jobbigt, t.ex. integer overflow och ingen tail call optimization; man kan definiera en variabel med ett interface, t.ex. List lst = new ArrayList(), men man kan inte på nått sätt visa att objektet implementerar två eller fler interfaces, etc.
* Ingen "nil punning", d.v.s. man kan inte, i många fall, hantera null som ett vanligt värde. Det leder till mycket extra kod, t.ex. try/catch och specialfall.
* Koden blir alltid sjukt lång i dessa språk.

Alla som är intresserade av programmering borde kolla på de två sista länkarna, de är sjukt intressanta.

Dold text

Ah, ett mycket bättre svar än ett ounderbyggt påstående att språken suger och bör undvikas

Kan tyvärr inte se filmerna, då jag f.n. sitter mitt ute på havet och surfar via världens tröttaste satellitlänk, men känner igen en del i artikeln där. Är dock långt från en så avancerad programmerare att jag kan nicka igenkännande på samtliga punkter, har helt enkelt inte hållit på med sådant som gjort att den beskrivna problematiken drabbat mig.

Sedan är väl frågan om det finns något språk som prickar rätt på samtliga punkter. Jag har förvisso inte så mycket referensmaterial, men det känns som att man skulle kunna hitta liknande listor om varenda språk som existerar. Sådant som är fördelaktigt i en situation kan vara en nackdel i en annan, och det är väl alltid någon form av tradeoff som måste göras i en ända för att vinna mark i en annan.

Om jag kommer ihåg det tar jag en kik på filmerna när jag kommer hem om ett par veckor.

Skrivet av norowner:

att liksom ta ut ett chip o programmera den o sen sätta tillbaka den i bilen vilket kommer ge mer effekt, :/ är inte helt inne på det ifall det e ecuer eller något annat, ska fråga brorsan som e mekaniker o kör sportbilar o får se vad jag får för svar

Åhå, det gör du via en färdig programvara om det alls går, det är alltså inte frågan om någon regelrätt programmering.

Något förenklat kan du se mappen som en matris med värden på vilken öppningsgrad spridarna ska ha, och vid vilken vevvinkel spridarna ska börja spruta in (helt enkelt: hur mycket soppa ska motorn få, och när ska den få den), vid olika lastfall. Du har varvtal på ena axeln, och massflödet luft genom manifoldern på andra. Programmet i sig styr egentligen bara hårdvaran, interpolerar fram värden utefter mappen, och gör förhållandevis minimala korrektioner av bränsletillförseln utgående från lambdavärde och data från knacksensorerna om sådana finns. I realiteten är det nog något fler parametrar med i bilden på en modern bil, för att ytterligare kunna optimera förbränningen. Det som är intressant för dig att modifiera är hursomhelst mappen, inte programmet i sig.

Det skulle dock inte förvåna mig det minsta om det normala är att man helt enkelt byter ut den befintliga promen som mappen ligger lagrad på mot en dito med en aggressivare map, och sedan kompenserar programmet för eventuella individuella egenskaper hos varje motor mha lambda- och knacksensorer live. Man ska alltså inte ens vara säker på att det går att plocka ut chipet, skriva en ny map till det, och stoppa tillbaka det.

Det andra alternativet är att mappa manuellt genom att helt enkelt köra bilen i bromsbänk och försöka nå de driftslägen som mappen täcker, och sedan ställa in bränsleblandningen med lambdavärdet som referens. Om det nu går att ändra själva mappen live, så är det fortfarande frågan om att sitta i ett program på laptopen och ändra värden i detta, inte att sitta och skriva regelrätt kod. Detta tror jag dock generellt sett det inte går att göra på de insprutningsdatorer som sitter i vanliga bilar, utan det ska till customgrejer. Och även om det går ska du komma över programvaran för att göra det, och den lär tillverkarna/de auktoriserade verkstäderna hålla hårt i.

Vill du verkligen ha möjlighet att mappa exakt som du vill, är det nog dessvärre så att du måste byta ut hela insprutningsdatorn. Vill du utöver det hålla på med programmering som är relaterad till biltrimning, så är det antingen att designa din egen insprutningsdator, eller att involvera dig i något av de DIY-projekt som redan finns, som gäller. Det är dock inte direkt nybörjargrejer om man säger så.

Visa signatur

Nu lurade jag dig att slösa bort ett par värdefulla sekunder av ditt liv på att läsa denna fullständigt poänglösa signatur!

Permalänk
Datavetare
Skrivet av tufflax:
  1. Men hur gör man om man vill ha en vektor där ett element är ändrat? Måste man inte kopiera hela vektorn då?

  2. Man behöver inte göra objekt kanske, men kan man få alla features, t.ex. polymorfi utan klasser?

  3. C-makron är inte lika kraftfulla och säkra som Clojures makron, väl? Har inte använt det så mycket.

  4. Med literaler menar jag att man kan skriva t.ex. en lista [1, 2, 3] och använda den precis som om det vore en referens, t.ex. som i Python: [1, 2, 3].remove(1).

  5. I Clojure blir koden kortare. Och i Ruby, och Python, och säkert andra språk jag inte kan, som Haskell t.ex.

  6. Clojure passar till nästan allt som Java burkar användas till.

  7. Jag har alltid hatat statiskt typade språk för de burkar vara så oflexibla, i alla fall de jag har sett.

  8. Man kan ju skriva Java i Clojure, då borde det bli exakt samma prestanda (och bättre syntax). Men i alla fall, datastrukturerna är lite långsammare, men i övrigt så borde det inte vara så mycket som behöver vara långsammare. Jag har inte mätt själv.

I alla fall, om jag bara fick programmera Java, C, C++ eller C# så skulle jag byta karriär. Usch och fy! Fattar inte hur folk pallar med dem.

  1. I en naiv implementation: ja. Men det inget som hindrar att man använder sig av persistent data types precis som i Clojure. Avsett vilket så kommer det definitivt bli långsammare än att använda en mutable list och använder man C++ så bryr man sig ofta om effektivitet

  2. I C++ finns det inget krav på att ha klasser bara för att få polyformism och har aldrig varit det sedan första versionen. Med s.k. "value argument templates" (template-parameters är ett värde och inte en typ, kom i slutet av 90-talet) så kan du även få samma flexibilitet som i Clojures "multimethod", d.v.s. foo(1) och foo(2) kan anropa olika funktioner, trots att de bara skiljer sig i värdet och inte typen som är "int" i båda fallen.

  3. I Lisp och Lisp-dialekter då kan man direkt modifiera AST (Abstract Syntax Tree), mig veterligen kan inget annat språk detta, så ja: det finns saker du kan göra i Lisp med makron som inte går att göra i C++.

  4. I C++11 kan du skriva remove({1,2,3}, 1) eller vector<int>({1,2,3}).size() (remove är inte medlem av "vector"). BTW: [1,2,3].remove(1) i Python är en meningslöst då det skapar en temporär list, tar bort element '1' ur denna och kastar bort resultatet. Men förstår poängen.

  5. Du är långt ifrån den första som hävdar detta och för små och eventuellt medelstora program kan jag till viss del hålla med, beror på vad programmet gör. I stora program stämmer det helt enkelt inte. Visst kommer det vara en skillnad, men den kommer vara inte alls vara den "faktor 10 mindre" som vissa hävdar att t.ex. Python blir jämfört med C++. Skulle säga att skillnaden kommer definitivt vara mindre än en faktor 2.

  6. Clojure är ett bättre val än Java i många fall där Java idag används, men det finns definitivt områden där Clojure helt enkelt inte går att använda men Java fungerar. Dels så tar Clojure program något mer RAM än motsvarande Java program, så program med väldigt stora data-set kanske inte fungerar. Sedan så körs program skrivna i Java snabbare än motsvarande program skrivet i Clojure (se nästa punkt) så prestanda kan bli för dåligt

  7. Det är en åsikt och du får ha vilken du vill. Statiskt typade språk har tre stora fördelar. De exekverar snabbare då kompilatorn har mer information och kan därför göra mer aggressiva optimeringar (testa att lägg till type-hints i Clojure i en inre loop, det kan göra STOR skillnad). Uppenbara buggar där man t.ex. använder en sträng där det måste vara ett nummer hittas tidigare (lägre utvecklingskostnad då buggar hittas tidigare). Saker som "intellisense" är betydligt mycket enklare och mer träffsäkert om språket är statiskt typat, något Anders Hejlsberg, skapare av C#, väldigt ofta brukar tala om.

  8. Mät och se att du har fel. Lägg sedan till type-hints till ditt program och se att det i många fall blir klart snabbare då kompilatorn kan optimera lite till, men det är fortfarande inte lika snabbat som Java. Här finns en sådan mätning , notera att många av Clojure programmen använder type-hints och ändå är 2-12 gånger långsammare än Java. Notera också att Clojure använder mellan 1-6 gånger så mycket RAM. Och då använder Java 3-50 gånger så mycket RAM som C++....

Jag skriver C "for a living". Anledningen till att vi kör C är därför att programvaran används i områden som är extremt prestandakritiskt och där vi och våra konkurrenter tävlar i att ha den snabbaste och mest skalbara (över många CPU-kärnor) programvara då kunderna är beredd att betala väldigt mycket pengar för att de i sin tur ska kunna bygga produkter som är snabbare och mer effektiva än deras konkurrenter. Tycker det är otroligt intressant och mycket av de problemen du tar upp kring mutable-state och liknande finns naturligtvis, men för att citera Rob Pike, en av grundarna av Go,
share by communicating, don't communicate by sharing
skriver man sitt program på detta sätt så är mutable-state en tillgång (ger snabbare program) och problemen undviks då data inte delas mellan trådar. Vad Clojure hjälper dig med är att på ett säkert och korrekt sätt kommunicera genom att dela och det ÄR svårt att göra rätt i ett språk med "mutable" state.

Visa signatur

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

Permalänk
Datavetare

Ber om ursäkt för att denna tråd spårat ur lite.

Men som kompensation kan jag försöka skriva någon som är on-topic och luta mig lite på diskussionen ovan

En ganska fundamental del i designen av ett språk är hur typer hanteras. Exempel på typer är helttal, strängar och varje klass är en distrikt typ. Ett språk kan vara "stark" eller "svagt" typat, det kan också vara "dynamiskt" eller "statiskt" typat. Ibland ser man att folk blandar ihop dessa koncept och bara talar om svagt/dynamiskt typade språk som samma sak och starkt/statiskt typade språk som samma sak, vilket är nonsens.

Statiskt typade språk verifierar att källkoden uppfyller alla krav på att en acceptabel typ används i alla anrop och tilldelningar vid kompilering

Dynamiskt typade språk verifierar att en acceptabel typ används när programmet körs.

Ett starkt typat hindrar dig som programmera från att använda "fel" typ. Om funktionen vill ha ett heltal och du skickar med flyttalet 1.0 så kommer det inte accepteras då dessa två har olika typer.

Ett svagt typat försöker konvertera sina argument till något som "verkar vettigt" om det inte är rätt typ från början.

Som vanligt är saker och ting inte svart och vitt. Språk är oftast endera statiskt typade eller dynamiskt typade, men starkt/svag skalan är väldigt flytande.

Några exempel:
Python, Clojure: dynamiskt & starkt typat
1 + "10" bli fel, listor av typen [1, "10"] är inga problem

JavaScript, Perl, TCL: dynamiskt & svagt typat
1 + "10" = 11, listor av typen [1, "10"] är inget problem

C++, C#, Java: statiskt & starkt typat
1 + "10" kompilerar inte, listor av typen [1,"10"] går att få till men blir krånligt då man måste gå via en gemensam typ eller via en typ som kan innehålla 1 och "10" på något sätt (finns bibliotek för detta för C++, t.ex. boost)

C: statiskt & relativt svagt typat då pekare till alla typer alltid kan hanteras som pekar till okänt, void*, och void* kan tilldelas till pekare av vilken typ som helst...
1 + "10" kompilerar inte, listor av typen [1,"10"] är lite svårt att prata om då C inte har listor som del av språket, går inte att skapa en array som innehåller detta. Går alltid att skapa en lista som har element av typen "void*" och då fungerar det ju.

Sedan har vi Go... Det är rent formellt statiskt & starkt typat, men språket hanterar konceptet "interface" på ett väldigt annorlunda sätt. Personligen har jag inte använt Go speciellt mycket ännu, men av det lilla jag testat måste jag säga att språket verkar briljant i hur det löst problemet. I Go så finns inga klasser och inte typ-hierarkier. En typ implementerar ett givet interface om typen har alla metoder som ett visst interface innehåller. Resultatet av detta är att man får polymorfism, man får statisk typ-check, men man kan ändå programmera i stort sett på exakt samma sätt som i dynamiskt typade språk som t.ex. Python och Clojure! Man kan också jobba med objekt på samma sätt som i OOP-språken (C++, Java, C# m.fl)!

Vilket som passar dig bäst går inte att säga, beror väldigt mycket på vad du vill göra. Men efter att skrivit ett brandtal om Go så vill jag nog ändra min rekommendation från Python till Go. Du behöver ju inte ens installera något för att börja lära dig, länken jag listade ovan, d.v.s http://golang.org/ låter dig skriva och köra Go-program direkt i din webbläsare. Naturligtvis kan du installera Go på din dator också, finns för gratis nedladdning för Windows, Linux och OSX.

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
Skrivet av Yoshman:

Du är långt ifrån den första som hävdar detta och för små och eventuellt medelstora program kan jag till viss del hålla med, beror på vad programmet gör. I stora program stämmer det helt enkelt inte. Visst kommer det vara en skillnad, men den kommer vara inte alls vara den "faktor 10 mindre" som vissa hävdar att t.ex. Python blir jämfört med C++. Skulle säga att skillnaden kommer definitivt vara mindre än en faktor 2.

Hm, hur kan detta vara sant? Jag måste erkänna att jag inte har skrivit några jättelånga program. Men jag fattar inte hur t.ex. Java och Clojure skulle kunna konvergera mot samma längd. Varje liten del av programmet borde ju bli mycket kortare i Clojure, precis som i ett litet program. Dessutom: I ett stort program borde det förekomma en del upprepning/boilerplate, så makron borde kunna utnyttjas mer i stora program.

Permalänk
Medlem

bra tråd !!

Permalänk
Medlem

Kolla Mr1.buying

Han förklarar allting, väldigt lätt att förstå, många programmeringsspråk, på svenska.

Lycka till!

Permalänk
Skrivet av Froztbite1337:

Hej, som rubriken lyder så vill jag lära mig programmera. Spel och/eller "filmklipp".
Har INGEN SOM HELLST tidigare erfarenhet av detta.

Vill ha hjälp med detta: Någon som vet något bra program att börja med? C++ har jag hört om men vet inte vilket som är det bästa för en "noob"?
Och någon guide till just det programmet som ni rekommenderar (HELLST på svenska, guiden alltså).

JÄTTE tacksam för hjälp!

/Froztbite1337

Jag hade föreslagit java som förstaspråk, ingen minneshantering, lättare felmeddelanden, kan göra mycket...
Skulle i så fall också rekommendera att läsa boken Objektorienterad Programmering och Java av Per Holm samt att ta hjälp av http://docs.oracle.com/javase/7/docs/api/index.html. På oracles hemsida finns även en del tutorials om java. I valet av editor rekommenderar jag Eclipse, en av de bästa för ny som gammal vad gäller Java...

Visa signatur

Corsair Vengeance LPX 4x8GB DDR4 2666MHz CL16 | Intel Core i7 6700 3,4 GHz 8MB | MSI Z170A KRAIT GAMING | Corsair Force Series 3 120 GB | Seagate SSHD Desktop 2 TB 7200 RPM 3,5" | Creative Sound Blaster Z PCIe | Western Digital 500 GB | Samsung Writemaster | Corsair TX750 V2 750 W | EVGA GeForce GTX 970 4GB SSC ACX 2.0+| Fractal Design Define R5 (Svart)