Software is a set of programmed instructions stored in the memory of stored-program digital computers for execution by the processor. Software is a recent development in human history and is fundamental to the Information Age. Ada Lovelace's programs for Charles Babbage's analytical engine in the 19th century are often considered the founder of the discipline. However, the mathematician's efforts remained theoretical only, as the technology of Lovelace and Babbage's day proved insufficient to build his computer. Alan Turing is credited with being the first person to come up with a theory for software in 1935, which led to the two academic fields of computer science and software engineering. The first generation of software for early stored-program digital computers in the late 1940s had its instructions written directly in binary code, generally for mainframe computers. Later, the development of modern programming languages alongside the advancement of the home computer would greatly widen the scope and breadth of available software, beginning with assembly language, and continuing through functional programming and object-oriented programming paradigms.
Before stored-program digital computers
Origins of computer science
Computing as a concept goes back to ancient times, with devices such as the abacus, the Antikythera mechanism, astrolabes, mechanical astronomical clocks and mechanical calculators. The Antikythera mechanism is an example for a highly complex ancient mechanical astronomical device. However, these devices were pure hardware and had no software - their computing powers were directly tied to their specific form and engineering. Software requires the concept of a general-purpose processor - what is now described as a Turing machine - as well as computer memory in which reusable sets of routines and mathematical functions comprising programs can be stored, started, and stopped individually, and only appears recently in human history. The first known computer algorithm was written by Ada Lovelace in the 19th century for the analytical engine, to translate Luigi Menabrea's work on Bernoulli numbers for machine instruction. However, this remained theoretical only - the lesser state of engineering in the lifetime of these two mathematicians proved insufficient to construct the analytical engine. The first modern theory of software was proposed by Alan Turing in his 1935 essay Computable numbers with an application to the Entscheidungsproblem (decision problem). This eventually led to the creation of the twin academic fields of computer science and software engineering, which both study software and its creation. Computer science is more theoretical (Turing's essay is an example of computer science), whereas software engineering is focused on more practical concerns. However, prior to 1946, software as we now understand it – programs stored in the memory of stored-program digital computers – did not yet exist. The very first electronic computing devices were instead rewired in order to "reprogram" them. The ENIAC, one of the first electronic computers, was programmed largely by women who had been previously working as human computers. Engineers would give the programmers blueprints of the ENIAC wiring and expected them to figure out how to program the machine. The women who worked as programmers prepped the ENIAC for its first public reveal, wiring the patch panels together for the demonstrations. Kathleen Booth developed assembly language in 1950 to make it easier to program the computers she worked on at Birkbeck College.
Grace Hopper worked as one of the first programmers of the Harvard Mark I. She later created a 500-page manual for the computer. Hopper is often falsely credited with coining the terms "bug" and "debugging", when she found a moth in the Mark II, causing a malfunction; however, the term was in fact already in use when she found the moth. Hopper developed the first compiler and brought her idea from working on the Mark computers to working on UNIVAC in the 1950s. Hopper also developed the programming language FLOW-MATIC to program the UNIVAC. Frances E. Holberton, also working at UNIVAC, developed a code, C-10, which let programmers use keyboard inputs and created the Sort-Merge Generator in 1951. Adele Mildred Koss and Hopper also created the precursor to a report generator.
… excerpt ends here. Continue reading the full article.






