Utforming av et dataprogram som avgjør hvordan en datamaskin, en robot, en mobiltelefon, en vaskemaskin eller annet elektronisk apparatur skal fungere mens programmet er aktivt eller kjører. Det går ut på å sette opp en serie instrukser som styrer maskinen og som avgjør hvordan den skal reagere på inndata, inntastinger, musebevegelser og annet. Metodene for å sette opp disse instruksene avhenger av hva slags maskin man skal programmere. De første datamaskinene ble «programmert» ved at de ble koplet om til å kjøre instruksjoner i en bestemt rekkefølge. En lakkeringsrobot kan «programmeres» ved at en ekspertlakkerer utfører de nødvendige bevegelsene: Disse registreres fortløpende som bevegelser i rommet, og når de mates inn i roboten, gjentar den de samme bevegelsene.

En moderne datamaskin kan programmeres i forskjellige typer programmeringsspråk, for eksempel direkte i maskinkode, i et lavnivåspråk som assembler, i et høynivåspråk som C++, eller ved hjelp av avanserte utviklingsverktøy eller programmeringsverktøy som gir tilgang til mange ulike hjelpemidler for å generere kode i et høynivåspråk. Instruksene lagres i filer som til sammen utgjør et bestemt program eller system.

Programmering begynner med at man analyserer oppgaven som man vil at programmet skal gjennomføres, gjerne i samarbeid med dem som skal bruke programmet. Dette fører fram til en kravspesifikasjon. Så bryter man oppgaven ned i trinn, utvikler logikken som skal til for å løse hvert trinn, skriver instruksene i et programmeringsspråk, og til slutt kompilerer man programmet til maskinkode slik at det kan kjøres. De første gangene programmet kjøres vil man alltid avdekke feil, og man går gjennom en eller flere runder med feilretting (debugging). Ved omfattende systemer må man fortløpende dokumentere hva de ulike delene av programmet gjør, og hvordan de forholder seg til hverandre. Mange utviklingsselskap lar gjerne kunder teste et program når det stort sett ser ut til å fungere tilfredsstillende, i håp om at så mange gjenstående feil kan avdekkes og rettes opp innen programmet sendes ut på markedet. En slik tidlig versjon av programmet kalles en beta-versjon, og testingen som foretas av kundene kalles beta-testing av programmet.

Mye av det et gitt program skal gjøre, går igjen i andre programmer, for eksempel mottak av data fra diverse kilder, visning av tekst, museklikk og så videre. Derfor kan man spare utviklingstid ved å gjenbruke kode fra andre programmer når man lager et nytt. Dette har gitt opphav til ulike teknikker for programmering, som strukturert programmering og objektorientert programmering.

Det er en gjennomgående erfaring at det ikke lønner seg å utvikle et gitt system over mange år, for så med ett å gjennomføre det nye systemet med ett slag gjennom en stor organisasjon. Derfor velger man heller å dele opp et fremtidig omfattende system i mindre moduler som kan skrives og «settes i produksjon» en for en, før man tar fatt på den neste. Denne tankegangen kalles gjerne Rapid Application Development (RAD).

De siste årene er RAD-tankegangen utviklet videre ved at man i noen tilfeller finner det hensiktsmessig å komme ut av rytmen «kravspesifikasjon – design – utvikling – test», og heller trekke brukeren (kunden) med i utviklingen også av de mindre bitene av et program. Begrunnelsen for denne metoden, som ofte kalles Agile (eng. 'smidig'), er at kravspesifikasjoner ofte blir så omfattende at store deler av systemet aldri lar seg realisere. Derfor starter man med de grunnleggende kravene for en første bit av fremtidens system, gjerne det som haster mest, og utvikler raskt en prøve som brukeren kan ta stilling til. Denne prosessen gjentas gjennom flere iterasjoner til delsystemet er modent nok til å tas i praktisk bruk. En iterasjon kan ta ned til et par uker, og det viser seg ofte at brukeren fortløpende justerer eller endrer de opprinnelige kravene.

Et viktig trekk ved moderne datasystemer er at programmer ikke fungerer hver for seg, men utgjør deler av et omfattende og komplisert system, slik at de må forholde seg til andre programmer. Dette stiller krav til at programmereren forstår det helhetlige miljøet programmet skal virke i. Ofte brukes betegnelsen arkitektur for de felles regler og betingelser som gjelder for alle programmer i et system. Et aktuelt tema tidlig på 2000-tallet er tjenesteorientert arkitektur (eng. service oriented architecture, SOA) som skal gjøre det mulig å bygge omfattende programsystemer som utveksler tjenester og data med hverandre, på en måte som tillater rask og smidig utvikling av nye programmer eller tjenester.

Foreslå endringer i tekst

Foreslå bilder til artikkelen

Kommentarer

Har du spørsmål om artikkelen? Skriv her, så får du svar fra fagansvarlig eller redaktør.

Du må være logget inn for å kommentere.