La programmazione di alto livello implica la scrittura di un programma per computer in un linguaggio che eviti al programmatore di avere a che fare direttamente con l’hardware del computer specifico da programmare. Questa astrazione consente al programmatore di concentrarsi maggiormente sulla progettazione, il flusso e la funzionalità del programma e meno sullo smistamento delle risorse di sistema di base per raggiungere tali obiettivi. Un linguaggio di programmazione di alto livello può gestire la gestione della memoria o l’input e l’output in un modo che il programmatore deve solo comprendere il concetto e non le specifiche hardware di un dato sistema. In contrasto con la programmazione di alto livello è la programmazione di basso livello, in cui c’è poca, se non nessuna, separazione tra il codice del computer scritto e le azioni che il computer esegue.
Lo sviluppo di linguaggi di programmazione di alto livello era in risposta alla necessità di file di codice sorgente leggibili dall’uomo che potessero essere facilmente compresi e modificati. Utilizzando soluzioni in linguaggio naturale, il codice sorgente di alto livello diventa molto più leggibile del linguaggio assembly o di altri linguaggi macchina. Con il progredire delle dimensioni dei programmi per computer, la praticità di scrivere interi programmi in linguaggi di basso livello è diventata meno fattibile.
In cambio della programmazione in un linguaggio leggibile dall’uomo e che non richiede conoscenze hardware di basso livello, esiste un concetto noto come penalità di astrazione. Descrive i maggiori requisiti in termini di potenza di elaborazione, utilizzo della memoria e altri tipi di sovraccarico necessari per eseguire il programma finale. Ciò è particolarmente vero per i linguaggi interpretati che devono eseguire un interprete per eseguire il programma, richiedendo essenzialmente che due applicazioni debbano essere eseguite contemporaneamente.
I linguaggi compilati sono linguaggi di programmazione di alto livello in cui i file sorgente leggibili vengono trasformati in codice macchina leggibile dal computer. Mentre un linguaggio compilato soffre meno di una penalità di astrazione rispetto a un linguaggio interpretato, si basa ancora su librerie precompilate e funzioni di compilatore automatizzato. Questi elementi possono danneggiare l’ottimizzazione di un programma complesso in cui le prestazioni sono vitali.
L’uso di linguaggi di programmazione di alto livello ha anche reso più facile la programmazione user-friendly. Ciò è facilitato dalla facilità di aggiungere elementi standardizzati a un’interfaccia utente fornita dalla maggior parte dei linguaggi di alto livello. Invece di sviluppare codice personalizzato per un sistema a finestre o un pulsante di interfaccia ogni volta che è necessario, gli elementi familiari possono essere facilmente inseriti in un’interfaccia con solo poche righe di codice. Ciò consente programmi che gli utenti finali possono apprendere più facilmente o con cui possono familiarizzare immediatamente.
L’uso del termine “programmazione di alto livello” è relativo all’esperienza del programmatore. Ci sono alcune lingue intermedie che una volta erano considerate di basso livello ma ora non lo sono. Allo stesso modo, alcuni linguaggi di alto livello condividono aspetti con linguaggi di basso livello, confondendo il confine tra di loro.