What is Software?
Computers have the potential to do wondrous things. But actually doing them? That needs software.
Software transforms general-purpose machines into useful tools, providing instructions that tell them what to do and how to do it. These instructions might be simple or complex, long or short, depending on the task.
Programmers write software in various computer “languages,” which use different ways to tell the computer what to do.
Modeling the World
To perform practical tasks, software must often create a model of the world in which it operates.
Engineering software might simulate road conditions to test car designs. Music encoding embraces a model of our auditory system to determine what tones to include or discard. Medical, financial, artistic software—all simulate aspects of our world.
How Is Software Made?
One of the first decisions software developers face is how to best to organize the workflow of a project.
The two most popular ways to make software are called Waterfall and Agile. The first uses a fixed series of steps and delivers the product only at the end. The second encourages delivery of an early version, which is then repeatedly improved.
The Waterfall model, formalized in the 1970s, is a linear approach to software development. Each phase is finished before the next one begins, often by different people. It is good for many high-reliability and mission-critical projects, but the cost of fixing problems found in later stages is high.
The Agile method, formerly defined in 2001, focuses on building quick prototypes, getting frequent feedback from the customer, and then making changes accordingly. The resulting intermediate software is evaluated, and then incrementally improved. For large projects this takes a lot of organizational discipline.
Writing software demands creativity, the vision to imagine new computer uses or to conceive new approaches for old uses.
But computers are literalists. They’ll do exactly what the software says—not what the programmer meant to say. So writing software also demands extraordinary attention to detail. One tiny typo amid thousands of lines of code can trigger an avalanche of unintended consequences.
US Navy Photo
Page from Harvard Mark II logbook, September 9, 1947
In 1947 a young programmer named Grace Hopper discovered a moth trapped inside the Harvard Mark II computer. She recorded the error and taped the bug into the computer’s logbook, shown here. Software errors have been called “bugs” ever since.
National Oceanic and Atmospheric Administration Defense Meteorological Satellite Program
Light activity before the Northeast blackout, August 13, 2003, at 9:21 p.m. EDT Light activity during the Northeast blackout, August 14, 2003, 9:03 p.m. EDT
When power lines hit trees on August 14, 2003, a glitch in the computerized alarm system left operators unaware that they needed to restore power. The bug, called a “race condition,” occurs can occur when the behavior of a system depends on the timing of external events. The Northeast blackout affected 10 million residents in Ontario, Canada, and 55 million residents throughout the Northeastern and Midwestern United States.
Pictures Worth 1,000 Words?
All software uses written code…but we seldom see it. Instead, we often drag images or click pictures. Visual programming tools build on that familiar interface to make programming easier both for beginners and professionals.
With such tools, people create software by manipulating graphics that represent blocks of code, letting them focus on developing the program’s logic and functionality.
Image made by emulation.
LOGO programming on Apple II, ca. 1980
LOGO is one of the earliest children's programming languages, developed at BBN by Seymour Papert and others in 1967. It uses simple commands to draw shapes by moving a small “turtle” (see lower-left point of star). Schools used LOGO to introduce kids around the world to computing.
Image made by emulation. Used with permission, courtesy of Big Nerd Ranch.
Apple’s Interface Builder, ca. 2014
Graphical user interface applications used to be tricky to program. The creation of visual tools, such as Interface Builder and Microsoft Visual Studio, allowed programmers to quickly design user interfaces and link them to their code. Visual tools are can be used for anything from prototypes and to mission-critical enterprise applications.
How Much Code Do You Have to Write?
Want to boil an egg? The recipe is brief. Want to prepare Peking duck? The instructions are longer.
Creating software is similar. For simple tasks, programmers might only have to write brief instructions. But complex operations may require them to write vast amounts of intricate code.
Compiled by the Computer History Museum.
Lines of code visualization (numbers are approximate)
This graphic shows the complexity of several popular real-world software applications. Although it’s only a rough measure, generally the more lines of code a program has, the more complex it is. Texting, for example, appears small but, like most of these applications, it relies on a massive software, hardware, and networking infrastructure to work.