Att börja programmera - Lite tankar, åsikter och massa frågor.

Permalänk
Medlem

Att börja programmera - Lite tankar, åsikter och massa frågor.

Hejsan!

Jo jag känner till att det finns fler trådar om detta än konsulter på ericsson, men tiderna förändras, och så gör programmeringsspråken också. Vid några tidigare tillfällen har jag ren amatörmässigt syslat med lite simpel qbasicprogrammering, och även provat på c++ och pascal. Dock är det nu nästan 10 år sedan, och sen dess har det säkert tillkommit en mängd språk, både små och stora. Har nu äntligen lite tid över att börja igen. Här om dagen var jag på bokhandeln och köpte C++ programmering 5:e upplagan. Dock är jag ännu lite osäker om det verkligen är just C++ jag vill börja lära mig. Många här på forumer talar sig varma för C sharp (C#) vilket tydligare ska vara likt C++ på många sätt. Dock verkar detta enbart vara till för dem som önskar göra applikationer till windowsplattformen.

Plattformsoberoende?
C++ är vad jag förstått inte plattformsoberoende, men det finns dock möjlighet att porta koden mellan olika plattformar. Min ambition är att jag ska kunna arbreta med koden både under Vista och Linux. Om man läser var många utvecklare skriver här på forumet är det dessutom relativt enkelt att lära sig C# efter att man lärt sig C++ då stora likheter finns. Dock är jag inte säker på att det är varken C# eller C++ som jag vill börja med då det mig veterligen finns en mängd andra språk som blir mer och mer populära. Vissa språk går vad jag förståt (fel?) även hand i hand. Detta gäller kanske mer när det kommer till utveckling av hemsidor?

Vad jag vill ha hjälp med?
Vad jag önskar hjälp med är att välja ett språk som är framtidssäkert. Vilken litteratur som är bra att köpa för en nybörjare, och vilket program och kompilator jag ska använda. Då jag mer och mer övergår till Linux är det även en stor fördel om språket är dominerande inom opensource så jag lite längre fram får möjlighet att göra mina egna ändrignar. Jag har ännu inte bestämt mig för att utesluta något språk, men självklart finns det något som väger lite tyngre. Tar emot alla förslag, tips och åsikter.

Tack på förhand, och tack för ett bra forum.

Permalänk
Glömsk

Notera att det är tre olika saker att lära sig programmera, lära sig ett språk och lära sig skapa program. Du bör just nu koncentrera dig på att lära dig att programmera, först senare bör du lära dig språk. Ditt problem nu är att du kommer vara tvungen att lära dig ett språk och lära dig programmera samtidigt. Du bör därför välja ett språk som är inte är ivägen när du lär dig programmera.

Det viktigaste är därför att du lär dig ett litet språk eftersom du då kan lägga ner mer hjärnkapacitet på programmeringen istället för språket. Stora språk som C++/C#/Java etc bör du undvika nu i början i min mening. Två små språk som är beprövade är C och Python. Om du har en akademisk/matematisk ådra i dig skulle du kunna kolla in Scheme eller Haskell, men de flesta brukar inte lära dig dessa som första språk.

De relativa meriterna mellan C och Python (och hundratals andra språk) kommer andra att svara på, dessa trådar har en tendens att bli långa.

Visa signatur

...man is not free unless government is limited. There's a clear cause and effect here that is as neat and predictable as a law of physics: As government expands, liberty contracts.

Permalänk
Medlem

Jag håller med ovanstående talare.

Angående litteratur så är The C Programming Language en klassiker. Vill du börja med Python så finns t.ex. Dive Into Python som finns gratis på internets (finns som trävara också, ISBN 1590593561).

Permalänk
Medlem

Python är det jag rekommenderar till alla som vill börja programmera nuförtiden då det är simpelt och väldigt bra lätt att lära sig grunderna i programmering med det. Jag rekommenderar också "Dive Into Python" som Akira länkade till.

Permalänk
Medlem

Av de språk du beskrev där är nog python det bästa att börja med.
Själv leker jag mycket Scheme, mest för enkelhetens och flexibilitetens skull. Vill man prova på det så är Dr Scheme en bra miljö att leka med, och boken How To Design Programs (http://www.htdp.org/2003-09-26/Book/) en perfekt start för nybörjare.

Visa signatur

void@qnet
teeworlds, stålverk80, evil schemer, c, c++
Languages shape the way we think, or don't.

Permalänk
Medlem

Pscionist har rätt, koncentrera dig på att lära dig programmera innan du lär dig ett språk - det är mycket lättare om man först kan sätta sig in i tänkandet. Python eller Ruby rekommenderas till detta.

När du sedan ska lära dig ett språk så skulle jag nog välja C++. Visst, de andra språken har sina fördelar men C++ är sjukt portabelt till skillnad från många av de andra. Det är dessutom modernare och lättare än C och Delphi. Vill du vara lite annorlunda kan du testa D också. C# är som sagt väldigt ickeportabelt även om det är lätt att lära sig - JAVA är lika lätt men blir ofta tungt då koden måste köras i en VM. Assembler behöver du inte fundera på, det är sjukt oportabelt och rätt så svårt.

tl;dr:
1. Få in tankesättet i programmering m.h.a. Python eller Ruby
2. Lär dig C++, C# eller D

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av You

C# är som sagt väldigt ickeportabelt även om det är lätt att lära sig - JAVA är lika lätt men blir ofta tungt då koden måste köras i en VM. Assembler behöver du inte fundera på, det är sjukt oportabelt och rätt så svårt.

Du har i princip rätt, men jag har lite kommentarer. C# finns nu även på Linux och Mac OS i form av Mono, fast mono ligger lite efter microsofts implementation. Det går med andra ord att programmera portabel C#, men det är inget jag rekommenderar.

Att Java skulle vara långsamt för att det körs i en VM är inte heller riktigt sant nu för tiden. För några år sedan kunde Java vara riktigt långsamt, men de har nu kommit ikapp en hel del sedan dess. Även om det inte riktigt är lika snabbt som t.ex. c så är det inte olämpligt som nybörjarspråk på grund av det. Fast jag rekommenderar nog ändå inte Java p.g.a. dess överdrivna objektorientering och andra underligheter.

Och som du säger så är Assembler oportabelt och rätt svårt, men det kan ändå vara värt att lära sig. Inte för att programmera i, utan snarare för ge en större förståelse för hur högnivåspråk fungerar i grunden. Detta är dock inget som en nybörjare ska bör hålla på med, men som erfaren programmerare är det inte så dumt att åtminstone förstå hur assembler fungerar.

Till MIllard så är min rekommendation som de flesta andra här att börja med Python. Det är lätt och tvingar även på dig en del vanor som korrekt indentering. Det används även flitigt inom open source, och finns oftast förinstallerat i många linuxdistributioner. När du börjat få grepp om grunderna i programmering så kan det vara bra att testa lite andra språk som t.ex. C++. Även lite annorlunda språk som Lisp, Scheme, Haskell eller Ruby kan vara bra att testa, för att ge lite insikt i andra programmeringsparadigmer.

Permalänk
Hedersmedlem

Jag rekommenderar också Python. Som Psionicist skrev så behöver man ett språk som inte är ivägen.

C# är mer likt Java en C++ tycker jag. Man får skilja på syntaxen för saker där alla tre är rätt lika och på hur det är uppbyggt med objektorienteringen, pekare etc.
C, C++ och assembler ger en så mycket åtkomst till hårdvaran och skapar hinder.
Ingen som försöker sig på att lära sig progammera borde få fastna i pointer hell.

Java och C# kan också uppfattas som att ha en viss överdrivenhet i objektorienteringen. Python är ju också objektorienterat men det håller sig på lagom nivå.

Om man har ådra för matematik och vill lösa sådana mer teoretiska uppgifter så är funktionella programmeringsspråk bra. De känns "rena" och gör det man vill. Att koda dem är dock mer annorlunda än de tidigare nämnda högnivåspråken.
Nu kan man inte dela in språk i distinkta kategorier. T.ex. Objective Caml (OCaml) som är funktionellt med OO utökning och man kan "fula" sig och skriva imperativt.
Python är väl mest imperativt men man kan skriva rätt snygg funktionell stil.

Visa signatur

Forumregler | Feedbackforumet | Något som behöver modereras? Tryck på Anmäl inlägget och ge en anledning, någon moderator kommer granska inlägget och göra (egen) bedömning
"Fate. Protects fools, little children and ships named Enterprise." - Riker - ST:TNG

Permalänk
Medlem

Delphi (objektorienterad Pascal) är nischat och utdaterat, Assembler är inget nybörjarspråk och C++ är en onödigt stor utvecklingsplattform för en nybörjare. De vettiga alternativen av de du listat är för mig alltså C, Java, C# och Python.

C är ett bra nybörjarspråk för att lära sig programstrukturer och syntax, men det kan vara svårt att se möjligheterna i språket. Mycket arbete krävs för att utforma GUI och ännu mer arbete för att göra det bra. Som nybörjare vill man känna att man åstadkommer något! Att man lyckas och att det går framåt. Python är ett väldigt bra nybörjarspråk som är lätt att komma igång med, men lider också lite av dessa svårfångade framtidsutsikter. Det du vill lära dig är ett språk där fantasin sätter gränserna och inte tekniken eller framkomligheten.

Om du hade varit absolut nybörjare hade jag avrått dig ifrån både Java och C# och föreslagit Python, men om du har koll på grundläggande programstruktur (iteration, variabelhantering osv.) slår jag ett slag för C#. Som tidigare nämnt är det inte fullt lika portabelt som Java, men fördelarna är många. Du lär dig göra enkla applikationer på ett kick, litteraturen är väldigt rakt på sak och lättförståelig (till skillnad från många delar av Java) samt syntaxen är så lik både Java och C/C++ att du kan lära dig dessa senare. Det kanske är mer "hardcore" att kasta sig in i C++ direkt, men du kommer generellt att lära dig programmera snabbare genom att starta med C#.

Poängen är att när du lärt dig ett språk har du en stor erfarenhet att dra nytta av när du börjar med nästa språk. Risken är stor att du tröttnar på att aldrig se någon ände på hur många klasser, paket och gränslöst med funktioner det finns i Java. Det skulle vara tråkigt! Därför är det bra att börja med att skaffa sig perspektiv, och det gör du snabbast genom att lära dig ett språk som är roligt och du känner att du kan producera något i. När du använder C# är det lättare att begränsa sig, du kan lära dig en sak i taget utan att någonsin behöva skriva rader med kod som du inte förstår. Om man fastnar i ett problem i Java och hittar en guide till lösning, är den ofta så avancerad att man känner sig efterbliven innan man ens börjat lära sig språket. Så kände jag i alla fall, när jag började med Java.

Sammanfattningen lyder; börja med ett roligt och produktivt språk med en syntax som tillåter dig att lära dig de större språken lätt när tiden är inne; jag slår ett slag för C#. Känner du att du är väldigt ny på programmering är det dock bättre att programmera lite Python först så att du får igång hjärncellerna

Lycka till!

Permalänk
Medlem

Tack för alla svar.

Har ställt samma fråga på lite olika forum, och flertalet verkar rekomendera pyton, men det finns även ett stort antal som talar sig varma för andra språk. Vad jag förstått är skillnaden mellan språken rätt stor. Och den kanske största skillnaden är att språk som java, C# och python innehåller Garbage collector vilket språk som C, C++ och assembler inte gör. Att lyckas skjuta sig själv i foten med dessa språk är alltså större än med de förstnämda språken. Det har samtidigt blossat upp en debatt om skillnad i snabbhet mellan språken. Då framförallt när det gäller javas snabbhet. Som novis är det inte det lättaste att solla mellan det stora urval som finns. Många tycker att är det C++ som jag vill lära mig ska jag också börja med det, medan andra säger att om jag börjar med python kommer det sedan gå snabbare att lära sig språk som tex C++. Har det rätt?

Frågor

1. Vilka fallgropar finns det i de olika språken?

2. Vid vilken nivå i C++ programmeringen måste man börja tänka på att ta med minnealkoleringen i beräkningen? Knappast i ett "Hello world!" program får jag hoppas, men är det steget efter?

3. De projekt som jag tänker hålla mig till som aboslut novis är självklart helt textbaserade, och kommer inte vara windows/X11 baserade. På sin höjd en textmeny där man kan navigera med piltangenterna. Är då språk som tex Java och C# optimala?

Kommer säkert att komma till ett dussin frågor, men dessa är de jag kommer på just nu.

Tack för alla svar.

Permalänk
Medlem

Att man pratar om att språken är olika snabba är inget som du som nybörjare behöver bry dig om. Du ska ju lära dig att programmera och skriva små enkla textprogram som du själv säger, och då gör det ingen som helst skillnad om språk X gör operation A snabbare än språk Y. Så strunta i alla såna diskussioner tills vidare är mitt tips.

Angående minnesallokering i C++ så behöver man inte det så mycket i början, utan det är mer när man börjar komma in på objektorientering som det krävs. Det är egentligen inte heller svårt, utan det är nog mer pekare som nybörjare brukar få problem med att greppa. Fast pekare är inte så farliga heller ;).

Min åsikt är som jag redan sagt att du borde börja med Python. Majoriteten här verkar tycka samma åsikt. Det kommer alltid att finnas personer som tycker att du ska använda just deras favoritspråk istället, men det är mycket viktigare att börja programmera än att diskutera vilket språk du ska använda.

Så här, jag kan hjälpa dig igång. Du skriver ju att du använder Linux mer och mer, så starta Linux om du inte redan använder det. Öppna en terminal och skriv python, och gå sedan in på denna sida i valfri webbläsare. Sen är det bara att börja programmera

Permalänk
Avstängd

Re: Att börja programmera - Lite tankar, åsikter och massa frågor.

Citat:

Ursprungligen inskrivet av MIllard
Plattformsoberoende?
C++ är vad jag förstått inte plattformsoberoende, men det finns dock möjlighet att porta koden mellan olika plattformar.

Skall du göra ett kommersiellt program för olika plattforma så finns inget bättre än C++.

Nu vet jag inte hur duktig du är men:
- Javascript är hett, lär dig det
- Assembler är väldigt bra och kunna för att få en förståelse för vad som händer, du kommer däremot aldrig göra något program i det. Kan man inte assembler så kan man aldrig bli en riktigt bra programmerare.
- C++ är absolut det språk du skall lära dig om du tycker programmering är riktigt skoj och vill bli duktig..

Svårigheten i programmering ligger inte i språket, språket är bara ett medel för att få fram vad du vill. Svårigheterna ligger i design av kod. Kunna hålla ihop koden och skriva kod som går och bygga på eller byta ut delar mot andra delar.

Python är ett mycket bra skriptspråk samt det har väldigt många komponenter man kan använda sig av. Men det är egentligen inget språk man använder för att skapa funktionalitet, snarare använder du dig av python för att binda ihop funktionalitet från diverse olika komponenter.

Visa signatur

Programmerare med C++ som huvudspråk.

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av gosh
Nu vet jag inte hur duktig du är men:
- Javascript är hett, lär dig det
- Assembler är väldigt bra och kunna för att få en förståelse för vad som händer, du kommer däremot aldrig göra något program i det. Kan man inte assembler så kan man aldrig bli en riktigt bra programmerare.
- C++ är absolut det språk du skall lära dig om du tycker programmering är riktigt skoj och vill bli duktig..

Skulle nog inte påstå att man måste lära sig assembler för att bli en riktigt bra programmerare, men det är ju helt klart en fördel (kan dock ingen assembler själv så vad vet jag.) Javascript är väl lite irrelevant, det är ju väldigt centrerat runt just HTML och har inget annat än de grundläggande kontrollstrukturerna gemensamt men något annat språk.

Citat:

Ursprungligen inskrivet av gosh
Python är ett mycket bra skriptspråk samt det har väldigt många komponenter man kan använda sig av. Men det är egentligen inget språk man använder för att skapa funktionalitet, snarare använder du dig av python för att binda ihop funktionalitet från diverse olika komponenter.

Personligen tycker jag nog att Python kan vara väldigt bra just i början, när man bara vill ha in det lite speciella tankesättet man måste ha när man programmerar - som många sagt så behöver man inte tänka så mycket på minneshantering, variabeltyper, pekare och annat som kan ta emot lite i C++. Python är också trevligt om man vill skriva mindre program (eller, egentligen skript) snabbt. Håller däremot med om att man inte bör göra något större i Python.

Permalänk
Medlem

Re: Re: Att börja programmera - Lite tankar, åsikter och massa frågor.

Citat:

Ursprungligen inskrivet av gosh
- Assembler är väldigt bra och kunna för att få en förståelse för vad som händer, du kommer däremot aldrig göra något program i det. Kan man inte assembler så kan man aldrig bli en riktigt bra programmerare.
- C++ är absolut det språk du skall lära dig om du tycker programmering är riktigt skoj och vill bli duktig..

Man har fördel av Assembler i programmering av de mer maskinnära språken, men man har ingen nytta av Assembler i högre abstraktionsnivåer. Snarare tvärtom, det kan vara svårt att hålla isär hierarkin och tankebanorna.

Att C++ är "absolut det språk" som krävs för att bli en duktig programmerare är fel. En duktig programmerare betecknas inte av vilket språk man kan utan av sin erfarenhet, bredd och förmåga att ta sig till nya språk och tankebanor. C++ må ingå i erfarenheten, men inget enskilt språk är direkt knutet till kompetens.

Permalänk
Avstängd

Re: Re: Re: Att börja programmera - Lite tankar, åsikter och massa frågor.

Citat:

Ursprungligen inskrivet av azoapes
Man har fördel av Assembler i programmering av de mer maskinnära språken, men man har ingen nytta av Assembler i högre abstraktionsnivåer. Snarare tvärtom, det kan vara svårt att hålla isär hierarkin och tankebanorna.

Du har massor av fördel att kunna assembler även om du inte programmerar i det (det gör knappt någon idag). Kan du inte hur processorn arbetar så förstår du inte vad som händer med språket när det konverteras till något som datorn förstår.
Vet du hur processorn jobbar så kan du direkt räkna ut vad som går snabbt och vad som går långsamt när du programmerar, du behöver inte prestandatesta m.m. Vet du inte hur processorn jobbar så blir det gissningslekar vilket knappt leder någon vart.

Dessutom är det så lätt och lära sig assembler så det är bara onödigt och låta bli.

Visa signatur

Programmerare med C++ som huvudspråk.

Permalänk
Medlem

Re: Re: Re: Re: Att börja programmera - Lite tankar, åsikter och massa frågor.

Citat:

Ursprungligen inskrivet av gosh
Du har massor av fördel att kunna assembler även om du inte programmerar i det (det gör knappt någon idag). Kan du inte hur processorn arbetar så förstår du inte vad som händer med språket när det konverteras till något som datorn förstår.
Vet du hur processorn jobbar så kan du direkt räkna ut vad som går snabbt och vad som går långsamt när du programmerar, du behöver inte prestandatesta m.m. Vet du inte hur processorn jobbar så blir det gissningslekar vilket knappt leder någon vart.

Som sagt har man ingen nytta av Assembler i de högre abstraktionsnivåerna, men jag håller med om att man har nytta av att förstå hur en processor arbetar i de flesta språk. Till exempel är det i C++ många gånger kritiskt. Assembler är dock inte det enda sättet att lära sig detta på och i sammanhanget ser jag inte Assembler som en bra start på trådskaparens programmerarkarriär.

Permalänk
Avstängd

Re: Re: Re: Re: Re: Att börja programmera - Lite tankar, åsikter och massa frågor.

Citat:

Ursprungligen inskrivet av azoapes
Som sagt har man ingen nytta av Assembler i de högre abstraktionsnivåerna, men jag håller med om att man har nytta av att förstå hur en processor arbetar i de flesta språk. Till exempel är det i C++ många gånger kritiskt. Assembler är dock inte det enda sättet att lära sig detta på och i sammanhanget ser jag inte Assembler som en bra start på trådskaparens programmerarkarriär.

Är det inte "kritiskt" i andra språk förutom C++ att förstå hur processorn arbetar?
På vilket annat sätt kan man lära sig hur processorn arbetar om man inte lär sig assembler?

Exakt vad som är en bra start beror på hur avancerad TS vill bli och vilken typ av programmering han fokuserar på.

Visa signatur

Programmerare med C++ som huvudspråk.

Permalänk
Medlem

Re: Re: Re: Re: Re: Re: Att börja programmera - Lite tankar, åsikter och massa frågor

Citat:

Ursprungligen inskrivet av gosh
Är det inte "kritiskt" i andra språk förutom C++ att förstå hur processorn arbetar?

Varför måste man veta exakt hur processorn arbetar om man t.ex. programmerare i Lisp/Scheme? Det man bör fokusera på först och främst är själva problemlösningen.

Visa signatur

Intel Core i7-3770K | NVIDIA Geforce GTX 980 | 16 GB DDR3 | DELL P2415Q | DELL U2711 | DELL U2410

Permalänk

Jag tänkte bara snabbt lägga in min åsikt här. Jag började med C++ i måndags i skolan, och jag har innan dess ingen "riktig" programmeringskunskap, jag höll på lite, men enbart lite, med PHP vid yngre dagar men det är ju helt borta nu.

I alla fall, när jag först tittade på lite C++-kodning så blev jag direkt såld, då en person som satt precis brevid mig använde sig av Java, och det såg helt ärligt lite krångligare ut. Givetvis var den första uppgiften en "Hello World!"-uppgift, och sedan skulle vi lägga till en funktion då den frågade efter ens namn, och därefter skulle ett trevligt svar ges. Min kodning blev i jämförelse med Java-vännens kodning hälften så kort, och såg generellt mycket simplare ut. Därför har i alla fall jag fått intrycket av att det är lite simplare att komma in i, och vi pillade lite på Java veckan innan, och även det var ordentligt lätt.

Alltså, så rekommenderar jag C++ direkt, jag fann det i alla fall extremt kul att programmera med (Kan också tipsa om att möjligtvis använda Ubuntu när du programmerar, då det finns en medföljande kompilator (G++) samt en inbyggd manual direkt i terminalen).

Permalänk

Ett generellt tips för trådskaparen är att åtminstone till en början hålla sig till etablerad litteratur och inte lägga alltför stort värde i åsikter som folk har om ämnet programmering. Många som programmerar har dålig koll på sin okunskap och tenderar att överskatta sin kompetens ganska grovt vilket medför att komplicerade frågeställningar ofta reduceras till diskussioner om tekniska trivialiteter.

Utöver detta så har redan Psionicist sagt mesta som finns att säga och jag såg att boken "How to Design Programs" redan rekomenderats. Att lära sig C++ som sitt första seriösa programmeringsspråk är ingen omöjlighet men då krävs det motivitation och den får man inte genom att ägna sig åt diskussioner på nätet.

Ett par andra böcker du kan ta en titt på (stigande svårighetsgrad):

Python Programming: An Introduction to Computer Science
Accelerated C++
Feynman Lectures on Computation
Structure and Interpretation of Computer Programs
Programming Pearls
Introduction to Algorithms
Artificial Intelligence: A Modern Approach
Computer Architecture: A Quantitative Approach
Introduction to the Theory of Computation

Permalänk
Avstängd

Re: Re: Re: Re: Re: Re: Re: Att börja programmera - Lite tankar, åsikter och massa fr

Citat:

Ursprungligen inskrivet av MagnusL
Varför måste man veta exakt hur processorn arbetar om man t.ex. programmerare i Lisp/Scheme? Det man bör fokusera på först och främst är själva problemlösningen.

Finns det något motsatsförhållande i de två områdena?
Givetvis spelar det mindre roll angående kunskapen om hur processorn jobbar om man skiter fullständigt i hastighet. Men det är fortfarande bra och veta istället för att tro att det är en liten magisk låda.

Visa signatur

Programmerare med C++ som huvudspråk.

Permalänk

Jag tycker man ska kolla runt vad folk i sin bekantskapskrets programmerar då det inte är lika roligt att göra något själv, där man inte har någon som man kan fråga.
Sedan välja ett populärt språk, jag tror flera av oss har programmet för ett API som ger 0 kod-exempel-träffar för när man söker på google, det enda man har en akademisk skriven html-hjälp-fil utan i princip ett enda exempel, johoo.
Nu är de nämnda språken inte så ovanliga, men tar vi c/c++java och c# så finns det hur gott om hjälp som helst. Där jag skulle välja språk beroende på mål.
Är man en person som vill ha snabbt resultat och inte ha planer att spendera en stor del framför datorn och koda, såvisst kan man börja med C#.
Det finns så förbaskat massa saker som man ska kunna och är man inte riktigt begåvad så måste man prioritera. (även inom området programmering)

Visa signatur

[Core i7-3930K med 32GB ram, 2*256GB SSD] & [Core i7 3770K med 16 GB RAM, 256GB SSD] som tillsammans har ett [HD 5850 1GB] och 3st 24".

Permalänk
Medlem

Klart man ska förstå vad en processor gör, men det är inte alltid det primära med att programmera.

Ofta kan man börja med en abstraktion och ett annat beräkningssystem för att sedan lära sig vad som egentligen händer när man förstår hur algoritmer fungerar.

Visa signatur

void@qnet
teeworlds, stålverk80, evil schemer, c, c++
Languages shape the way we think, or don't.

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av gosh
Är det inte "kritiskt" i andra språk förutom C++ att förstå hur processorn arbetar?
På vilket annat sätt kan man lära sig hur processorn arbetar om man inte lär sig assembler?

Exakt vad som är en bra start beror på hur avancerad TS vill bli och vilken typ av programmering han fokuserar på.

Nej, det är inte kritiskt i högnivåspråk som exempelvis dotNET. Man kan lära sig processorarkitektur genom litteratur och teori, tester och andra lågnivåspråk än Assembler.

Det är där skon klämmer. Du påstår att man måste lära sig Assembler för att bli en avancerad/kompetent programmerare, och det stämmer inte generellt.

Citat:

Ursprungligen inskrivet av gosh
Finns det något motsatsförhållande i de två områdena?
Givetvis spelar det mindre roll angående kunskapen om hur processorn jobbar om man skiter fullständigt i hastighet. Men det är fortfarande bra och veta istället för att tro att det är en liten magisk låda.

För att optimera hastigheten måste man börja med att optimera sin algoritm för antalet klockcykler. De marginella skillnaderna i optimeringen kan sedan pressas ytterligare med justeringar som tar hänsyn till processorns arbetssätt, men de påverkar inte om processorn ändå måste utföra sitt arbete flera gånger om. De är inte motsatser, men logik går före teknikaliteter och man skiter inte ett dugg i hastigheten genom att inte kunna processorns arbetssätt om man programmerar LISP.

Som jdv skriver; det är väldigt sällan det primära i programmeringen. Det enda självklara undantaget jag ser här är spelprogrammering.

Att Java skulle vara krångligare än C++ går inte att påstå. Det är sant för ett program, men falsk för ett annat.

Permalänk
Avstängd
Citat:

Ursprungligen inskrivet av azoapes
Nej, det är inte kritiskt i högnivåspråk som exempelvis dotNET. Man kan lära sig processorarkitektur genom litteratur och teori, tester och andra lågnivåspråk än Assembler.

Det innebär att du måste läsa om, testa eller kunna teoretiskt om allt du använder. Hur mycket extra jobb är inte det jämfört med att förstå hur datorn jobbar.
Om du skall lära dig gångertabellen, väljer du då att lära dig alla möjliga olika tal utantill eller försöker du lära dig hur man gångrar (tekniken bakom).

Förstår du hur processorn jobbar, hur den bearbetar minne m.m. så kan du direkt räkna ut när du bör använda en array istället för länkad lista eller annan typ av listtyp. Vet du inte hur processorn jobbar så måste du eventuellt testa dem. Det är riskabelt för är man inte van så kan man välja fel typ av lista i början och inte förstå att man har lite data och testa med, när det väl går ut till kund och fylls med mycket mer information så blir det helt andra resultat snabbhetsmässigt.

Känner man till hur processorn jobbar så förstår man direkt varför det är snabbare och lagra en referens till objekt istället för att kopiera hela objektet, man vet varför det tar längre tid och lagra på heapen istället för att ha det på stacken eller varför inte "garbage collection".

Trådhantering, undantag (exceptions), komponentanvändande, grafik, minneshantering, plattformsoberoende kod o.s.v. är alla områden som man får mycket mer förståelse för om man förstår hur processorn jobbar.

Hade folk vetat mer om assembler så hade diskussioner likt denna varit mycket mer ovanliga.

Visa signatur

Programmerare med C++ som huvudspråk.

Permalänk
Citat:

Ursprungligen inskrivet av gosh
Känner man till hur processorn jobbar så förstår man direkt varför det är snabbare och lagra en referens till objekt istället för att kopiera hela objektet, man vet varför det tar längre tid och lagra på heapen istället för att ha det på stacken eller varför inte "garbage collection".

Det räcker att läsa en grundläggande programmeringsbok i t.ex. java för att också lära sig detta.

Jag håller helt med om man skall bli duktig c/c++ programmerare så är assembler och en förbaskat massa matte en självklarhet, det går inte heller säga att denna kunskap är onödig för något språk.
Däremot kan man i frågosätta om det verkligen alla programmerare behöver kunna detta? Med professionell programmerare är en som tjänar pengar på vad den gör, och är man t.ex. superduktig på C# i kombination med APIn till process simulate så kan man plocka ut en 100papp i månaden. Detta utan att ens ha hört talas om ordet assembler.
Och detta gäller mycket annat, matematiska algoritmer som "Least mean square", skitsamma om man inte förstår den, det går att kopiera någon annans kod.

Man kan göra riktigt bra program utan att de är så optimerade, speciellt på dagens snabba persondatorer. Samma är det med småspel, visst ska man göra riktiga kommersionella spel så måste man kunna optimera kod, men då får man dessutom vara beredd på att satsa den tiden som det krävs för att lära sig programmera.
*edit*
Soteringsalgoritmer, ja det är bara googla och så får man en väldigt massa och man kan läsa om när de är bra. Sedan är det bara copy & paste.. Ingen mening för alla programmera att förstå sig på mer än de grundläggande.

Dessutom går det mot att mindre rena kodare behövs och mer bredare, -Jag känner t.o.m. maskiningenjörer som sitter och kodar för fullt. Där kunskapen inom både maskiningenjörsämnerna och programmering ofta är en brist för deras program. Och assembler är ett av det sista de funderar på att lära sig.

Så utvecklingen går mot enklare språk och där de vanliga programmerare allt mindre behöver förstå sig på programmering och det är deras ideer och kunskaper kring annat som räknas. Sedan behövs det alltid en grupp elite-programmerare.

Visa signatur

[Core i7-3930K med 32GB ram, 2*256GB SSD] & [Core i7 3770K med 16 GB RAM, 256GB SSD] som tillsammans har ett [HD 5850 1GB] och 3st 24".

Permalänk
Avstängd
Citat:

Ursprungligen inskrivet av bud_bundy
Däremot kan man i frågosätta om det verkligen alla programmerare behöver kunna detta?

det är klart att man inte måste, men det är korkat och inte göra det för alternativet är så mycket jobbigare. Det finns många vägar att ta sig från A till B, bättre att använda raka vägar jämfört mer krokiga eller kanske till och med köra av vägen.

Citat:

Ursprungligen inskrivet av bud_bundy
Med professionell programmerare är en som tjänar pengar på vad den gör, och är man t.ex. superduktig på C# i kombination med APIn till process simulate så kan man plocka ut en 100papp i månaden. Detta utan att ens ha hört talas om ordet assembler.

Det handlar mer om säljare som lyckas sälja in konsulter till okunniga köpare, eller om man själv lyckas sälja in sig. det är nästan vanligare att projekt ballar ur jämfört med att de lyckas. bara och titta på statliga it-projekt och hur mycket pengar de kastat bort där.

Visa signatur

Programmerare med C++ som huvudspråk.

Permalänk
Hedersmedlem
Citat:

Ursprungligen inskrivet av bud_bundy
Jag känner t.o.m. maskiningenjörer som sitter och kodar för fullt. Där kunskapen inom både maskiningenjörsämnerna och programmering ofta är en brist för deras program. Och assembler är ett av det sista de funderar på att lära sig.

Är du säker på att de inte har läst assembler? Talar vi civil- eller högskoleingenjörer för övrigt?

Permalänk
Citat:

Ursprungligen inskrivet av Elgot
Är du säker på att de inte har läst assembler? Talar vi civil- eller högskoleingenjörer för övrigt?

Både och, nu är jag dock dålig insatt i exakt vad en civil-maskiningenjör läser, men så värst mycket programmering är det inte. En vanlig maskiningenjör så kan det vara strukturerad C, PLC, Labview samt matlab + det nya som kommer efter på arbetet/fortsättningsprogrammet.
Någon assembler x86, vet jag då inget maskiningenjörsprogram som har.
*edit*
Visst vissa har dock lite kunskap från gymnasiet, men då är instruktionslista i PLC mer givande för att nivån var så låg. I instruktionssista gäller det att tungan rätt i mun med stacken..

Visa signatur

[Core i7-3930K med 32GB ram, 2*256GB SSD] & [Core i7 3770K med 16 GB RAM, 256GB SSD] som tillsammans har ett [HD 5850 1GB] och 3st 24".

Permalänk
Hedersmedlem
Citat:

Ursprungligen inskrivet av bud_bundy
Både och, nu är jag dock dålig insatt i exakt vad en civil-maskiningenjör läser, men så värst mycket programmering är det inte. En vanlig maskiningenjör så kan det vara strukturerad C, PLC, Labview samt matlab + det nya som kommer efter på arbetet/fortsättningsprogrammet.
Någon assembler x86, vet jag då inget maskiningenjörsprogram som har.

Jag vet egentligen inte heller vad en maskiningenjör läser, men någon sorts mikrodatorkurs med tillhörande assemblerprogrammering (inte x86 i och för sig) brukar kunna ingå och vara populär att läsa.