Computer programming languages are often categorised as high and low level. Whether a language is high level or low level depends on the amount of abstraction it involves. When a programmer writes in a high level language, their code is compiled and ultimately translated into the machine code that is run directly by the computer. Low level languages require fewer steps to be translated down to this machine code level. For the programmer, there are both benefits and drawbacks to using high and low level languages for particular tasks.
To write in machine code, the programmer must include every instruction for the computer to carry out. As computing science advanced, programmers realised that computers could translate their input into machine code, letting them write using syntax that was easier for them to work with, saving time. As time passed, more levels of this translation process were added, resulting in high level languages, the syntax of which looks more like a natural language such as English. Programming languages are therefore spread over a spectrum, with low level languages closer to machine code and high level languages furthest away from it. High level languages require more compilation steps to translate them into machine language.
Time is one of the main advantages to using a high level programming language. A single line of code in a high level language may translate into a much longer excerpt of machine language code, so for the programmer, writing in a high level language means getting things done much more quickly. High level languages are easier for programmers to read, so they are easier to work with, not just for writing but also for editing. If a programmer needs to find a particular excerpt of code to edit, they can locate it faster when the code is easier to read.
In most cases programmers choose high level languages to build applications because of the considerable reduction in time required to achieve the necessary tasks. The only situations in which programmers tend to choose low level languages for concrete tasks is where they require a level of control or precision that is not afforded by a high level language. High level languages take abstract instructions, so the compiler and assembler processing establishes the details of how these instructions are actually implemented in computer hardware. To assert a greater level of control over these details, programmers can opt to use lower level languages.
Understanding can be a benefit of both high and low level languages, depending on what the programmer is trying to achieve. For practical projects, the fact that a high level language is more readable facilitates increased understanding of the logic and function of the application. However, the drawback to only using high level languages is that some programmers do not learn the practical implications of their code in hardware. For this reason, in educational contexts, programmers sometimes use low level languages to gain insight into what happens when their code is executed.