In our previous articles, we briefly discussed what programming means; to define what programming means, we first took the time to understand how and why computers use binary number systems in detail. You can use this link to jump to the article if you want a quick refresh.

In this article, we will try to flip the coin and see the other side. This article will discuss everything about the tools used to create computer programs called Programming Languages. This article will address the questions: "What are programming languages?", "How have they evolved?" and "How is it possible to code in English-like syntaxes but still be able to communicate with a system which understands only Binaries?"

Let's start by answering, "What are programming languages?" as a human language lets us communicate with each other, programming languages simplify the communication between humans and computers. You can think of programming languages as middleware between humans and computers. If there isn't any programming language, there won't be any program, and if there is no program, there won't be any use for computers; they will become out of service.

One thing to note here is that programming language doesn't necessarily mean a language computers speak. There is a case where programming language becomes a language computers speak, but it's not applicable nowadays. To give you a clear idea, let's address their evolution.

Programming language evolution

Instead of discussing a specific programming language created at this particular time, I will generally categorize them by era and make you understand their period. However, if you want to refer to what programming language evolved at what time, you can refer to this article.

Machine Language Era

It was a time when a computer only understood its language, meaning binary; hence, if a person wanted to give instructions, they had to speak the computer's language.

Our interaction with babies will be a perfect example of this era. Let's say we met an 8-month-old baby; we know we can't talk to him the same way we speak to another adult. Instead, we all bring the baby buried inside us and communicate with the baby. We don't know or understand what we are saying or talking about at that specific time, but we know it will make the baby laugh. So whether we like it or not, we need to speak like a baby to communicate with a baby.

This era was so difficult for two reasons.

  1. All the instructions are written in binary.
  2. If any error or mistake arises, it's hard to find it and fix it

To address these issues, the Assembly Language Era comes into existence.

Assembly language Era

This era is known as a low-level language era, meaning the written instructions are closer to machine language than human language. People used basic human understandable instructions like ADD, MUL, and SUB to address instructions Addition, Multiplication, and Subtraction, respectively, but the rest remains complicated.

Bringing human understandable instruction to the programming brought a huge problem during this era. Since machines only understand Machine Language, making them understand those added human understandable instructions was a big problem. That's where Assemblers come into play.

Assemblers are just translators from Assembly language to Machine language.

An example of this era will be adults talking to a 2-year-old child. A 2-year-old child might not speak the perfect language the adults speak, but they will drop some words you understand and keep talking in a language you don't understand. To understand what they meant, you have to ask a person who stayed with them for a long time and know what they are talking about.

High-Level Programming Languages

These are English-like programming languages we see all over the internet. However, just like Assembly Language Era, the problem of making a Machine understand an English-like instruction remains the same. In this era, two types of translators were created to smoothen the translation process. All programming languages fall into either or both of these types of translators.

Before we talk about them, let's clarify the difference between source code/file and target code/file.

  • The source code is a file that contains all the instructions written in one specific programming language.
  • The target code is a file into which we want to translate our source code. When I say target code, it doesn't necessarily mean Machine Language.

Compiled High-Level Programming Language

These types of programming languages will take their source code and translate it to the target code in one go. Take the whole file and translate it to the target file, just like book translation in real life.

Interpreted Programming Language

These programming languages read the source code line by line and translate them to the target file line by line. Like the person-to-person translation, a person will speak one sentence in one language, and a translater will translate it to the desired language.

The general idea of programming languages looks like this. The following article will show the terminologies used in programming languages.