# Software

Software is eigenlijk een computer programma. Om meer specifiek te zijn, een programma is een reeks stapsgewijze instructies die de computer de opdracht geeft om de taken uit te voeren die je wilt en om de gewenste resultaten te produceren. Een computerprogrammeur is een persoon die programma's schrijft. De meesten van ons schrijven geen programma's, we gebruiken programma's die door iemand anders zijn geschreven. Dit betekent dat we gebruikers zijn - mensen die computersoftware gebruiken.

Machinetaal
Machinetaal is een taal waarin instructies geschreven zijn die de processor van een computer direct kan uitvoeren. Een programma bestaat in machinetaal uit een reeks woorden, meestal van 8 (een byte), 16, 32 of 64 bits. Een of meer woorden staan voor een specifieke actie die de processor dient uit te voeren. Wanneer de computer in het programma dat hij aan het uitvoeren is bijvoorbeeld de byte 00001010 tegenkomt dan kan dit betekenen dat hij de inhoud van register 1 bij register 0 moet optellen.

Omdat het voor programmeurs tijdrovend is om software in machinetaal te schrijven en te onderhouden, schrijven ze hun software in een voor mensen makkelijker te begrijpen, 'hogere' programmeertaal. Een bijkomend nadeel van machinetaal is dat de instructiesets van verschillende types processoren meestal niet overeenkomen, waardoor het nodig is om software volledig te herschrijven wanneer deze uitgevoerd moet worden op een ander type processor.

Voor hogere programmeertalen is een interpreter of compiler nodig om de programma's om te zetten in door een machine uit te voeren machinetaal. Een ander voordeel van het onderscheid tussen machinetaal en hogere programmeertaal is portabiliteit. Dit houdt in dat voor eenzelfde programmeertaal verschillende interpreters of compilers kunnen bestaan, waardoor dezelfde broncode op verschillende processorarchitecturen kan worden uitgevoerd. Een interpreter of compiler biedt dus een abstractielaag op de processorarchitectuur.

Hogere programeertalen

Belangrijke hogere programmeertalen zijn o.a.:

- Python
- Java
- Javascript
- C#
- C++
- PHP

Iedere taal heeft zijn voor en nadelen. Wanneer welke taal wordt gebuikt is vaak afhankelijk van het doel van het programma. Zo worden PHP en Javascript veel gebuikt om websites te bouwen. Draaien Java programma's vaak in embedded systemen zoals kopieermachines en wordt C# en C++ gebruikt om desktopapplicaties te maken. De hogere programmeertalen zijn in twee groepen te verdelen; Just-in-timecompilatie (JIT-compilatie) en normale compilatie. Bij compilatie wordt de code die door de programmeur geschreven is omgezet in machinetaal. Het programma wat zo ontstaat is dan ook niet gemakkelijk meer terug om te zetten naar de oorspronkelijke code (decompileren). Bij Just-in-timecompilatie is de code ook meteen het programma. De code wordt bij het uitvoeren tijdelijk omgezet in machinetaal en uitgevoerd. Just-in-timecompilatie heeft als voordeel dat je snel wijzigingen kunt aanbrengen. Een nadeel is dat Just-in-time-talen veel langzamer zijn dan gecompileerde programma's. Voorbeelden van Just-in-time-talen zijn: Python, Javascript en PHP.