A programming language is an artificial language that is designed
to communicate instructions to a machine. They can be used to create programs for rockets, computers, or even smart TVs. A program is a list of instructions, written in a programming language, and It is used to control the behavior of a machine. There are many different programming languages out there. The most popular ones are Python, Java, and C. Of course, the programming languages are not all the same. In fact, they can be divided into two different types based on their amount of abstraction. They can be: Low-level languages or High-level languages.
Low-level languages provide little or no abstraction of
programming concepts and are very close to hardware. For these reasons, the programs written in low-level languages are directly executable without any compiler or interpreter. They are also very efficient with memory allocation; therefore, they are great for writing operating systems or firmware. They are however very difficult to use, and the development time of a project is longer. They are of two types: Machine language and Assembly language.
The Machine language can directly run on the CPU (Central
Processing Unit), but they are tedious and error prone to write because their code is a series of bits. Lastly, they are not portable which means that the code is specific for one type of machine.
Assembly language is less prone to error than the machine
language, so the coding is easier. The reason for that is because It replaces the series of bits with English instructions. Another curiosity is that each Assembly written code is specific for a particular computer architecture and operating system. On the other hand, the high-level languages are closer to human language, and because they have a high level of abstraction, their code is easier to read, write and maintain. In fact, if you write in a high-level language you do not have to think any more about things like registers or memory management. On top of that, they can rely on functions, objects, garbage collectors, and other abstractions, this makes the process of developing a program much simpler.
Lastly, to work properly, High-level languages must use a compiler
and an interpreter. The Compiler translates the high-level instructions into machine language, and It generates an executable file. While the interpreter translates high level languages into an intermediate code and each line is executed individually. Also, an interpreter runs slowly, starts right away, and lets you see how things are going, while a compiler takes extra preparation time but then the program will run very quickly and efficiently. To understand furthermore the difference between the two, we can look at the words themselves. INTER means BETWEEN, so we can understand that the interpreter is always between the program and the computer. On the other hand, TO COMPILE means TO PILE TOGHETER, in fact, a compiler piles together the entire program and translates the whole thing all at once.
The High-level languages are of two types: Procedural and Object
Oriented.
In Procedural languages the program is written as a sequence of
instructions. For example, the sequence of steps we follow when we wake up. Also, they follow a top-down approach with a more focus on functions. In Procedural languages the Data is not very secure and, the code is interdependent which makes it difficult to reuse the code. While, in Object oriented languages the program is an interaction of functions between participating objects. They follow a bottom-up approach with a more focus on data, and also, while using them, it is easier to wrap data and functions in a class which helps building secure programs. Lastly, the code is modular, and it can be reused.