Software Lab

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.

Impact

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.

Kalakruthi/Shutterstock

People create software

Cars, portable music players, medical technology, computer games—these products depend on software to function. Behind the software are individuals and teams who use programming to solve problems creatively. The possibilities are endless.

Technology

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.

Waterfall model

Waterfall model

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.

Agile method

Agile method

Imagination...and Precision

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.

Page from Harvard Mark II logbook, September 9, 1947

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.

Healthcare.gov screenshot, December 2, 2013

Healthcare.gov screenshot, December 2, 2013

Light activity <strong>before</strong> the Northeast blackout, August 13, 2003, at 9:21 p.m. EDT
Light activity <strong>during</strong> the Northeast blackout, August 14, 2003, 9:03 p.m. EDT

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

History

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.

LOGO programming on Apple II, ca. 1980

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.

Blockly Maze, Google Inc., 2016

Blockly Maze, Google Inc., 2016

Apple’s Interface Builder, ca. 2014

Apple’s Interface Builder, ca. 2014

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.