De machinecode, de programmeertaal van de eerste generatie, bestaat uit nullen en enen en wordt beschouwd als een van de lagere talen, dichter bij de processor. Assembleertalen, de tweede generatie, gebruiken lettercodes voor instructies. Hogere programmeertalen, derde generatie, worden door compilers omgezet in machinecode. Talen van de vierde generatie zijn niet-procedureel en concentreren zich op het oplossen van problemen. Desondanks kunnen ze soms tot complexe programma's leiden. Objectgeoriënteerde talen combineren gegevens met code tot objecten, met belangrijke concepten zoals objecten, klassen, methoden, inkapseling en overerving.