Gå til innhold

[Løst] Hvor burde jeg lære programmering og hvilket språk?


Anbefalte innlegg

 

Tingen er at fyren ønsker å lære seg å programmere, ikke lære seg topic X for å gjøre Y. Spesielt til slikt er Haskell og Lisp to utmerkede valg.

Er du sikker? Programmering er uansett et verktøy, altså noe man bruker for å gjøre Y. Selvsagt, det er et morsomt, interessant og fasinerende verktøy, både å bruke og å lære om - men det er i bunn og grunn et verktøy.

 

Ganske. Det er et verktøy, ja, men det er mulig å bruke verktøy på svært dårlig og ineffektiv måte.

 

Hovedgrunnen til at jeg annbefalte trådstarter å (foreløpig) holde seg unna Lisp etc. er ikke at jeg synes at det er forferdelige og ubrukelige språk - det synes jeg ikke (men min noe begrensede Lisp-erfaring hører ikke hjemme i denne tråden). Hovedgrunnen er nettopp pekeren til #1 - mangel på support. Om trådstarter har venner/foreldre/søsken (som gidder å lære bort) som kan Lisp, flott, gå for det. Hvis ikke, start et annet sted. Lisp er ikke det enkleste å google, og Python (etc.) er stort sett bedre dokumentert.

Support er det masser av. Jeg tror ikke største hinderet blir mangel på eksempler. Jeg vet heller ikke om copy-paste fra stackoverflow er den beste måten å lære noe på. That being said er grunnen til at jeg anbefaler spesielt haskell er at kompilatoren er ganske lite tilgivende, samtidig som språket er ganske fleksibelt. Man vil ikke få snåle, virker-som-om-de-er-rett-men-det-har-bugs-feil, man vil være nødt til å tenke gjennom nettopp hvordan programmet skal fungere etc.

 

Dessuten har lisp (og til dels haskell) ganske lav syntax overhead (hei C++).

 

Ja, det kommer til å være tungt å dra igang med lisp og haskell. Men det kommer til å være tungt uansett, og jeg tror den pedagogiske verdien er ganske høy. Scheme er et fint alternativ.

Endret av Lycantrophe
Lenke til kommentar
Videoannonse
Annonse

Jeg vil tro det også er verdifult for motivasjonen til en nybegynner å se noen resultater relativt fort, istedet for å klø seg i hodet over "tough love".

 

En annen grunn til at jeg er forsiktig med å annbefale disse språkene til en nybegynner, er at de (så vidt jeg husker - jeg er ikke veldig kjent med funksjonel programmering!) har en del konsepter som er ganske annerledes fra hva en vil møte i de fleste "vanlige" språk.

Lenke til kommentar

Det gjør du jo også med nevnte språk. Begge har repl, begge tillater ganske snedige programmer med ganske få linjer.

 

--

 

Og det er der jeg er så skrekkelig uenig med deg. Om du er nybegynner sitter du ikke inne med masse (gale) antagelser om hvordan ting skal gjøres, så funksjonelle konsepter er ikke noe vanskeligere enn, say, imperative. Husker du hvor magisk og diffust "objekter" var da du startet? Neppe, for nå er det mer eller mindre hard-wired. Jeg husker nemlig det som grusomt.

 

map vs. for er det perfekte eksempel. Jeg er 100% sikker på at jeg kan gi forståelse av map lenge før du har kommet gjennom syntax til for.

Endret av Lycantrophe
  • Liker 1
Lenke til kommentar

Det gjør du jo også med nevnte språk. Begge har repl, begge tillater ganske snedige programmer med ganske få linjer.

 

--

 

Og det er der jeg er så skrekkelig uenig med deg. Om du er nybegynner sitter du ikke inne med masse (gale) antagelser om hvordan ting skal gjøres, så funksjonelle konsepter er ikke noe vanskeligere enn, say, imperative. Husker du hvor magisk og diffust "objekter" var da du startet? Neppe, for nå er det mer eller mindre hard-wired. Jeg husker nemlig det som grusomt.

 

map vs. for er det perfekte eksempel. Jeg er 100% sikker på at jeg kan gi forståelse av map lenge før du har kommet gjennom syntax til for.

 

Python har muligheter for funksjonell programmering - noe som kan gi en "snill" start på dette, og vise en nybegynner situasjoner hvor det gjør ting mye enklere.

 

Hvordan ting "skal" gjøres, og "moralske" (rett/galt) bedømming av dette i en diskusjon om programmeringsspråk-typer... Vel. Fakta er at de fleste språk i dag er hovedsakelig imperative, så det å lære denne stilen først er ganske praktisk - når du kan denne stilen, så er de fleste nye språk bare litt syntax. Å kunne den imperative stilen gjør det ikke vanskeligere å lære funsjonell programmering (men det gjør det kanskje vanskeligere å motivere seg til å gjøre det det...).

 

Det fine med for-løkker er det at det er kun et ekstra keyword å forstå - ikke et helt nytt konsept. Å forstå en map vil jeg påstå krever en litt dypere forståelse av hva en funksjon egentlig er - og lambda-funsjoner er ikke det første jeg ville prøvd å forklare en nybegynner. Gitt at en allerede kan skrive enkel kode (type a = 3; b = a+4; print b;), så blir konseptet "løkker gjør at denne koden her kjøres mange ganger". I tillegg så matcher det bedre med hva maskinen faktisk gjør (også i en map, selv om dette kan implementeres på flere måter) - noe som gir en forståelse av hvor idiotisk dum maskinen faktisk er...

Lenke til kommentar

Python har muligheter for funksjonell programmering - noe som kan gi en "snill" start på dette, og vise en nybegynner situasjoner hvor det gjør ting mye enklere.

Ja, men det er ganske brukket. Dessuten misser du immutability, for eksempel. Takk guido!

 

Hvordan ting "skal" gjøres, og "moralske" (rett/galt) bedømming av dette i en diskusjon om programmeringsspråk-typer... Vel. Fakta er at de fleste språk i dag er hovedsakelig imperative, så det å lære denne stilen først er ganske praktisk - når du kan denne stilen, så er de fleste nye språk bare litt syntax.

Og jeg har sett hva slags kode det leder til. Urk. Dessuten er det få rent imperative språk igjen, de fleste er ganske ivrige på å ikke skrive slik.

 

Å kunne den imperative stilen gjør det ikke vanskeligere å lære funsjonell programmering (men det gjør det kanskje vanskeligere å motivere seg til å gjøre det det...).

"Hvordan løser jeg dette uten mutering? Hvor er løkken?". Så nei.

 

Det fine med for-løkker er det at det er kun et ekstra keyword å forstå - ikke et helt nytt konsept.

#1: Dette forutsetter at man allerede forstår løkker. #2: Det forutsetter at man allerede har (grei) forståelse av andre konsepter i imperative og imperative-arvede paradigmer. Om man starter fra scratch har man ikke disse forutsetningene.

 

Å forstå en map vil jeg påstå krever en litt dypere forståelse av hva en funksjon egentlig er - og lambda-funsjoner er ikke det første jeg ville prøvd å forklare en nybegynner.

#1: Lambda er ikke vanskeligere enn andre funksjoner.

#2: Hvem sier at man må bruke lambda? I språk som Haskell er lambda stort sett sett på som en siste utvei og syntaktisk støy.

#3: Funksjoner er "vanskelig" fordi de oppfører seg annerledes enn imperativ kode. Ser du?

 

Gitt at en allerede kan skrive enkel kode (type a = 3; b = a+4; print b;), så blir konseptet "løkker gjør at denne koden her kjøres mange ganger". I tillegg så matcher det bedre med hva maskinen faktisk gjør (også i en map, selv om dette kan implementeres på flere måter) - noe som gir en forståelse av hvor idiotisk dum maskinen faktisk er...

Se, og det er slik kode jeg skulle ønske at folk ikke lærte seg til. Det er ubrukelig og idiotisk og egentlig ikke spesielt lettere å forstå seg på. Discourage it from day one.'

 

edit: i tillegg eksponerer kode som du eksemplifiserer her betydelig vanskeligere konsepter som minneceller, mutering posisjoner og scope. Det er ganske mye å ha i hodet.

Endret av Lycantrophe
  • Liker 1
Lenke til kommentar

 

 

Pascal har endel veldig dumme ting, som at indekser starter på 1

hvor har du det fra ?

 

all de gangene jeg bruker det ( det vil si hele tiden ) så stater de fleste indekser på 0 ( null)

spesielt når det gjelder liste objekter

 

http://stackoverflow.com/questions/4083356/array-begin-from-0-or-1-in-delphi-5-0-pascal

 

Pascal er uryddig der. Som du selv sier, "de fleste indekser". Det er finnes ingen unnskyldning for å være inkonsekvent i et programmeringsspråk. Jeg vil si det er på linje med javascript arrays, som hvis du gir kun en parameter, og det er et tall uten anførselstegn rundt, vil gjøre arrayet så langt som tallet sier, mens i alle andre tilfeller lager ett element med verdien som er vedlagt. Det er hårreisende.

Lenke til kommentar

 

 

 

Pascal har endel veldig dumme ting, som at indekser starter på 1

hvor har du det fra ?

 

all de gangene jeg bruker det ( det vil si hele tiden ) så stater de fleste indekser på 0 ( null)

spesielt når det gjelder liste objekter

 

http://stackoverflow.com/questions/4083356/array-begin-from-0-or-1-in-delphi-5-0-pascal

 

Pascal er uryddig der. Som du selv sier, "de fleste indekser". Det er finnes ingen unnskyldning for å være inkonsekvent i et programmeringsspråk. Jeg vil si det er på linje med javascript arrays, som hvis du gir kun en parameter, og det er et tall uten anførselstegn rundt, vil gjøre arrayet så langt som tallet sier, mens i alle andre tilfeller lager ett element med verdien som er vedlagt. Det er hårreisende.

 

Det gjør det sikkert slik for at man skal kunne konvertere mellom alle datatypene

Lenke til kommentar

Etter å ha lest denne tråden, så skjønner jeg hvorfor ungdommen finner seg alle andre yrker enn programmering.

 

Hadde jeg lest denne tråden den gang jeg begynte å interessere meg for programmering, så hadde jeg blitt snekker eller sveiser i stedet.

 

TS har lyst til å lære seg programmering. Da er det to ting som teller - språket er lettlært, og det er morsomt å jobbe med.

 

At det er totalt unyttig i yrkeslivet er uviktig. At det ikke lærer deg de beste prinsippene er ikke i viktig. At språket er usikker er uviktig. At språket er lite elegant er også uviktig.

 

Det som er viktig er at man lærer seg grunnleggende elementer som variable, løkker, prosedyrer osv. Man trenger ikke mer enn til å lage algoritmer (uansett hvor innefektive de er) og løse enkle problemer. For hvis man holder på med dette et par måneder, og man føler at dette e r ikke noe for meg, så er det på tide å finne på noe anne. Men synes man det fortsatt er gøy; da er det greit å se på de mer avansert e språkene og se på hva som faktisk brukes ute i markedet,

Endret av tomsi42
  • Liker 4
Lenke til kommentar

Uenig. Jeg har ingen tro på at det er vanskeligere til å begynne med, men det er betydelig verre å bli kvitt en uvane eller et begrenset tankesett.

Jeg er uenig - fordi min erfaring er at det å være rigid i starten, det er det som begrenser fantasien. Det blir for mye regler og for lite lek. Og det er leken som skaper de gode ideene.

  • Liker 4
Lenke til kommentar

Min erfaring ( som uheldigvis bare har hold meg til pascal/delphi) er at det er litt for mange detaljer man bør lære seg

det blir selvsagt litt enklere hvis det er en høynivåspråk men der kan det også være mye å holde styr på

 

om man f.eks ønsker å lage seg en database så skal man ikke lenger bruke programgrinespråket man trodde man skulle bruke , nei da er det plutselig SQL som gjelder

 

Det kompliserer det en del , for det er ikke knoting på nivå med kommandolinjer man ønsker å jobbe etter

men derimot å klikke på et felt , fylle inn data , flytte til neste felt , eller kikke på en knapp eller menyvalg , skrive inn noe og så søke opp data.

Da ønsker man å programmere det inn gjennom programmeringsspråket

 

 

Aller helst hadde man sett at det gikk an å lage database uten så alt for mye koding

 

Noen ønsker jo bare å lage enkel programmer , men når man så skal bestemme hva programmet skal gjøer så er det ikke så enkelt likevel og man må bruke alt for mye tid til å sette seg inn detaljer for forstå hvordan man skal gjøre det

 

her er det nok store uenigheter om hvilket språk som vil fungerer best.

Endret av den andre elgen
Lenke til kommentar

Først vil jeg gjerne si at jeg er 100% enig med tomsi42 i post #90. Bra formulert! For å holde på motivasjonen når man starter med programmering for gøy, så bør det være gøy. For samtlige nybegynnere jeg har møtt, så er det gøy når programmet kjører og gjør sånn ca. det man ville at det skulle gjøre. Ikke nødvendigvis noe fryktelig avansert, men noe som utløser følelsen av "accomplishment" om du forstår hva jeg mener.

 

At det ikke lærer deg de beste prinsippene er ikke i viktig. At språket er lite elegant er også uviktig.

Uenig. Jeg har ingen tro på at det er vanskeligere til å begynne med, men det er betydelig verre å bli kvitt en uvane eller et begrenset tankesett.

 

Men igjen, selv om de språkene du nevner hadde vært langt bedre enn alt annet (noe jeg betviler), så er det langt færre som bruker dem, og langt vanskeligere å få hjelp. Særlig nybegynnerhjelp. Det i seg selv er grunn nok til å velge noe annet.

Og det er virkelig ikke vanskelig å få noe til å kjøre i f.eks. Python.

"Begrenset tankesett": Når man starter, så kan man ingenting, så man starter med et MEGET begrenset tankesett rundt programmering. Så lærer man mer, skjønner hvordan man formulerer enkle algoritmer, og etterhvert kan man skrive større ting. DA blir man ofte sulten på å lære mer, nye patterns, nye verktøy. Ikke ved å få det stappet ned i halsen som nybegynner, før man ser vitsen med de mer avanserte constructs'ene.

For å si det på en veldig enkel måte: Det kan være vanskelig å se vitsen med en map før du ser vitsen med å kunne repetere den samme operasjonen mange ganger.

Og til sist: Jeg mistenker at du anntar at målet med å lære seg å programmere er å bli *ekspert* i progammering. Jeg mistenker også at du tar feil.

Lenke til kommentar

Målet mitt når jeg skulle lære meg programmering var på ingen måte å være ekspert. Jeg ønsket egentlig å jobbe med markedsføring eller administrasjon innenfor IT eller da helst spillbransjen. Jeg ville bare ta et lite kurs i programmering slik at jeg kunne forstå basisen i hva de ansatte jobbet med og derfor kunne ta avgjørelser mer sett fra deres perspektiv. (Som en ideal "leder" burde)

Jeg stiller meg bak at i starten så er det lurt å velge noe lettere språk som er mer visuelt og enkelt og forstå. Fattern prøvde å lære meg C++ når jeg gikk i 9 klasse, men jeg var ikke moden nok til å forstå det, og forventet kanskje litt for mye av meg selv. Så jeg bestemte meg for at programmering var uhorvelig vanskelig og noe jeg aldri egentlig ville forstå.

 

Jeg hadde alltid vært over middels flink i Excel på skolen, til å lage forskjelige formler o.l. Skrev innviklede if'er/else'er fra venstre til høyre og hadde hele tiden kontroll på hva jeg skulle gjøre og hva jeg skrev. Det var informasjonsbehandlingsforeleseren min på høgskolen som halvveis ute i kurset spurte om jeg kunne være hjelpelærer i excel delen av det faget. Etter å ha pratet en stund med han ble jeg geleidet inn på kontoret til foreleseren i programmeringsfaget med beskjed om at her var det en ny student som skulle lære programmering. Og nå har jeg søkt på en ny bachelor innenfor programmering, fordi jeg ble så oppslukt av hvor morsomt det faget var.

 

Jeg er på ingen måte kjent med Python eller noen av de der, så jeg kan ikke si noe som helst om hvor kompliserte de er. Vi hadde Java i programmeringsfaget og jeg synes det var veldig greit å forholde seg til, selvom jeg bruker mest C# nå.

 

Jeg er veldig enig med Tomsi at det er viktig å få inn litt lek i programmeringen, språket burde være intuitivt og helst så selvsagt som mulig i starten. Det gjør det lettere å jobbe med, og gjør det lettere for vedkomne å se sammenhenger hvis de veldig raskt forstår hva det er de faktisk har skrevet.

 

Jeg lagde veldig tidlig i kurset et kampsystem til et tekstbasert rollespill. I starten var det totalt ueffektivt og helt forjævlig koding. Vi hadde ikke lært om løkker enda (og jeg er en sånn som lærer best i forelesning) så jeg løste problemet med mangel på looping ved å bare kopiere hele koden 100 ganger nedover textpad, med en if else hvert sted som sjekket om noen av karakterene var døde. Det er jo helt tåpelig koding, men det var kjempe gøy og motiverte meg til å sitte dag ut og inn og leke meg med det programmet jeg hadde laget. Og hver gang vi lærte noe nytt på skolen prøvde jeg å integrere det i koden min. Til slutt endte jeg opp med å bruke ordentlige klasser, kjørte gode løkker på kampsystemet mitt etc etc. Det viktigste var ikke at jeg gjorde alt så veldig effektivt i starten, men at jeg forsto hva jeg gjorde og hadde det gøy.

Endret av Perrern
  • Liker 2
Lenke til kommentar

Først vil jeg gjerne si at jeg er 100% enig med tomsi42 i post #90. Bra formulert! For å holde på motivasjonen når man starter med programmering for gøy, så bør det være gøy. For samtlige nybegynnere jeg har møtt, så er det gøy når programmet kjører og gjør sånn ca. det man ville at det skulle gjøre. Ikke nødvendigvis noe fryktelig avansert, men noe som utløser følelsen av "accomplishment" om du forstår hva jeg mener.

Jeg ser ikke hvordan språkene jeg har nevnt er noe hinder for det.

 

Men igjen, selv om de språkene du nevner hadde vært langt bedre enn alt annet (noe jeg betviler), så er det langt færre som bruker dem, og langt vanskeligere å få hjelp. Særlig nybegynnerhjelp. Det i seg selv er grunn nok til å velge noe annet.

Internett er stort, det er masse hjelp å få. Har du noe mer enn disse antagelsene på hvor vanskelig det er å få hjelp?

 

Og det er virkelig ikke vanskelig å få noe til å kjøre i f.eks. Python.

Og det er virkelig ikke vanskelig å få noe til å kjøre i f.eks. Haskell.

 

"Begrenset tankesett": Når man starter, så kan man ingenting, så man starter med et MEGET begrenset tankesett rundt programmering. Så lærer man mer, skjønner hvordan man formulerer enkle algoritmer, og etterhvert kan man skrive større ting.

Men dette er generelt og ikke knyttet til et spesifikt språk.

 

DA blir man ofte sulten på å lære mer, nye patterns, nye verktøy. Ikke ved å få det stappet ned i halsen som nybegynner, før man ser vitsen med de mer avanserte constructs'ene.

Jeg så noen foreslå Java og C#.

 

class HelloWorld {
    public static void main( String[] args ) {
        System.out.println( "Hello, World!" );
    }
}
:-------------------------)

 

For å si det på en veldig enkel måte: Det kan være vanskelig å se vitsen med en map før du ser vitsen med å kunne repetere den samme operasjonen mange ganger.

For å si det på en veldig enkel måte: Det kan være vanskelig å se vitsen med en for før du ser vitsen med å kunne repterere den samme operasjonen mange ganger.

 

Og til sist: Jeg mistenker at du anntar at målet med å lære seg å programmere er å bli *ekspert* i progammering. Jeg mistenker også at du tar feil.

Nei, lære seg å programmere. Endret av Lycantrophe
Lenke til kommentar

class HelloWorld {
    public static void main( String[] args ) {
        System.out.println( "Hello, World!" );
    }
}
Nei, lære seg å programmere.

 

Den setningen der alene forklarer hvorfor jeg slet med java i begynnelsen, jeg hadde ett lite begrep om klasser og skjønte ikke så mye, så må jeg skive "sakprosa" bare for å skrive ut en liten tekst... ?? isteden for bare slik jeg hadde gjort før i bash: echo "Hello world" eller pyton : print "hello world"

 

Som det ble nevnt tidligere, for min del var det mye artigere å bare få noe til "å skje" kontra å gjøre alt korrekt i begynnelsen. Jeg er IKKE en person som lærer på forelesninger, jeg lærer svært lite av bøker som forklarer meg at: slik og slik skal du programmere.

Jeg lærer av å teste koden, feile for så å etter en stund kunne lese koden med enkelhet.

 

For å ta ett eksempel, jeg har tilfeldigvis lagret noe av det første jeg skrev i Python, som forresten ser GRUSOMT ut..! Ville jeg skrevet dette slik hvis jeg skulle skrevet det på nytt? Nei, men det fungerte og jeg fikk ett svar med en gang som var veldig godt for meg.

liste = [] #lager en tom liste

while True:
  try: #Skriv tall til liste (avsluttes kun ved annet input enn ett tall)
    liste.append(int(input('Skriv inn ett tall, trykk enter for å kjøre:'))) #Ber brukeren om a skrive inn ett tall
  except ValueError: #Avslutter lokken ved annet input enn ett tall
    break
#Skriver ut verdier ferdig formatert.
bredde_total = (40 + liste.__len__()) #total bredde på tekst (for formatering)
bredde_tall = (20 + liste.__len__()) #Bredde på tallene (for formatering)
bredde_tekst = (bredde_tall - liste.__len__()) #Bredde på tekstformatering
header_format = '%-*s%*s' #Formatering av header
format = '%-*s%*.i' #Formatering av resten av teksten. (output)
print ("=" * bredde_total) #Skriver ut riktig antall = for å starte outputen.
print (header_format % (bredde_tekst, 'Innskrevne tall:', bredde_tall, liste))
print ("-" * bredde_total) #Skriver ut mellomrom "-" 
print (format % (bredde_tekst, 'Antall tall', bredde_tall, liste.__len__())) #Antall forskjellige tall som listen inneholder
print (format % (bredde_tekst, 'Sum av tallene', bredde_tall, sum(liste))) #Summen av listen
print (format % (bredde_tekst, 'Minste tall', bredde_tall, min(liste))) #skriver ut det minste tallet i liten
print (format % (bredde_tekst, 'Største tall', bredde_tall, max(liste))) #skriver ut det største tallet i listen
print (format % (bredde_tekst, 'Snitt av tall', bredde_tall, sum(liste) / len(liste))) #skriver ut snittet av listen
print ('=' * bredde_total) #Skriver ut riktig antall = etter outputen.

og Slik lærte jeg om klasser: (utrolig forkortet)

class Tribune:
    def __init__(self, navn, kapasitet, bilettpris):
        self.__navn=navn
        self.__kapasitet= int(kapasitet)
        self.__bilettpris= int(bilettpris)

Jeg mener som en del andre, at det viktigste er å "komme seg igang" og få til noe, ikke bli "supergod" med en gang, har flere som sier at det tar ett par år å bli god i f.eks Java, det som regel ikke gjort over natten å bli en god programmerer uansett hvilket språk man starter med, men det føles utrolig frustrerende å føle at man står fast og ikke egenltig kommer seg videre.

  • Liker 1
Lenke til kommentar

Før jeg glemmer å spør (Utsatt dette med å begynne med fritidsprogrammering lenge nok); hvilket språk ville dere anbefalt for en som allerede har grunnleggende forståelse for programmering? Hadde IT2 på videregående hvor vi lærte en del ActionScript 3, og har hatt IT grunnkurs på NTNU med grunnleggende MatLab og diverse småtteri om objektorientert programmering / programvareutvikling. Syns dette var gøy og ønsker å lære mer om alt mulig programmeringsrelatert, men studerer dessverre ikke datateknikk.

 

Kanskje aller viktigst; hvordan skal en gå frem for å lære dette språket? Tenker på å melde meg opp i ekstrafag til høsten, men da føler jeg kanskje noe av friheten og gleden kan gå tapt. Hvor ville dere begynt for å lære mer om programmering forbi det aller mest grunnleggende?

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...