We have all heard about the Stone Age, the Iron Age and the Bronze Age. Harnessing metals for our own purposes drastically altered our lives. But how do we characterise the modern period? If we consider the sphere of technologies, then the Computer Age or the Software Age would do well as descriptors.
Far back into the past, man was occupied exclusively with his survival. As the acuteness of this task diminished, the possibility to think about a standard of living and solve global problems opened itself up to us. Accumulated knowledge became the basis for the appearance of the first inventions. Technical progress and the desire to live better than our previous generations enabled the creation of telephones, automobiles, and computers. Wars and economic crises have induced humanity to brainstorm, in turn contributing to the appearance of new inventions.
The automation of labour led to an increase in productivity and turned out to be economically profitable. At the present moment development has reached a state where a man doesn't have to conduct monotonous physical operations personally. Such routine jobs are performed by robots, themselves controlled by computers. This competition has moved to the sphere of software development technologies, its corresponding equipment and the constant generation of ideas. Taken together, development within these fields determines the competitive ability of modern companies.
Looking back over history, the earliest practical use of programming was the creation of an automated weaving loom. The precondition for this development was the rise in the population and the problem of mass production of textiles. Single unit production couldn't cope with the increased volumes. A highly productive machine then appeared, controlled by a program written onto a punch card. The program was recorded on a paper medium with the information coded by means of either the presence or absence of holes in certain places on the card.
The card was read either by electromechanical or photomechanical means. The first presupposed an inventory of metal brushes and a roller. On punching a hole the contacts would touch, closing the electrical circuit and sending a signal to the computer. The second method consisted of photoelectrical elements registering the light beams coming through the holes in a card. In both cases a human created a program and conducted a test launch. Mistakes were then corrected and a second round of testing was conducted. The debugging process lasted until the required result was achieved.
The implementation of punch cards wasn't restricted to weaving looms. Many automated systems worked on similar principles. For instance, the punch card system found its use in a revolutionary invention – the computer. Encoding acted as a kind of translation from human language to that of the machine.
The first computing machines were enormous and equally expensive to build and maintain. Equipment of this kind was only available to large companies. Access to machines was permitted only at certain times, in a specific place and to a limited number of users.
The arrival of personal computers marked a breakthrough in programming. The creation of smaller machines became possible when microprocessors were developed and punch cards were abandoned. Miniaturization let to the creation of a small computer which could easily be bought and set up in an ordinary home. The owner could use the device freely. The appearance of software programs with the possibility of quick testing and debugging increased the speed of implementation of this concept.
Concurrently with the miniaturization of the devices, new programming languages (Rust, Elixir, Go, R, Scala, Haskell) are constantly being created and existing ones improved. General-purpose languages (Java, PHP) are complemented by application-orientated ones (Haskell, Scala, Rust) to solve specific applied tasks.
However, the key players in these processes, passionate about programming, were out of touch with each other. They could share their solutions only when they met personally, usually near their workstations. New possibilities for communication between programmers appeared with the creation of local networks. The seeds of crowdsourcing (the simultaneous work of a group of people on the development of a certain product) were sown.
The arrival of graphic interfaces and the computer mouse made operating the system convenient and easy. A user no longer had to be knowledgeable in programming. The focus then moved to the production of ideas. With the advent of the Internet it became possible to share ideas with professionals who had the required knowledge to implement innovations in real life. Geographical borders were no longer of any consequence. A new sphere of activity emerged – open source. This approach to software development is beneficial both to creators and to the general public. The benefit is mutual because the latter receives a useful operating tool. Competition is intrinsic to human nature. The development of a necessary software product by a group of talented programmers often has an air of enthusiasm associated with it, even though the pay is usually minimal. The quality of such beta testing on a “raw” product is higher when the cost is lower than when using a limited number or participants.
One should also bear in mind that methods of programming are evolving concurrently with development. Time is money. With this in mind, the winner is the one who develops a quality product faster than the competitors. To save time while completing these kinds of tasks, a cross-platform method of programming was created. The essence of this technology lies in writing one block of code from which software is then automatically generated on several mobile platforms.
New issues and requirements caused some changes to programming languages. Initially a microcode assembler was used for programming. Functional programming became the next step. Gradually this was replaced by object-oriented and cross-platform programming. These changes were developed through abstracting from any one particular piece of equipment. The elaboration of an idea leads to the creation of a layer in the form of a software program which works with an operating system. Software development technologies have now gone even further. Sometimes to solve a task, one can even abstract from the operating system itself.
The miniaturization of computers, the existence of a global Internet, wireless methods of information transfer and the mobility of devices are factors which have enabled us to be constantly online. At the present stage of technology development, data can be transferred and processed non-stop. The possibilities of software development have increased accordingly and the time spent on its creation has diminished. One doesn't have to spend time to travel to an operating station anymore. The notion of a virtual reality is now too gaining traction. It refers to one sphere of human cooperation limited neither by time nor geography. Programming itself has become available to the general public and not only to a select few. The process of application development has long since evolved from individual, customized production to a form of mass production resembling an assembly line.