I.

Software and its origins

While in the previous chapter we understood that hardware cannot work without software, we will now look more closely at what exactly software is, how it is created, and the different types of user applications that we use to make our tasks easier and faster.

Software is an amazing innovation that we use every time we use a computer, smartphone, video game console or many other electronic devices. Some software is pretty simple and designed only to do a few things, while other software is very complicated and manages immense quantities of data.

Why do we have software in the first place?

The short answer is that computers don’t understand human language – and programmers want to build computers that are easy for us to use. But clearly, humans and computers do not speak the same language. That’s why we have software, the interface between the hardware and the user that supports us to do tasks with our computers. Let’s dig a little more into this.

What language do computers understand?

Computers understand only binary information, mainly represented in the form of electrical signals that are ON (high voltage) or OFF (low voltage), and they need to see everything represented as a sequence of 1s and 0s (ON and OFF). Generally, a logic “1” represents a higher voltage, such as 5 volts, which is commonly referred to as a HIGH value, while a logic “0” represents a low voltage, such as 0 volts or ground, and is commonly referred to as a LOW value. This sequence (series) of 1s and 0s is known as binary format/code.

Since computers do not understand our language, photos, videos, texts, programs, or music in the way we do, all data needs to be converted into binary code for the computer to process it.

In modern computers, we have encoding systems that act as translation layers to convert our inputs into machine code. As a very basic example, when you type the letter "A" on a keyboard, it is converted by the UTF-8 character encoding system into the machine code with the value 01000001.

An example of binary code translation in action
An example of binary code translation in action

Now, imagine how many ones and zeros we would have to represent a book in binary code. Imagine how many ones and zeros we would need to represent a photo or song in binary code. As you can imagine, it can be pretty complex and tedious to represent every image, text, program or music in binary code, into that collection of ones and zeros. Our modern computers do this automatically and this is an invisible process for most users.

Try to imagine how this process was in the past when our first programmers needed to express everything in binary code by hand!

What is the role of programmers in the evolution of software?

Whatever language or type of language we use to write our programs, they need to be in machine code in order to be executed by the computer.

When the first "modern" electrically powered computers were created, programmers realised that the limited speed and memory capacity of those devices were a limit to their imagination, and also a limit to the experience of non-expert users.

This forced them to write “language translators” that would facilitate their task of writing machine code. There are three main categories of language translators used in our computers: assemblers, compilers and interpreters. We will study them in the next section.

What programmers use to create software is programming languages. There are many of them, and they have evolved over the years. Some literature recognises five generations of programming languages.

Programming languages are classified into two levels, low and high. The first two generations are part of the low-level languages, and the next three generations are part of the high-level languages.

Now we have the floor ready for the next section, where we will learn about modern low-level and high-level languages and programming.

Next section
II. Programming languages and creating software