Language: EN

breve-historia-de-la-programacion

Brief history of programming

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

It wouldn’t seem right to do an introduction to programming course without devoting at least one article to briefly reviewing the history of the evolution of programming.

From the earliest machines to modern systems, each milestone in this chronology has influenced the way we understand and apply programming principles.

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, machines using energy to perform work automatically have been found.

Automatic irrigation systems were found 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 ancient times, the first forms of programming involved the configuration of 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, the son of a French organ manufacturer, 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 thereafter, in 1745, Jacques de Vaucanson, a French engineer and inventor of mechanical automatons, applied his knowledge and created the first automatic loom. His knowledge in 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 with punched cards. Each punched card represented a specific instruction, allowing for 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 groundwork for the conception of the first programming principles.

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

Early computers

The real 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.

Computers quickly increased in power, while decreasing in size. This was due to the invention of new technologies such as transistors, which replaced vacuum tubes.

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

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 language was still very close to machine language, it provided a layer of abstraction that facilitated program development.

Shortly thereafter, in the early 1950s, high-level languages emerged, designed to be more accessible and easier to use than assembly language. These languages provided 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 that we currently know were developed. For example, the foundations of combinational logic and Functional Programming were developed, with its origin dating 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) is based on the idea that programs should model real-world objects, with associated features (attributes) and behaviors (methods).

Modern era

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

An important milestone is, as we all know, the emergence of what we now call the Internet. This is due to the improvement and increased complexity of communication systems between computers. With the advent of the World Wide Web, new needs arose for software development.

As software becomes increasingly more complex, with more complex applications, mobile applications, virtualization, cloud computing, software also becomes more complex. In addition, the need for richer and more usable user interfaces takes on new importance.

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

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