Existe cierto desacuerdo con respecto a la definición exacta de un lenguaje de programación de bajo nivel, pero todas las definiciones comparten algunas cosas en común con respecto a las características de dicho lenguaje de computadora. Esas características incluyen: similitud con el código binario, conocimiento requerido del papel de la unidad central de procesamiento (CPU) y la capacidad del programador para controlar el hardware a través del lenguaje. Algunas personas consideran que cualquier lenguaje de computadora es de bajo nivel si no es similar a un idioma que la gente habla. Otros consideran que cualquier lenguaje que requiera que el programador comprenda el intrincado y muy complejo funcionamiento de la CPU es de bajo nivel. Debe recordarse que un lenguaje de programación verdaderamente de bajo nivel generalmente se ajusta a todas estas descripciones.
El código binario, también llamado código máquina, es el único lenguaje que la CPU, o el «cerebro» de una computadora, entiende y «habla». El código de máquina, si lo ve una persona, se parece a muchas secuencias de los números 1 y 0; representan un estado de encendido o apagado, muy parecido a una luz que se enciende o se apaga. El código de un lenguaje de programación de alto nivel se vería muy diferente del código de máquina en el sentido de que contiene símbolos y palabras reales que se usan en un idioma, generalmente inglés, que habla la gente. Sin embargo, esto no significa que alguien que no sea un programador informático entendería el código en un lenguaje de alto nivel más de lo que lo haría en uno de bajo nivel.
Entre las mayores ventajas de un lenguaje de programación de bajo nivel se encuentra la capacidad y la libertad de ejercer un control preciso sobre aspectos como el uso de la memoria y el tiempo de procesamiento. Esto significa que los programas escritos en un lenguaje de bajo nivel deberían hacer un uso muy eficiente de los recursos del sistema, lo que puede ser muy deseable cuando se codifica para sistemas con recursos muy limitados. Tal ventaja no viene sin un precio. Los desarrolladores e ingenieros que codifican en un lenguaje de programación de bajo nivel deben tener un conocimiento sólido de las funciones de la CPU para poder escribir instrucciones que afecten la memoria y el tiempo de procesamiento.
Codificar en un lenguaje de programación de bajo nivel consume mucho tiempo y es tedioso. Es comprensible que esto aumente el costo de tener un programa desarrollado en dicho lenguaje, porque el equivalente de tan solo dos líneas de código en un lenguaje de alto nivel puede requerir hasta 20 líneas en un lenguaje de programación de bajo nivel. Un desarrollo tan lento hace que los lenguajes de bajo nivel sean principalmente adecuados para programas muy pequeños. Casi nunca se utilizan para el desarrollo de programas más grandes.