Software Engineering Principles: “the systematic application of scientific and technological knowledge, methods, and experience to the design, implementation, testing, and documentation of software”—The Bureau of Labor Statistics—IEEE Systems and software engineering – Vocabulary.
When the first digital computers appeared in the early 1940s, the instructions to make them operate were wired into the machine. Practitioners quickly realized that this design was not flexible and came up with the “stored program architecture” or von Neumann architecture. Thus the division between “hardware” and “software” began with abstraction being used to deal with the complexity of computing. Source: Wikipedia