Software is a collection of computer programs and related documents and information. This is in contrast to the hardware that the system is built from to do the actual work.
The code executed at the lowest levels of programming consists of machine language instructions supported by a single processor—usually a central processing unit (CPU) or graphics unit (GPU). Machine language consists of sets of binary values that represent process instructions that change the computer's state from its previous state. For example, an instruction can change a value stored in a specific memory location in the computer, an effect that is not directly visible to the user. An expression can also call one of several input or output functions, e.g. B. displaying text on a computer screen; this causes a state change that must be visible to the user. The processor executes the instructions in a specific order unless it is told to "jump" to another instruction or is interrupted by the operating system. By 2022, most computers, smart devices, and servers will feature multiprocessors, or multiple processors that perform computations together, making computing a much larger activity than before.
Most programs are written in a high-level programming language. It's easier and more efficient for programmers because they are closer to natural languages than machine languages. High-level languages are translated into machine language by a compiler or interpreter or a combination of these. The software may also be written in a simple assembly language that conforms to the computer's machine language instructions and is assembled into machine language.
Ada Lovelace wrote the first predictive analytics software in the 19th century. He made a proof to show how the machine calculates the Bernoulli numbers. It is considered to be the first computer programming because of evidence and algorithms.
The first theory of computer software as we know it today was proposed by Alan Turing in his 1936 work on computable numbers as applied to the decision problem. This eventually led to the creation of the Computer Science and Software Engineering Division; both domain research plans and their creation. Computer science is the theoretical study of computers and software (Turing's dissertation is an example of computer science), while software engineering is the application of engineering principles to software development.
In 2000, a Yale Law School librarian published a letter stating that John Wilder Tukey's 1958 article "The Teaching of Concrete Mathematics" contained the first known use of the term "software" found on a search of OECD in the electronic Archive from JSTOR was found. . - Loan for two years. This led to the belief that Turkey invented the term, particularly in commemorative books issued that year, although Tukey never claimed such a coin. In 1995, Paul Netiquette claimed he originally coined the term in October 1953, although he found no documentation to support his claim. The earliest known publication of the term "environmental software engineer" was an August 1953 Rand Corporation research paper by Richard R. Carhartt.
can be divided into several broad categories.
systems go beyond the basic operation of the computer itself. There are many types of application software, since the range of tasks that can be performed on a modern computer is very wide - see the list of software.
System software controls the operation of hardware to provide the basic functionality needed by users or other software to function properly when needed. Application software  and includes the following elements:
drivers, auto lasers, shells and windowing systems are key components of operating systems. Operating systems come with additional software (including application software), potentially allowing the user to work with a computer that only has an operating system.
Project managers control or manage a specific type of device connected to a computer. Each device requires at least one suitable device driver; Because a computer typically has at least one printer and at least one printing device, the computer typically requires multiple device drivers.
Computers are computer programs designed to help students maintain and maintain their computers.
Malicious software or malicious software is software designed to damage or interfere with the operation of computers. Malware is closely related to security breaches, although some malware can be maliciously designed.
Desktop applications such as web browsers and Microsoft Office and LibreOffice and WordPerfect, as well as applications for smartphones and tablets (“Applications”).
Server software including:
Add-ons and plug-ins are software that extend or modify the functionality of other software and require the use of the software in order to function
. Firmware, like the embedded software of embedded systems, is a disposable or consumable device like cars and televisions (although some embedded devices, such as wireless chips, may themselves be part of a traditional computing system, such as a computer or smartphone... ). In the context of an embedded system, there is sometimes no clear separation between the system and the software. However, embedded systems in View use embedded operating systems, and these systems distinguish between system software and application software (although it's usually just a fixed program that's always running).
Microcode is a special and relatively obscure type of firmware that tells the processor itself how to use the firmware, so it's actually a lower level than firmware. It is usually owned by the processor manufacturer, and any necessary software updates for microcode fixes are made available to students (which is much cheaper than providing CPU replacement hardware). So the average programmer didn't wait to tackle it.
tools are also software in the form of programs or applications that programmers use to create, debug, maintain, or support software.
The software is written in one or more programming languages; there are many programming languages and each has at least one implementation, each consisting of its own set of programming tools. These tools can be relatively independent programs such as compilers, debuggers, interpreters, hobbyists, and text editors that can be combined to accomplish a task; However, they can form an integrated development environment (IDE) that combines most or all of the functionality of these separate tools. IDEs can do this by calling appropriate custom tools or by implementing the functionality in new ways. An IDE can make certain tasks easier to perform, such as B. locating files in a specific project. Many implementations of a programming language offer the possibility of using individual tools or IDEs.
See also: Software architecture
Users of modern general-purpose computers (as opposed to embedded systems, analog computers, and supercomputers) typically see three layers of software that perform distinct roles: platform, application, and operating system.
Platform Software: The platform consists of hardware, device drivers, an operating system, and usually a graphical user interface that allows the user to fully interact with the computer and its peripherals (connected devices). Platform The software is often included with the computer. Usually you have the opportunity to change the software from the moment you start the computer.
Software: Software is what most people think of when they think of software. Typical examples are office suites and video games. Software is often purchased separately from hardware. Sometimes programs come with your computer, but that doesn't change the fact that they work as separate programs. Programs are generally operating system independent programs, although they are often tailored to specific systems. Most users think of computers, databases, and other "system software" as programs.
User-Written Software: End-user development customizes systems to specific user needs. The software uses spreadsheet templates and word processing templates. E-mail filters are also a type of user agent. Users create this software themselves and often forget about its meaning. Depending on how cleverly user-written software is integrated into standard application packages, many users may not be aware of the difference between adding native and build packages. .
Computer Software must be "loaded" into the computer's memory (e.g., a hard drive or memory stick). Once the software is downloaded, the computer can run it. It involves sending instructions from the application software through the system software to the hardware, which eventually receives the instructions as hardware code. Each instruction causes the computer to perform an action—transfer data, perform calculations, or change the instruction's flow of control.
Data is usually transmitted from one person to another. This sometimes requires moving data between memory and registers to allow fast access to data on the processor. Transferring data, especially large amounts, can be expensive; Sometimes this can be avoided by using "pointers" to the data. Calculations involve simple operations like adding the value of a variable record. More complex calculations can involve multiple methods and dates together.
Software quality is very important, especially in business software and system software. If the software is broken, it can destroy one's work, crash the computer and do other unexpected things. Bugs and bugs are often found during alpha and beta testing. Software, too, often falls victim to what is known as software obsolescence, a gradual drop in performance caused by a combination of invisible errors.
Many bugs are found and fixed through software testing. But software testing rarely, if ever, fixes all bugs; some programmers say, "Every program has at least one other bug. Vattenfall's software development method usually uses a dedicated testing team, but with newer methods, collectively known as agile software development, developers often do all the testing themselves and regularly show the software to students/customers to get feedback. Software can be tested through unit testing, regression testing, and other manual or more commonly automated methods, as the volume of water to be tested can be significant. Applications that contain driver software make it much easier for hardware and system operations to work together.
a software license gives the user the right to use the software in the licensed environment and, in the case of a free software license, other rights such as the right to copy.
Software can be divided into two types:
free software, which includes the "free trial" category, or "freemium" software (in the past the term shareware was often used for free/freemium trial software). As the name suggests, freeware is free to use, but in the case of free trial or freemium software, sometimes it's only for a limited time or limited functionality.
paid software that can only be used legally if a license is purchased.
Open source software comes with a free software license that grants the recipient the right to modify and distribute the software.
Software patents, like other types of patents, are theoretically intended to grant the inventor an exclusive, time-limited license to a specific idea (such as an algorithm) for implementing software or software. . . Ideas about useful things software can do and user requirements shouldn't be patentable, and concrete implementations (ie actual software packages implementing the patent) shouldn't be patentable either - the latter is usually already copyrighted. Automatically. Software patents must therefore cover the middle ground between requirements and practical implementation. In some countries, the requirement that the claimed invention have physical world effects may also be part of the value of a software patent - although any useful software has physical world effects, this requirement can be debated. During this time, US copyright law applies to various aspects of writing software code.
Software patents are controversial in the software industry because many people have different opinions about them. A source of controversy is that in practice patent attorneys do not respect the aforementioned distinction between original ideas and patents - for example patents for visually oriented programming (APP) aiming to claim rights to any software technology. implements the AOP concept independently of the implementation. Another point of contention is the impact on innovation, with many well-known experts and companies arguing that software is such a fast-moving industry that software patents only add huge additional costs and litigation risks, and stifle innovation. In discussions of non-US patents, it has been argued that large US companies and patent attorneys would likely benefit from being granted or maintaining patent protection.
The planning and implementation of the software varies depending on the complexity of the software. For example, Microsoft Word took much longer to design and create than Microsoft Notepad as the former has many basic features.
Software is usually developed in an integrated development environment (IDE) such as Eclipse, IntelliJ and Microsoft Visual Studio, which can streamline the process and create software. As mentioned in another product, software is usually built on top of existing software and application programming interfaces (APIs) provided by underlying software such as GTK, Java Beans or Swing. Libraries (APIs) can be classified according to their purpose. For example, the Spring Framework is used to implement enterprise applications, the Windows Forms library is used to design graphical user interface (GUI) applications such as Microsoft Word, and the Windows Communication Foundation is used to design web services. Once an application is designed, it relies on an API. For example, a Microsoft Windows desktop application can close or open the application by calling API functions in the .NET Windows Forms library such as Form1.Close() and Form1.Show(). Without these APIs, the developer has to write these functions themselves. Companies like Oracle and Microsoft provide their own APIs, so many applications are written using their libraries, which typically have multiple APIs.
Data structures such as hash tables, matrices, and binary trees, and algorithms such as quicksort can be useful in software construction.
Computer software has special economic characteristics that differ from most other economic products in design, production and distribution.
A person who creates software is referred to as a programmer, software engineer, or software developer, all of which mean the same thing. There are also informal terms for programming such as "coder" and "hacker" - although using the latter can be confusing as it is more commonly used to refer to someone breaking into a system illegally.