TLDR: High-level programming languages are computer languages that make it easier for humans to write programs by abstracting away the details of the computer. They are more user-friendly and automate certain tasks, making programming simpler and more understandable.
A high-level programming language is a type of computer language that is designed to be easier for humans to use compared to low-level programming languages. Low-level languages, like machine language, deal with the nitty-gritty details of the computer, such as memory addresses and registers. In contrast, high-level languages use natural language elements and provide strong abstraction from these hardware details.
The level of abstraction provided by a high-level language determines how "high-level" it is. Some high-level languages may use elements of natural language, making them easier to understand and use. Others may automate or hide certain aspects of computing systems, like memory management, to simplify the process of developing a program.
In the 1960s, high-level programming languages were commonly referred to as "autocodes." Examples of autocodes include COBOL and Fortran. The first high-level language designed for computers was Plankalkül, created by Konrad Zuse. However, it was not implemented at the time due to World War II. Fortran, developed by IBM, was the first widely used high-level language. The ALGOL family of languages, including ALGOL 58 and ALGOL 60, introduced recursion, nested functions, and structured programming concepts.
High-level languages provide features that standardize common tasks, allow for rich debugging, and maintain architectural agnosticism. However, there is a trade-off known as the "abstraction penalty." High-level programming techniques may sacrifice performance optimization and the use of certain hardware resources. In some cases, critical portions of a program may need to be hand-coded in a lower-level language for better efficiency.
There are three general modes of execution for modern high-level languages: interpreted, compiled, and source-to-source translated. Interpreted languages are executed directly without a compilation stage. Compiled languages transform the syntax into an executable form before running. Source-to-source translated languages are translated into a lower-level language, such as C, which is then compiled into machine code.
The terms "high-level" and "low-level" are relative and can change over time. For example, the C language was once considered high-level but is now often referred to as low-level due to its lack of certain features and direct memory addressing. Assembly language, which is a representation of machine code, can be seen as a higher-level language compared to machine code itself.
High-level languages can be directly implemented by a computer, where the computer executes the high-level language code. This is known as a high-level language computer architecture. For example, the Burroughs large systems were designed to be targeted by the ALGOL 60 language.
In summary, high-level programming languages are designed to make programming easier for humans by abstracting away the details of the computer. They provide strong abstraction, automate certain tasks, and are more user-friendly compared to low-level languages. However, there may be a trade-off in terms of performance optimization and hardware utilization.