Architecture
Users often see things differently than programmers. People who use modern general purpose computers (as opposed to
embedded systems,
analog computers and
supercomputers) usually see three layers of software performing a variety of tasks: platform, application, and user software.
- Platform software: Platform includes the firmware, device drivers, an operating system, and typically a graphical user interface which, in total, allow a user to interact with the computer and its peripherals (associated equipment). Platform software often comes bundled with the computer. On a PC you will usually have the ability to change the platform software.
- Application software: Application software or Applications are what most people think of when they think of software. Typical examples include office suites and video games. Application software is often purchased separately from computer hardware. Sometimes applications are bundled with the computer, but that does not change the fact that they run as independent applications. Applications are usually independent programs from the operating system, though they are often tailored for specific platforms. Most users think of compilers, databases, and other "system software" as applications.
- User-written software: End-user development tailors systems to meet users' specific needs. User software include spreadsheet templates and word processor templates. Even email filters are a kind of user software. Users create this software themselves and often overlook how important it is. Depending on how competently the user-written software has been integrated into default application packages, many users may not be aware of the distinction between the original packages, and what has been added by co-workers.
[edit] Documentation
Most software has
software documentation so that the
end user can understand the program, what it does, and how to use it. Without clear documentation, software can be hard to use—especially if it is very specialized and relatively complex like
Photoshop or
AutoCAD.
Developer documentation may also exist, either with the code as comments and/or as separate files, detailing how the programs works and can be modified.
[edit] Library
An executable is almost always not sufficiently complete for direct execution.
Software libraries include collections of
functions and functionality that may be embedded in other applications. Operating systems include many standard Software libraries, and applications are often distributed with their own libraries.
[edit] Standard
Since software can be designed using many different
programming languages and in many different
operating systems and
operating environments,
software standard is needed so that different software can understand and exchange information between each other. For instance, an
email sent from a
Microsoft Outlook should be readable from
Yahoo! Mail and vice versa.
[edit] Execution
Computer software has to be "loaded" into the
computer's storage (such as the
hard drive or
memory). Once the software has loaded, the computer is able to
execute the software. This involves passing
instructions from the application software, through the system software, to the
hardware which ultimately receives the instruction as
machine code. Each instruction causes the computer to carry out an operation – moving
data, carrying out a
computation, or altering the
control flow of instructions.
Data movement is typically from one place in memory to another. Sometimes it involves moving data between memory and registers which enable high-speed data access in the CPU. Moving data, especially large amounts of it, can be costly. So, this is sometimes avoided by using "pointers" to data instead. Computations include simple operations such as incrementing the value of a variable data element. More complex computations may involve many operations and data elements together.
[edit] Quality and reliability
Software quality is very important, especially for commercial and system software like
Microsoft Office,
Microsoft Windows and
Linux. If software is faulty (buggy), it can delete a person's work, crash the computer and do other unexpected things. Faults and errors are called "
bugs." Many bugs are discovered and eliminated (debugged) through
software testing. However, software testing rarely – if ever – eliminates every bug; some programmers say that "every program has at least one more bug" (Lubarsky's Law). All major software companies, such as Microsoft, Novell and
Sun Microsystems, have their own software testing departments with the specific goal of just testing. Software can be tested through
unit testing,
regression testing and other methods, which are done manually, or most commonly, automatically, since the amount of code to be tested can be quite large. For instance,
NASA has extremely rigorous software testing procedures for many operating systems and communication functions. Many NASA based operations interact and identify each other through command programs called software. This enables many people who work at NASA to check and evaluate functional systems overall. Programs containing command software enable hardware engineering and system operations to function much easier together.
[edit] License
The software's license gives the user the right to use the software in the licensed environment. Some software comes with the license when purchased off the shelf, or an OEM license when bundled with hardware. Other software comes with a
free software license, granting the recipient the rights to modify and redistribute the software. Software can also be in the form of
freeware or
shareware.
[edit] Patents
Software can be patented in some but not all countries; however,
software patents can be controversial in the software industry with many people holding different views about it. The controversy over software patents is about specific
algorithms or techniques that the software contains, which may not be duplicated by others and considered
intellectual property and
copyright infringement depending on the severity.
[edit] Design and implementation
Design and implementation of software varies depending on the complexity of the software. For instance, design and creation of
Microsoft Word software will take much more time than designing and developing
Microsoft Notepad because of the difference in functionalities in each one.
Software is usually designed and created (coded/written/programmed) in
integrated development environments (IDE) like
Eclipse,
Emacs and
Microsoft Visual Studio that can simplify the process and
compile the program. As noted in different section, software is usually created on top of existing software and the
application programming interface (API) that the underlying software provides like
GTK+, JavaBeans or
Swing. Libraries (APIs) are categorized for different purposes. For instance,
JavaBeans library is used for designing
enterprise applications,
Windows Forms library is used for designing graphical user interface (GUI) applications like
Microsoft Word, and
Windows Communication Foundation is used for designing
web services. Underlying
computer programming concepts like
quicksort,
hashtable,
array, and
binary tree can be useful to creating software. When a program is designed, it relies on the API. For instance, if a user is designing a Microsoft Windows desktop application, he/she might use the
.NET Windows Forms library to design the desktop application and call its APIs like
Form1.Close() and
Form1.Show()[6] to close or open the application and write the additional operations him/herself that it need to have. Without these APIs, the programmer needs to write these APIs him/herself. Companies like
Sun Microsystems,
Novell, and
Microsoft provide their own APIs so that many applications are written using their
software libraries that usually have numerous APIs in them.
Computer software has special economic characteristics that make its design, creation, and distribution different from most other economic goods.
[7][8] A person who creates software is called a
programmer,
software engineer,
software developer, or
code monkey, terms that all have a similar meaning.
[edit] Industry and organizations
A great variety of software companies and programmers in the world comprise a software industry . Software can be quite a profitable industry:
Bill Gates, the founder of
Microsoft was the richest person in the world in 2009 largely by selling the
Microsoft Windows and
Microsoft Office software products. The same goes for
Larry Ellison, largely through his
Oracle database software. Through time the software industry has become increasingly specialized.
Non-profit software organizations include the
Free Software Foundation,
GNU Project and
Mozilla Foundation. Software standard organizations like the
W3C,
IETF develop software standards so that most software can interoperate through standards such as
XML,
HTML,
HTTP or
FTP.
Other well-known large software companies include
Novell,
SAP,
Symantec,
Adobe Systems, and
Corel, while small companies often provide innovation.
[edit] References
- ^ "Wordreference.com: WordNet 2.0". Princeton University, Princeton, NJ. http://www.wordreference.com/definition/software. Retrieved 2007-08-19.
- ^ software..(n.d.). Dictionary.com Unabridged (v 1.1). Retrieved 2007-04-13, from Dictionary.com website: http://dictionary.reference.com/browse/software
- ^ Hally, Mike (2005:79). Electronic brains/Stories from the dawn of the computer age. British Broadcasting Corporation and Granta Books, London. ISBN 1-86207-663-4.
- ^ a b John Tukey, 85, Statistician; Coined the Word 'Software', New York Times, Obituaries, July 28, 2000 [1]
- ^ Tying Arrangements and the Computer Industry: Digidyne Corp. vs. Data General
- ^ "MSDN Library". http://msdn.microsoft.com/en-us/library/default.aspx. Retrieved 2010-06-14.
- ^ v. Engelhardt, Sebastian (2008): "The Economic Properties of Software", Jena Economic Research Papers, Volume 2 (2008), Number 2008-045. (in Adobe pdf format)
- ^ "Why Open Source Is The Optimum Economic Paradigm for Software"