breve-historia-de-la-programacion

Brief history of programming

  • 6 min

As we mentioned in the introduction to the programming course, programming encompasses a broad spectrum of technological advances and intellectual contributions that have laid the foundation for the discipline as we know it today.

It wouldn’t seem right to me to do an introduction to programming course without dedicating at least one article to seeing (briefly) the history of the evolution of programming.

From the earliest machines to modern systems today, each milestone in this timeline has influenced how we understand and apply the principles of programming.

Pre-Computer Era

The origin of programming dates back to the dawn of humanity, when humans sought ways to automate repetitive tasks. Since prehistoric times, we find machines that used energy to perform work automatically.

We find automatic irrigation systems in Babylon, around 2000 BC. It is also known that the Greeks used hydraulic and pneumatic systems. The Egyptians had truly ingenious mechanisms in their temples.

Many of these machines had automatic behavior (they were automatons) and logically, they were also programmed. In antiquity, the first forms of programming involved configuring mechanical, pneumatic, and hydraulic machines.

During the Middle Ages, as in almost all fields of knowledge, there was a significant halt. Not until the Renaissance and the Industrial Revolution did advances in automation begin to appear again.

Industrial Revolution

In 1725, Basile Bouchon, son of a French organ maker, adapted the concept of clockwork mechanisms used in music boxes to operate a loom through a perforated tape. This invention was perfected in 1728 by his assistant, Jean-Baptiste Falcon, who used a series of interconnected punched cards.

Shortly after, in 1745, Jacques de Vaucanson, a French engineer and inventor of mechanical automatons, applied his knowledge and created the first automatic loom. His knowledge of automated mechanisms was crucial for the development of programming and laid the groundwork for future advances.

Building on these two inventions, in 1801 Joseph Marie Jacquard created a famous mechanical loom using punched cards. Each punched card represented a specific instruction, allowing the creation of complex patterns without the need for constant human intervention.

As technology advanced, engineers and mathematicians explored ways to automate complex calculations. In 1840, Charles Babbage developed the “Analytical Engine,” considered one of the first attempts to create a programmable computer (although the Analytical Engine was never fully built, it laid the foundation for the conception of the first principles of programming).

In the second half of the 19th century, punched cards became a popular form of programming in the fields of statistics and census. Punched cards allowed storing information in a structured way and performing operations using electromechanical machines. This technology played a crucial role in the evolution of programming, providing a method for executing complex instructions.

The First Computers

The true revolution in the history of programming came with the emergence of the first electronic computers in the 1940s. During World War II, Alan Turing and his team developed Colossus, a machine designed to decipher the codes of the German Enigma encryption machine.

Quickly, computers increased their power while decreasing their size. This was aided by the invention of new technologies like transistors, which replaced vacuum tubes.

At that time, programmers had to write directly in machine code, which consists of numerical instructions directly understandable by the computer’s hardware. This approach was extremely laborious and prone to errors.

To abstract from this complexity, assembly language was developed in 1947, allowing programmers to write instructions in the form of more readable mnemonics. Although assembly was still very close to machine language, it provided a layer of abstraction that facilitated program development.

Shortly after, in the early 1950s, high-level languages emerged, designed to be more accessible and easier to use than assembly. These languages provided an even greater abstraction, allowing programmers to express concepts and algorithms in a way closer to human language.

In parallel, the theory and foundations of many paradigms we know today were being developed. For example, the foundations of combinational logic and Functional Programming were developed, whose origins date back to the 1930s.

Instead of focusing on objects and their interaction, functional programming is based on the concept of pure functions, which take an input and generate an output without side effects.

Later, between 1950 and 1960, one of the most influential programming paradigms emerged: Object-Oriented Programming (OOP). OOP is based on the idea that programs should model real-world objects, with associated characteristics (attributes) and behaviors (methods).

Modern Era

With the popularization of computers and their inclusion in the domestic field, programming theory continued to develop into what we know today.

An important milestone in this, as we all know, is the appearance of what we now call the Internet. This is due to the improvement and increasing complexity of computer communication systems. With the advent of the World Wide Web, new needs for software development arose.

As software becomes increasingly complicated, with more complex applications, mobile applications, virtualization, cloud computing, software also becomes more complex. Furthermore, the need for richer and more usable user interfaces gains new importance.

This leads to the emergence of new paradigms like reactive programming or immutability, unit testing, frameworks, libraries, dependencies, devops, and many other tools aimed at managing project complexity.

Today, software development is a field of technology that addresses many aspects, including design, psychology, project management. As we see, aspects beyond the “mathematical” component it traditionally had, and which we will also see in this course.