Hei, verden!
print("Hei, verden!")Det tradisjonelle første programmet. print-funksjonen skriver teksten i parentesen til skjermen. Anførselstegnene markerer at innholdet er en streng (tekst), ikke kode.
Et program er en presis oppskrift datamaskinen følger steg for steg. Vi skriver oppskriften som kildekode i Python, og en interpret oversetter og kjører den linje for linje. Her møter du de første programmene, syntaksen og hvordan du kjører kode.
Tenk deg at du skal forklare en helt fersk vikar nøyaktig hvordan kaffemaskinen på pauserommet skal brukes. Du kan ikke vifte med hendene og si «du skjønner»; du må skrive en presis liste: fyll vann til streken, legg i én skje kaffe per kopp, trykk på den grønne knappen, vent til lampen slukker. Vikaren følger lista slavisk, uten å gjette. En datamaskin er en slik vikar — utrolig rask, men helt uten egen dømmekraft. Et program er nettopp en slik presis liste med instruksjoner, skrevet på en form maskinen kan følge.
Det er to ting å merke seg allerede her. For det første gjør maskinen akkurat det du skriver, ikke det du mente. Glemmer du skjeen med kaffe, koker den varmt vann. For det andre må instruksjonene være entydige: «litt kaffe» duger ikke, men «én skje per kopp» gjør det. Hele faget handler om å lære deg å tenke så presist at en maskin kan utføre tankene dine.
Vi skriver programmer i et programmeringsspråk. I dette emnet er det Python. Teksten vi skriver kaller vi kildekode — det er menneskelesbar tekst i en fil, gjerne med etternavnet .py. Kildekode er for mennesker; den er laget for å kunne leses, endres og forstås.
Men prosessoren i maskinen forstår ikke Python direkte. Den forstår bare maskinkode: tallmønstre som styrer kretsene. Et eksempel på det enkleste mulige programmet ser slik ut:
pythonprint("Hei, verden!")
Denne ene linja ber maskinen skrive teksten Hei, verden! på skjermen. For deg er det opplagt hva som skjer. For prosessoren må linja først oversettes til noe den kan utføre. Det er her interpreten kommer inn.
Det finnes to hovedmåter å gå fra kildekode til kjøring. En kompilator oversetter hele programmet til maskinkode på én gang, før noe kjøres, og lager en ferdig kjørbar fil. En interpret gjør det annerledes: den leser kildekoden linje for linje mens programmet kjører, og utfører hver instruksjon der og da.
Python bruker en interpret. Det er en viktig grunn til at Python passer så godt når du lærer å programmere. Du kan skrive én linje, kjøre den, se resultatet, justere, og kjøre igjen — uten et tungt mellomsteg. Tilbakemeldingen kommer raskt, og rask tilbakemelding er gull verdt når du øver.
Prisen for denne smidigheten er at et interpretert program ofte kjører litt langsommere enn et kompilert, fordi oversettelsen skjer mens det går. For det vi gjør i dette emnet betyr det sjelden noe. Når du senere jobber med store datamengder, finnes det biblioteker som flytter de tunge beregningene ned til kompilert kode under panseret — men det er en sak for et senere kapittel.
Akkurat som norsk har grammatikk, har Python syntaks. Syntaks er de formelle reglene for hvordan koden må skrives for at interpreten skal forstå den. Et komma på feil sted eller en manglende parentes er ikke en bagatell for maskinen — det er en setning den ikke kan tyde, og den stopper med en feilmelding.
Se på det fungerende eksempelet igjen:
pythonprint("Hei, verden!")
Her er print navnet på en innebygd funksjon, parentesene ( og ) omslutter det funksjonen skal jobbe med, og anførselstegnene " og " markerer at innholdet er tekst. Fjerner du den siste parentesen, bryter du syntaksen:
pythonprint("Hei, verden!"
Interpreten vil da klage med noe i retning av SyntaxError. Den forteller deg ikke nødvendigvis hva du mente — bare at noe ikke stemmer med reglene. Å lese feilmeldinger rolig, og finne ut hvilken regel du brøt, er en ferdighet du bygger fra dag én. Nybegynnere skummer ofte forbi feilmeldinger i panikk; erfarne programmerere leser dem som en veiviser.
Et knippe syntaksregler du møter med en gang: tekst (kalt strenger) omsluttes av anførselstegn, funksjonskall skrives med parenteser, og — spesielt for Python — innrykk har betydning. I mange andre språk er innrykk bare for å gjøre koden penere. I Python er innrykket en del av syntaksen: det avgjør hvilke linjer som hører sammen. Det kommer vi grundig tilbake til, men merk deg allerede nå at mellomrom foran en linje ikke er kosmetikk i Python.
Det er verdt å skille to slags feil fra hverandre, fordi de oppfører seg ulikt. En syntaksfeil oppdager interpreten før den i det hele tatt begynner å kjøre: koden bryter reglene, og ingenting utføres. En logisk feil er lurere. Da er syntaksen helt korrekt, programmet kjører fint — men det gjør feil ting. Tenk på vikaren som følger en oppskrift uten skrivefeil, men der du ved en glipp skrev «to liter vann» i stedet for «to desiliter». Maskinen klager ikke; den lager bare for tynn kaffe. Logiske feil finner du ikke ved å lese feilmeldinger, men ved å sammenligne det programmet faktisk gjør med det du ventet. Mye av det å lære programmering handler om å bli god til nettopp det.
La oss følge en hel runde fra du får en idé til du ser et resultat.
Først skriver du kildekoden i en editor — et program laget for å skrive kode. Så lagrer du den i en .py-fil. Deretter ber du interpreten kjøre fila. Under kjøringen leser interpreten kildekoden, oversetter den underveis, og utfører instruksjonene i den rekkefølgen de står. Til slutt får du et resultat: tekst på skjermen, et lagret bilde, et svar på et regnestykke — hva nå programmet var ment å produsere.
Snutten under er det klassiske første programmet, og vi skal kjøre nettopp dette:
print("Hei, verden!")Det tradisjonelle første programmet. print-funksjonen skriver teksten i parentesen til skjermen. Anførselstegnene markerer at innholdet er en streng (tekst), ikke kode.
Legg merke til at de fire stegene danner en løkke i praksis. Du skriver, kjører, ser at resultatet ikke ble helt som tenkt, retter kildekoden, lagrer og kjører igjen. Slik jobber programmerere hele tiden: i korte runder der hver runde gir litt mer innsikt. Du skal ikke skrive et helt program riktig i ett jafs — du skal nærme deg svaret i mange små steg.
Python er valgt fordi språket holder seg unna unødig seremoni. Du slipper å skrive mye rundt-snakk før du kommer til poenget, og koden ligner ofte på en ryddig beskrivelse av hva du vil ha gjort. Det gjør at du kan bruke energien på selve tankegangen — å bryte et problem ned i presise steg — i stedet for å slåss med språket.
En annen fordel er det levende fellesskapet rundt språket. Når du står fast, finnes det nesten alltid noen som har stått fast på samme sted før deg, og svaret ligger ofte et søk unna. Python brukes i alt fra dataanalyse og kunstig intelligens til nettsider og automatisering av kjedelige oppgaver, så ferdighetene du bygger her er ikke bortkastet selv om du aldri skal bli programmerer av yrke. Å kunne be en maskin gjøre repetitivt arbeid for deg er en allmenn nytteferdighet på linje med å kunne sette opp et regneark.
En liten advarsel mot en vanlig misforståelse: det å lese kode og synes den ser forståelig ut er ikke det samme som å kunne skrive den selv. Forskjellen er den samme som mellom å forstå en oppskrift når noen leser den høyt, og å lage retten fra bunnen i ditt eget kjøkken. Derfor er det å skrive kode selv, gjøre feil, og rette dem, helt nødvendig — ikke noe du kan hoppe over ved å lese deg til svaret. Hver feilmelding du møter og løser, legger en murstein i fundamentet.
Det er den tankegangen som er den egentlige lærdommen. Et program er en presis instruksjonsliste; kildekoden er teksten vi skriver; interpreten oversetter og kjører den linje for linje; syntaksen er reglene koden må følge; og kjøringen er øyeblikket der maskinen utfører det du ba om. Når disse fem begrepene sitter, har du fundamentet resten av emnet bygger på. Alt vi gjør videre — variabler, valg, løkker, funksjoner — er bare flere slags presise instruksjoner i den samme listen.
Skriv egne notater for dette kapittelet. De lagres automatisk og dukker opp i «Mine notater»-oversikten paa fag-siden.