Le langage machine et le langage assembleur sont des exemples de langages de programmation de bas niveau. Le langage machine est un code binaire entré directement dans la machine et constitue la première forme de langage de programmation. Le langage assembleur est étroitement corrélé au langage machine et est traduit directement en binaire par l'ordinateur.
Le langage machine et le langage assembleur sont spécifiques à chaque architecture de processeur particulière ; le code qui fonctionne sur plusieurs plates-formes nécessite un langage de haut niveau. Les langages de programmation de haut niveau ressemblent plus à un langage humain qu'à du code binaire et sont destinés à être lisibles par des programmeurs humains.
Les langages de programmation de bas niveau sont toujours utilisés dans les systèmes d'exploitation modernes pour les pilotes, les micrologiciels et les interfaces matérielles, qui nécessitent tous un accès de bas niveau au processeur. Ils sont également utilisés pour les logiciels de rétro-ingénierie et pour la programmation de logiciels malveillants qui nécessitent un accès de bas niveau à la machine. Les langages de programmation de haut niveau ont remplacé les langages de bas niveau pour la plupart des autres applications modernes en raison de leur relative facilité d'utilisation par rapport aux langages de bas niveau et de leur portabilité sur plusieurs plates-formes.
Les premiers langages de haut niveau, tels que C, permettaient aux programmeurs d'incorporer du code de langage de bas niveau directement dans des programmes de niveau supérieur. L'utilisation la plus courante de cette fonction dans les systèmes modernes est le noyau Linux, qui intègre le langage d'assemblage dans sa programmation C.