Bilde av Shahadat Rahman fra Unsplash
Hva er programmering
En liten oppklaring
Hvorfor ønsker man å lære seg å programmere? Jeg tror det er like mange svar på det spørsmålet som det er programmerere i arbeidslivet og på gutte- og jenterommet.
Men i all hovedsak kan man si at programmering er et verktøy for å få en datamaskin av ett etter eller annet slag til å oppføre seg slik man vil. Om det er en datamaskin som styrer en heisekran, en robot eller et kjøleskap. Eller om det noe som skjer i en nettleser på mobiltelefonen din er det i realiteten de samme konseptene som gjelder. Man skriver ett program som maskinen følger.
Ekte programmering?
Mitt inntrykk er at mange som lærer seg å programmere ønsker å bruke sin kreativitet til å løse oppgaver som er kjedelige, monotone eller slitsomme. Man kan også bruke programmering til ren underholdning. Eksempler på dette er programmerings lignende dataspill eller programmering av videosekvenser, lydsekvenser og animasjoner. Så hvor går skillet mellom hva som er programmering og hva som ikke er programmering?
For meg er programmering en mulighet for å få en datamaskin til å gjøre akkurat det jeg vil den skal gjøre, uten andre begrensninger enn mine egen fantasi og ferdigheter. For meg er det ikke programmering å stille inn drifts parameter på en regulator eller en termostat som noen andre har programmert. På samme måte som jeg ikke anser det som ingeniør kunst å kjøre en bil som andre har konstruert. Jeg mener på ingen måte at det ikke krever innsikt og kunnskap - For det gjør det så absolutt! Men det er ikke programmering.
Ved å lese rundt på web forum finner man mange programmerere som på høylydt mener at det ikke er ekte programmering med mindre programmet kompileres ned til maskinkode. Det er jeg veldig uenig i, siden man i dag skriver mange programmer som kjøres uten at den trengs å kompileres til maskinkode. Eksempler på dette er Python, PHP og Javascript. Forskjellen på kompilerte programmer og ukompilerte er i all hovedsak hvor raske og effektive de er. Kompilerte programmer er fra 10 til 1000 ganger raskere og mer effektive enn ukompilerte. Men hvordan disse programmene skrives er i mange tilfeller nesten identisk. Årsaken til at de er så mye raskere er at kompilert maskinkode er bygget til noe som en datamaskin kan kjøre uten å måtte oversette fra script til maskinkode når programmet kjører. Men fortsatt er kildekoden som skrives relativt lik.
Spørsmålet blir da. Hvorfor er ikke alle programmer kompilerte? Svaret er at når man kompilerer et program så blir det bygd slik at det kjører best mulig på det operativsystemet man vil at programmet skal kjøre. Så ett program som er kompilert til å kjøre i Windows, vil ikke kunne kjøre i Linux, Mac eller andre operativ system. Moderne websider skrives i JavaScript. Dette er ukompilerte programmer som blir lest av nettleseren og kjøres i den. Dermed blir websiden helt uavhengige av operativsystemet til datamaskinen som brukes for å laste siden. Dette er veldig fleksibelt, men til gjengjeld er ikke disse programmene like raske og effektive som vanlige programmer som kjøres på datamaskinen. I praksis er dette ikke noe man legger merke til siden programmer som kjører i nettleseren er "lette", små og krever normalt lite datakraft.
Å kjøre ukompilerte programmer blir på mange måter et kompromiss mellom ytelse og lettvinthet.
Valg av programmeringsspråk
Det vanskeligste valget for nybegynnere
Siden det er så mange ting som kan programmeres har det blitt utviklet veldig mange forskjellige programmerings språk. Det er faktisk så mange programmerings språk der ute at det er vanskelig selv for erfarne programmerer å holde seg helt oppdatert. Derfor er et av de vanskeligste valgene tar som nybegynner hvilket programmerings språk man skal velge å starte med.
Jeg leitet personlig etter det "beste" programmerings språket en god stund da jeg bestemte meg for å lære å programmere. Etter mye research og noen års erfaring kan jeg si at det er ikke finnes noe "best programmerings språk".
Grunnen til at det finnes så mange programmeringsspråk er at alle er skreddersydd for å løse en spesiell programmerings utfordring spesielt godt. Det finnes programmerings språk som i realiteten kan gjøre absolutt alt. Utfordringen er at det blir unødvendig komplisert og lang kode du som programmerer må skrive sammenlignet med bruk av et bedre egnet programmeringsspråk.
Det er ikke noen dårlige programmerings språk, men det finnes mange uegnede programmerings språk.
Så, hvilket programmerings språk man bør lære seg kommer helt an på hva man ønsker å programmere. Ønsker man å programmere mikrokontrollere til elektronikk prosjekter er det mest naturlig å lære seg C/C++. Skal man lage websider kommer man ikke langt uten å kunne JavaScript og PHP. Skal man programmere PLS'er i industrimaskiner er det antageligvis strukturert tekst som er mest utbredt. Listen er lang, og det er dukker stadig opp nye programmeringsspråk som er skreddersydd for forskjellig bruk.
Heldigvis er alle programmerings språk slektninger av hverandre. Syntaksen, eller reglene for hvordan man bruker språkene har mange likhetstrekk. Så for hvert programmerings språk du lærer deg vil du lære ett nytt språk lettere.
Mitt råd til deg som er helt nybegynner er å finne ut hva du har aller mest har lyst å programmere. Hvis du ønsker å programmere spill til Android, begynn med Kotlin eller Java. Vil du programmere websider. Lær deg HTML, CSS og JavaScript (og eventuelt PHP). Uansett hva du ønsker å programmere er det lurt å velge det programmerings språket som er mest utbredt og mest egnet til akkurat det du vil programmere.
Ved å velge populære programmeringsspråk er det lettere å finn guider, forklaringer og kursmateriale på nett og på biblioteket. I tillegg er det mye lettere å finne kode biblioteker som du kan importere til prosjektene dine for å løse problemer lettere og raskere.
Øvelse gjør mester
Det er bare en måte å bli god på...
Det finnes ingen snarvei til noen ferdigheter. Dette gjelder også programmering. Det er ingen som er født god til å lese eller skrive kode, og i starten kan det være strevsomt å lære seg. Det kan kanskje være lurt å ha i bakhodet at flere studier viser at det kreves i gjennomsnitt 10 000 timer med trening for å mestre en ferdighet. Så man blir i realiteten ikke skikkelig god til å programmere før det har gått noen år med trening. Trøsten er at det bare krever noen hundre timer med trening for å få det til ganske greit. Litt som å gå på ski. Små barn bruker ikke så lang tid på lære seg det grunnleggende så de klarer å gå langs marka på ski, men det skal mye øving til før de er stødige og raske både på flatmark og opp og ned bakker.
Det er lurt å starte med et programmerings språk som er nybegynnervennlig, og så jobbe seg videre mot mer kompliserte språk. Det som skiller nybegynnervennlige og mindre nybegynnervennlige programmeringsspråk er i hovedsak hvor mye syntax man må skjønne og hvor dypt man må skjønne hvordan en datamaskin fungerer for å klare å gjøre noe som helst. Noen gode eksempler på nybegynner vennlige programmeringsspråk er Python og JavaScript.
Med disse programmerings språkene kan man få til ganske mye uten å egentlig ha så mye innsikt og erfaring. Etter hvert som man lærer seg å programmere kan man bruke mer og mer kompliserte metoder og konsepter, så når man vil ta steget mot programmeringsspråk som opererer på ett lavere nivå og som har mere komplisert syntax blir det lettere å skjønne hvordan man kan skrive programmer med disse språkene.
Programmenings språk på lavt nivå jobber nærmere og mer direkte med maskinvaren. Til motsetning har man programmerings språk som er på et høyt nivå som jobber veldig lite direkte mot maskinvaren.
Når man skriver programmer i C/C++ som er ett språk på lavt nivå er det ofte man ønsker å ha detaljert kontroll på hvordan en lampe lyser, hvilke segmenter på ett gammeldags LCD panel skal lyse og hvilken frekvens som går til en radio.
Med å skrive ett program i python, som er ett språk på høyt nivå kan man heller fokusere på hva som skal stå på LCD panelet, i stedet for nøyaktig hva som skal til for at det skal vises skjermen.
Mitt råd
Min egen erfaring som nybegynner
Når jeg bestemte meg for å lære meg å programmere fulgte jeg rådet om å starte med et programmerings språk som var egnet til det jeg ville lage.
Jeg var veldig interessert i å programmere mikrokontrollere til mine elektronikk prosjekter. Derfor startet jeg med Arduino, hvor man skriver programmer i C/C++. Det var en slitsom opplevelse, hvor jeg brukte mer tid på å "sloss" mot syntaksen enn å lage programmer til prosjektene mine. Jeg lærte tregt og følte meg elendig. For hvert prosjekt jeg lagde brukte jeg enormt mye tid på å skjønne hvordan det hele kunne løses.
Etter hvert gikk jeg over til å lære meg Android, hvor jeg skrev programmer i Java. Java og C/C++ har mye lik syntaks, så heldigvis kunne jeg ta med meg alle erfaringene fra Arduino inn dit. Men Android er tungt basert på objektorientert programmering, noe jeg i stor grad ikke trengte å forholde meg til når jeg programmerte Arduino. Så da møtte jeg på ett nytt stort konsept jeg måtte slite meg igjennom.
Når jeg endelig prøvde meg på moderne webutvikling (HTML5) hvor jeg skrev programmer i PHP og JavaScript (node.js) som ble kjørt på serveren, og JavaScript som kjøres i nettleseren begynte jeg å lære enormt mye raskere. Alt jeg gjorde ble mere visuelt å lettere å skjønne. Syntaksen var mye lettere å komme i gang med, og jeg kunne fokusere mer på prosjekter. Her merket jeg veldig mye skaperglede, som gjorde at hele læreprosessen ble mer lek enn slit og arbeid.
Etter at jeg hadde lekt meg med webutvikling i noen måneder prøvde jeg meg på noen nye Arduino prosjekter. Faktisk merket jeg at mange C/C++ "brikker" datt på plass. Jeg klarte å resonnere meg frem til løsninger jeg tidligere ikke hadde hatt forutsetninger til å kunnet klart. Plutselig ble det veldig moro å programmere Arduino. Poenget mitt er at programmering er kompleks og til tider veldig abstrakt. Derfor kan det være lurt å hoppe litt fram og tilbake mellom prosjekter og språk for å få en oversikt.
Hvis jeg kunnet reist tilbake i tid og gitt meg selv noen råd ville jeg sagt følgende:
Start med HTML5, finn deg en mentor som du kan spørre om råd og veiledning, og start med enkle prosjekter - som du fullfører(!). Etter hvert som du blir flinkere kan du lage mer og mer kompliserte prosjekter. Ikke start med hel maraton - start heller med små joggeturer som etter hvert blir lengre og lengre. Ikke bygg hus før du kan å bygge trekasser.