Interchangeable Parts and Software Development
Interchangeability of parts is made possible by manufacturing parts to precise tolerances according to clear, well-defined specifications.
Historically, one of the problems with software development has been the tendency of programmers to build software out of parts that have been hammered to fit one particular program.
The more modern and productive practice is to assemble programs out of reusable parts. These reusable parts should be designed very carefully, so they will be as easy to use and as generally useful as possible. They must also be implemented carefully; any deviation from their specification can interfere with their interchangeability.
(It is possible to add extra features to an otherwise interchangeable part to support some specific application, and object-oriented programming is supposed to make that easier. On the other hand, you shouldn't do that without good reason. When client code depends upon custom features of otherwise interchangeable parts, those parts are no longer interchangeable.)
Standardized components
Interchangeable parts contributed to the industrial revolution.
Interchangeable parts also contribute to software productivity.
These days, virtually all software relies upon standardized components: operating systems, programming languages, computer arithmetic, reusable data structures, and libraries for i/o, Unicode, GUIs, data bases, and just about anything else you could name.
The online documentation for Java Standard Edition 6 describes
52 subpackages of the java
package,
115 subpackages of javax
,
36 subpackages of org
.
The documentation for those packages
describes 3793 classes and interfaces.
Today, programmers build software by gluing together these standard components that already do most of the hard things their software needs to do. It's getting harder to come up with semester projects that can't be done by a short shell script.
That's good. Programming hasn't always been this easy. Once upon a time, programmers had to write most of the software they delivered to clients. Some programmers even took pride in writing all the software themselves.