Computerprogramma

functionaliteit van de computer, toepassing met een gebruiksdoel

Een computerprogramma is een opeenvolging van opdrachten voor een computer met als doel om die computer een specifieke taak te laten uitvoeren. Er is een verschil tussen een computerprogramma dat door een programmeur zelf is geschreven en dat kan worden veranderd, zoals het bij programmeren gaat, een programma in de vorm van software die niet kan worden veranderd en een programma dat als firmware wordt gedraaid of in de hardware wordt ingebed.

Acorn ARM610 CPU

Een geschreven computerprogramma is een opeenvolging van statements, die in het algemeen door een computerprogrammeur is ingevoerd. Deze leesbare tekst wordt ook de broncode van het computerprogramma genoemd. Broncode wordt geschreven in een programmeertaal, die vaak een van de twee belangrijkste programmeerparadigma's volgt: imperatief of declaratief programmeren. Deze broncode maakt het voor de programmeur mogelijk het algoritme van het betreffende computerprogramma te bestuderen en zo nodig verder te ontwikkelen. De geschreven broncode wordt in een computerbestand opgeslagen en kan met behulp van een compiler naar programmacode in machinetaal worden omgezet, die door de computer kan worden verwerkt, ook wel een executable of binair bestand genoemd, en later door een centrale verwerkingseenheid worden uitgevoerd of met een interpreter worden uitgevoerd. Een computerprogramma wordt maar een enkele keer direct in assembler geschreven, omdat dat moeilijker programmeren is, en gebeurt uitsluitend wanneer maximale efficiëntie is vereist. Er zijn veel verschillende programmeertalen.

Een verzameling van computerprogramma's en bijbehorende gegevens wordt software genoemd. Als een computerprogramma wordt uitgevoerd, leest de computer de instructies uit het programma, zoals deze zijn opgeslagen op een gegevensdrager, bijvoorbeeld bestanden op een harde schijf, en voert de programmacode in de aangeven volgorde uit, gebruik makend van de gegevens.

Het idee van programmeren en het vastleggen van computerprogramma's werd voor het eerst in 1936 door Alan Turing geformuleerd. Computerprogramma's werden voordat er voor computers elektronisch computergeheugen was ontwikkeld op een fysieke gegevensdrager opgeslagen, bijvoorbeeld op een ponsband of op ponskaarten.

Voorbeelden

bewerken
 
Computerprogramma's werden in de jaren 1950 op ponsband opgeslagen.

Computerprogramma's komen in allerlei soorten en maten voor:

Er zijn verschillende soorten fouten mogelijk in een computerprogramma:

  • Een fout in de syntaxis. Er staat dan iets dat in de gebruikte programmeertaal niet is toegestaan.
  • Een fout in de semantiek. Er staat dan iets dat is toegestaan, maar in een fout resulteert. Een statement bevat bijvoorbeeld een deling door een variabele, maar de waarde daarvan is nul. De uitvoering van het programma stopt, meestal met een foutmelding.
  • Een fout waarbij de uitvoering vanuit de computer gezien normaal verloopt, maar waarbij de computer niet doet wat de bedoeling is.

Bij gebruik van een compiler is er bovendien een onderscheid tussen

  • een compile time error, die tijdens het compileren wordt gevonden en gerapporteerd en moet worden gecorrigeerd alvorens een gecompileerd, uitvoerbaar programma kan worden geproduceerd
  • een run time error, een fout die tijdens de uitvoering van de gecompileerde software optreedt.

De meeste compile time errors zijn syntaxisfouten, en de meeste syntaxisfouten zijn compile time errors. Bij het compileren worden vaak ook allerlei waarschuwingen gegeven, die onder andere semantische fouten kunnen aangeven.

Bij gebruik van een interpreter wordt een syntaxisfout alleen ontdekt wanneer de interpreter op het punt staat het statement uit te voeren. Het effect van alle genoemde soorten fouten is dus hetzelfde: de uitvoering stopt, meestal met een foutmelding. Vaak zijn er ook voor geïnterpreteerde talen programma's om syntaxisfouten en andere mogelijke problemen in de code te rapporteren.

Veel talen gebruiken tussenvormen tussen compilatie en interpretatie, zoals just-in-timecompilatie, waardoor het onderscheid tussen compile time en run time minder scherp is.